(2007.02.28)
いやあここまでくるのに、ものすごく時間がかかってしまいました。
いまから思うと、一番のネックはhcidの起動でした。
ことの発端は、せっかく、あれこれBlueToothでつなげられたんだから、
いっそのこと家の中では、無線LANでなくてBlueTooth-LANでもいいんではないかと、
そういう思いがわきあがってきた。
無線LANにするときは、一回、BlueToothのCFカードをはずし、
そこにCoregaのCF-11というCFカードを挿して、それでネットに接続して
いたからである。
結果、BlueToothの距離で大丈夫か?という心配もありましたが、
(家が狭いこともあり)充分に1階でも、途切れることなくつながることが
わかった。これはClass-1なのかな?10m距離タイプなのか?
家で、低消費電力で動いてるサーバーはOBS266だが、あいにくとこれには
USBがついてない。
そこで次に低消費電力なのが、玄箱/HGなので、これにUSB-BlueToothを
つなぎ、PANDのマスタにしてネット接続するという構想である。
ここから苦難が始まる。もともと、kuroboxHGのカーネルは2.4.17で
もちろんカーネル部にBlueToothが入ってるわけがなく、カーネルの
入れ替えからとりかかる。
で、山下さんのところにいっぱい書いてあるのを参考に
入れ替えを考えていたが、ふと"Das U-Boot"というのに気がつき、
おうコレコレ!と、けっきょく、ubootを使うことにした。
これもまた困難なみちのりであったが、そこは省略して
とにかく、Linux-2.6.20-kuroboxHGのカーネルが動くようになり、
gccをgcc-3.4.6に上げた。そして、これを使い、
ダウンロードしてきたlinux-2.6.20.tar.gzとkurobox-sources-2.6.20.patchとで
ソースからカーネル(2.6.20)を作り始めた。
で、% make menuconfig のところで
それと、いままで % alias ls でlsを"ls -AF"とかにしていたが、
これが./configで悪さをするので、これはやめてしまった。
% make menuconfig のところでBlueToothをオンにする。
そうして、カーネルとカーネルモジュールを作る。
カーネルはuImageを作り、もらってきたuImageと、取り換え動かしてみたら
動いた。(たとえ失敗しても、ubootを使っているのでこわくない。
いざとなったら古いカーネルで起動できるんだから)
そうして、USB-BlueToothを挿し、さてうまくいくか。。。
うまくいかない。hcidがエラーを起こす。で、dbusを変えてみたり
ここから試行錯誤を繰り返した。
そうしてるうちに、S97messagebusを事前に動かしておかないのが
原因とわかり、やっとネット接続ができたのが今日である。
一度セットアップがすめば、あとは簡単。
kuroboxHGでは立ち上がりの時にほとんど準備が終わってしまう。
ただし、リブートのとき、USBが刺さってるとうまくいかない。
そういうときは抜いてまた挿すといい。そうすれば大丈夫。
あるいは # /etc/rc.d/init.d/bluetooth restart でリスタートする。
kuroboxHG側のPANDは
pand --listen --role NAP --devup /etc/bluetooth/pan/dev-up
で動かしてある。
ザウルスのほうでネット接続したいなと思ったら、
# pand -c xx:xx:xx:xx:xx:xx -n
で接続。
このあと、自動でなくて手動でやってるのが現在だけど、そのうち、
ここも自動化したいと思っているが、
接続できたよというメッセージが出たら、
# ifconfig bnep0 192.168.100.2 up
# route add default gw 192.168.100.1
これで完了。あとはsshでつなげられる。
NetFrontを使いたいなら、ネット接続してることを
知らしめるために、
# "up()"
して地球マークを○にしておかないといけない。
このあたりを自動にできたら最高。
そして終了したいときは、
# ifconfig bnep0 down
# pand -K あるいは # pand --kill xx:xx:xx:xx:xx:xx
で終わり。
玄箱側では、bnep0に接続があると、dev-upで/etc/bluetooth/pan/dev-upが
起動するようになっていて、ここで
ifconfig $1 192.168.100.1 up   ($1 = bnep0)
echo 1 > /proc/sys/net/opv4/ip_forward
が行われる。