FreeBSD7.0でemobile(D02HW)を使う
USB接続のemobileがFreeBSD7.0で動いたので動作報告です。新しく買ったノートPCはFreeBSDを使っていて、クライアントとして使うOSのカーネルまで弄る趣味は無いけど、流石にモバイルでemobileが使えないのは致命的過ぎるので頑張ってみました。
このデバイス、USBメモリとUSBモデムが同居していて、普通に繋げると10MBのUSBメモリとして認識されます。その中にドライバが入っていて、windowsだと自動的に展開されてモデムが起動する仕組みなわけです。
emobileには普通にPPPで繋がれば良いのでFreeBSDでも使えるはずなんだけど、USBで繋げるとUSBメモリ(umass)としか認識されないので、細工をしてモデムとして認識されるようにします。
カーネルソースにパッチ当て
こいつ(D02HW)は韓国かどこかの製品のOEMらしく世界中で使われているので、既に誰かがパッチを書いてたりします。
MavEtJu's Distorted View of the World
↑を参考にusb/118686: [usbdevs] [patch] teach usbdevs / ubsa(4) about Huawei E220 G3 Modemの一番新しいパッチをカーネルソースに当てます。パッチは6.2のものなので7.0のFreeBSDにはpatchコマンドで簡単に当たらないので「/usr/src/sys/dev/usb」以下のソースに手動で埋め込んでいきます。行が違うくらいでソース自体はそのまま張り付けました。
カーネルコンパイル
カーネルコンフィグでumassを無効にします。
> cp /sys/i386/conf/GENERIC /sys/i386/conf/NEW > vi /sys/i386/conf/NEW #device umass ←#でコメントアウト > config /sys/i386/conf/NEW > cd /sys/i386/compile/NEW > make clean depend; make depend; make all install;
/boot/loader.confに2行追加します。
ubsa_load="YES" umass_load="YES"
これで再起動。/dev/cuaU0 が見えていたら成功です。
ppp.confの編集
pppの設定ファイルは「/etc/ppp/ppp.conf」です。下のように作成しました。
default: set log Phase Chat Connect LCP IPCP CCP tun command ident user-ppp VERSION (built COMPILATIONDATE) # Ensure that "device" references the correct serial port # for your modem. (cuad0 = COM1, cuad1 = COM2) # set device /dev/cuaU0 set speed 115200 set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \ \"\" AT OK-AT-OK ATE1Q0 OK \\dATDT\\T TIMEOUT 40 CONNECT" set timeout 0 # 3 minute idle timer (the default) enable dns # request DNS info (for resolv.conf) d02hw: # # edit the next three lines and replace the items in caps with # the values which have been assigned by your ISP. # set phone "*99***1#" set authname "em" set authkey "em" set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0 delete ALL add default HISADDR enable dns
接続
rootで「/usr/sbin/ppp -background d02hw」を実行して接続出来ました。オプションの-backgroundを外すと対話モードで起動するので、デバッグなど出来ると思います。
切断は「kill -TERM `cat /var/run/tun0.pid`」で行ってます。接続時に自動的にゲートウェイとDNSが切り替わるんだけど、切断後そのままになってしまうので、startppp.shとstopppp.shを作って切断時に元に戻すようにしました。
startppp.sh #!/bin/sh /usr/sbin/ppp -background d02hw
stopppp.sh #!/bin/sh kill -TERM `cat /var/run/tun0.pid` sh -c 'echo "nameserver 192.168.24.10" > /etc/resolv.conf' route add default 192.168.24.10
その他
このままじゃ遅いってどこかで見たけど、上の作業だけで400Kbpsくらい出てます。うーん、遅いのだろうか。