パスワードを忘れた? アカウント作成
156902 journal

azkの日記: ubuntu 9.04 で docomo L-02A を使う

日記 by azk

ubuntu 8.10 で docomo L-02A を使う (その2)の続きというか修正というか。
自分のLinux環境を8.10から9.04に上げたんですが、どうやら前回のudev rule では9.04では動かないみたいです。それじゃあんまりなので、もう一度書き直すことにしました。

前回と同じように、usb_modeswitch を使わずにむりやりL-02Aをusbserialとして認識させてみるというお話です。

9.04でも、L-02AはUSBに繋いだ後は/dev/sr0として見え、eject /dev/sr0 でイジェクトすると裏のシリアルデバイスが見えるところは変わりません。

まずはudev的にどう見えているかを確認します。
udevinfoはudevadmに統合されたっぽいので、

$ sudo udevadm info --query=all --path=/sys/block/sr0

とかすると、
E: ID_SERIAL=LGE_CD-ROM_000000000002-0:0
あるいは、
E: ID_VENDOR_ID=1004
E: ID_MODEL_ID=610c

みたいなのが見えるので、このへんを使ってみます。

$ sudo vi /etc/udev/rules.d/99-foma_l-02a.rules

などでrulesファイルを作ります(他のrulesが動いた後の方が良さそうな気がしたので、99-にしてみました)

----- 99-foma_l-02a.rules ここから -----
# for FOMA L-02A
# USB Storage (Zero Installation)
KERNEL=="sr[0-9]*", ENV{ID_VENDOR_ID}=="1004", ENV{ID_MODEL_ID}=="610c", RUN+="/usr/bin/eject /dev/$kernel"
 
# USB Modem (ttyUSB)
SUBSYSTEM=="usb", ATTR{idVendor}=="1004", ATTR{idProduct}=="6109", RUN+="/sbin/modprobe usbserial vendor=0x$attr{idVendor} product=0x$attr{idProduct}"</del>
----- 99-foma_l-02a.rules ここまで -----

※ 最初は以下のように書いてみたんですが、ID決め打ちで誤認識を防げるなら、上の例の方が良いよね。

# KERNEL=="sr[0-9]*", ENV{ID_SERIAL}=="LGE_CD-ROM_000000000002-0:0", RUN+="/usr/bin/eject /dev/$KERNEL"

次に、cdc_acmドライバを読まないようにblacklistを設定させてもらいます。

$ sudo vi /etc/modprobe.d/blacklist-cdc_acm.conf

----- blacklist-cdc_acm.conf ここから -----
blacklist cdc_acm
----- blacklist-cdc_acm.conf ここまで -----

とかでblacklistを定義すると、指定されたモジュールは読み込まれません。

※ 通常、eject /dev/sr[0-9]* が実行された後にcdc_acmドライバが読み込まれるのですが、残念ながら現行のcdc_acmドライバにはDocomo L-02Aの情報が含まれていないため、I/O Errorで手詰まりになっちゃうみたいです(この問題をなんとかするべく、頑張って下さっている方もいらっしゃるようです)。そこでblacklistでcdc_acmを止めつつ、udevの方でusbserialドライバをvendor_ID:product_ID付きでmodprobeさせてもらいますってのは前回のまま。

とりあえずこれで

L-02A挿入 -> /dev/sr[0-9]*で認識 -> udevによりeject実行 -> 1004:6109のUSBデバイスとして認識 -> udevによりusbserialデバイス /dev/ttyUSB[0-2] として認識

までは成功しました。
あとはpppconfigとかwvdialとかでttyUSB0を叩けばOK。

もっとキレイな書き方がありそうですが、素人のその場しのぎでごめんなさい。

※ これってDocomo L-05Aでも応用が効くのかな。自分は持ってないので分かりませんが、良ければどなたか試してみてください。
※ 現行のusbserialドライバもL-02Aに向けてチューンされている訳ではないため、メチャ遅いです。最高で 512kbpsくらい?
※ 時間があったら、cdc_acmドライバの問題も詳しく調べたいなと思ってます。

※ 2009-10-30, ubuntu 9.10でも正常に動くように修正しました(変数名を大文字→小文字に)。詳しくは別エントリに書く予定。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie

読み込み中...