光紀書庫 >> Linux を FOMA 経由でインターネット接続

Linux を FOMA 経由でインターネット接続

LinuxノートPCをネットにつなぎたい時、小さなホテルや山間部、海外などで携帯電話に頼らざるを得ないことがあります。 ドコモの FOMA 携帯電話は USB ケーブルで PC につなげますが、Linux 用のデバイスドライバがドコモから提供されていないので作ってみました。

Catsin さんが Linux PDA のザウルス用のドライバを開発され、カーネル 2.4 の Linux PC でも動いているようですが、2.6 では動かないため、新たに 2.6 の drivers/usb/class/cdc-acm.c を改造しました。 DoCoMo の FOMA USB の仕様書に従い端末接続時にモデムモードに切り替えただけで、きれいに書いていません。

ご意見やご質問は芳名帳からお願いします。


動作環境と配布物

次の OS と FOMA 端末のどれかの組み合わせで確認しています。すべての組み合わせを試していません。

OS:
OS の版ソース差分バイナリ
Kernel 2.6.27, Fedora Core 10 acm-foma.c-2.6.27 acm-foma.patch-2.6.27 (*1)
Kernel 2.6.18, Fedora Core 6 acm-foma.c-2.6.18 acm-foma.patch-2.6.18 acm-foma.ko-2.6.18
Kernel 2.6.9, Fedora Core 3 acm-foma.c-2.6.9 acm-foma.patch-2.6.9 acm-foma.ko-2.6.9

これら以外の版では差分を参考に cdc-acm.c の修正をお願いします。

(*1) この版では、bInterfaceClass によって全機種を1つのソースコードで動かせませんでした。 acm-foma.c 中の Motorola FOMA M702iG の行にある idVendor, idProduct を lsusb コマンドで調べるなどして自分の端末用に書き換え、再コンパイルする必要があります。

FOMA 端末:

(*2) N, P の端末は一度閉じると次に開けず、ケーブルをさし直すと開けます。

SH901iS, SH700iS では正常に動作していません。 AT コマンドには応答しますが、PPP 接続しようとすると LCP: timeout sending Config-Requests となります。同じシャープ製の新しい機種では動作しています。

L705iX (LG 製) と kernel 2.6.9 の組み合わせでは、ttyACM? ができた直後に usb 2-1: string descriptor 0 read error: -110 のように落ちます。

L601i (Simpure L1、LG 製) は bInterfaceSubClass = 2 (modem) とのことで、 このドライバでなく標準の cdc-acm.ko で動作しそうです。 ATDT*9601NO CARRIERを返す所まで確認しました。 L601i がIP接続のパケット通信のみに対応とのことで未評価です。

コンパイル

バイナリの acm-foma.ko を使う場合はこの節を読み飛ばしてください。 ここでは、カーネル全体をコンパイルせず、とりあえず acm-foma.c だけをコンパイルする人のために簡単なコンパイル手順をまとめました。 kernel-2.6.27.5-117.fc10.src.rpm など使っているカーネルの版のソースコードをダウンロードして、次のコマンドを順に実行します。
rpm -U kernel-2.6.27.5-117.fc10.src.rpm
cd ~/rpmbuild/SPECS
rpmbuild -bp --target `uname -m` kernel.spec
cd ~/rpmbuild/BUILD/kernel-2.6.27/linux-2.6.27.i686
make oldconfig && make prepare
cd scripts/mod
ln -s /usr/src/kernels/2.6.27.5-117.fc10.i686/scripts/mod/modpost .
以上の準備ができたら、acm-foma.c を drivers/usb/class/ に置き、必要に応じて書き換えます。 drivers/usb/class/Makefile の obj-$(CONFIG_USB_ACM) += cdc-acm.o の後に acm-foma.o を加えます。

~/rpmbuild/BUILD/kernel-2.6.27/linux-2.6.27.i686 に戻って make M=drivers/usb/class/ modules すると acm-foma.ko ができます。

インストール

運がよければ上で配布しているバイナリが動くでしょう。acm-foma.ko を /lib/modules/2.6.x/kernel/drivers/usb/class に置いて、depmod -a します。

USB ケーブルで FOMA 端末をつなぐと、うまくいけば /var/log/messages に /dev/ttyACM0 ができたことが示されます。Ignoring extra header など警告が出ますが無視します:-) minicom, cu, kermit などお好みの端末プログラムで AT と送って OK が返るか確認します。

必須ではありませんが、つないだ時に /dev/modem を作ってもらうためには /etc/udev/rules.d/91-foma.rules を作り、1行 KERNEL=="ttyACM0", SYMLINK+="modem" と書きます。

ネットにつなぐため適当に PPP を設定します。手続きなしで使える mopera の電話番号が、64k 回線交換で *9601、384k パケット交換で *99# です。ユーザ名とパスワードは任意です。

不具合

免責事項

このドライバは無保証で、使用による損害も使用者の責任となります。使用方法や誤動作により通信料が高額になる可能性があるので、定期的に確認することをお勧めします。

使用、再配布、改造などは GPL に準じます。


みつのりしょこ >> Linux を FOMA 経由でインターネット接続