2011-12-06 8 views
1

ホストポートでUSBセルラーGOBI 3000モデムをQMIモードで接続しようとしました。私はすでに他のデバイス(容量性タッチスクリーンなど)を接続して以来、USBホストサブシステムが動作します。必要なドライバは通常の「usbnet.ko」です。また、「GobiSerial.ko」と「GobiNet.ko」もあります。 私はブートした後、私のUSBハブ上のデバイスを、適切なメーカー、VID、PID、4つのインターフェースで見ることができます。 Iモデムを接続すると、私は、端末に次のメッセージがありますUSBデバイスを非シーケンシャルインターフェイス番号でバインドする方法

[352326.921871] usb 1-1.4: new full speed USB device using s5p-ohci and address 8 
[352327.038871] usb 1-1.4: config 1 has an invalid interface number: 8 but max is 3 
[352327.044804] usb 1-1.4: config 1 has no interface number 1 

このメッセージは、「usb_parse_interface」機能の「ドライバ/ USB /コア/ CONFIG.C」によって生成されます。私はUSBのデバイスを一覧表示する場合 、私は(何のドライバがバインドされなかった)それを見る:

C:* #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr= 0mA 
I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) 
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms 
E: Ad=01(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms 
I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) 
E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms 
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms 
I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) 
E: Ad=83(I) Atr=03(Int.) MxPS= 64 Ivl=5ms 
E: Ad=84(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms 
E: Ad=03(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms 
I:* If#= 8 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) 
E: Ad=85(I) Atr=03(Int.) MxPS= 64 Ivl=5ms 
E: Ad=86(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms 
E: Ad=04(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms 

我々がライン上に見ることができるように、「C:」、デバイス4つのインタフェースを有しています。次に、ライン "I:"には、4つのインターフェイスが "0,2,3および8"としてリストされます。 "include/linux/usb.h"では、 "USB規格では、インタフェースは0からdesc.bNumInterfaces-1まで番号が付けられていると言われていますが、多くのデバイスでこの問題が発生しています。実際、モデムの別のブランドに接続すると、それはそのルールに従うので接続します。その時に見て:あなたが見ることができるように

C:* #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA 
I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=GobiNet 
E: Ad=81(I) Atr=03(Int.) MxPS= 64 Ivl=5ms 
E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms 
E: Ad=01(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms 
I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) 
E: Ad=83(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms 
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms 
I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=GobiSerial 
E: Ad=84(I) Atr=03(Int.) MxPS= 64 Ivl=5ms 
E: Ad=85(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms 
E: Ad=03(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms 
I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=GobiSerial 
E: Ad=86(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms 
E: Ad=04(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms 

、4つのインターフェースは、モデムは、世界の他のシステム上で動作していることを、今、0〜3の番号が付けられています。ドライバーにシリアル番号の付いていないインターフェースを持つデバイスをバインドさせるにはどうしたらいいですか?

私は、その答えを探す場所のちょっとした手がかりに満足しています。私はO'Reillyの "Linux Device Drivers"でソースコードでも答えを見つけられず、私は1日以上を探していました。

セットアップは次のとおりです。
カーネル2.6.35.7でAndroid Gingerbreadを実行するカスタムARM Cortex A8プラットフォーム。そのためには、標準のLinux ARMと同じです。それだけでは完全なubuntuシステムのすべての鐘や笛がありません。

答えて

1

問題は解決され、質問で説明されたように見えても、それは関係ありません。カーネルコードにUSBインタフェースを順番に番号を付けなければならない場所がいくつかあるとしても、順番どおりに扱うことができます。私の本当の問題は、壊れたビルドシステムでした。少なくとも1つのファイルは更新されていませんでした。別のファイルにトレースを追加すると、モジュール上の更新が削除されました。それは問題を解決し、「魔法」のように動作させました。私は、私が非常に奇妙なことを経験するときに、 "きれいにする"ことを始めます。結局のところ、たくさんのRAMとkiller Harddiskを持つマシンでは、カーネルを再コンパイルするのに時間がかかりません。

関連する問題