私はv2.6.33.7カーネルを持っており、USBNETとCDC_ETHERモジュールを持っていないかなり古い組み込みLinuxドライバシステムを持っています。 USBNETモジュールによってロードされたCDCドライバで動作する特定のUSB-LANスティックを接続できるように、このモジュールをコンパイルしました。これでモジュールをこのフォルダにコピーします/lib/modules/2.6.33.7/kernel/drivers/net/usb
。
cdc_etherモジュールはを使用してロードできますが、insmod
エラーmodprobe
が発生します。
usbnetモジュールを挿入すると、次のようにdmesg
表示されます
usbnet: exports duplicate symbol usbnet_resume (owned by kernel)
。
また、usbnetモジュールを削除しようとすると、次のエラーが発生します。
FATAL: Module usbnet is builtin
cdc_ether モジュールをインストールすると、dmesg
成功が表示されます。
eth1: register 'cdc_ether' at usb-mxc-ehci.0-1, CDC Ethernet Device, fc:8f:c4:06:e8:9c usbcore: registered new interface driver cdc_ether
cdc_etherモジュールを手動で起動すると、eth1
システムで利用可能なイーサネットアダプタがあり、それを再利用できますifconfig
。
スティックを挿入したときにモジュールを自動的にロードする方法は?ドライバールールを見てみるとudev
カーネルモジュールをロードしているようで module.* ファイルも見てみると/lib/modules/2.6.33.7/
…運がありません。正常に動作するには何が欠けていますか?
/proc/config.gz
私はコンパイル時の設定ファイルでusbnetモジュールを見つけることが私のカーネルをコンパイルした会社に組み込む必要があることに気づきました。上記のCONFIG_USB_USBNET=y
ようにデフォルトでスティックを挿入するときは、cdc_etherモジュールudevルールを実行する必要があります。右?
modules.*
私はビルドされたファイルをインポートして古いカーネルフォルダに入れることができました/lib/modules/2.6.33.7/
。その結果、modprobe
modprobeを使用してモジュールをロードしようとすると、モジュールが認識されます。
usbnetモジュールが組み込まれているため、起動時にすぐに実行されます。次に、cdc_ether モジュールを起動します。モードプロビジョニングを完了した後、ホットスワップメカニズムが必要でした。コーディングの便宜のためにcdc_etherをに追加しました/etc/modules
。このモジュールは起動時にロードされます。ネットワーク設定ファイルを正しく編集しましたが、/etc/network/interfaces
新しいインターフェイスはeth1
すでに設定されているため、起動時にIPを取得しません。そのため、削除されるすべてのethデバイスのアドレスを更新するudevルールを追加しました。
#ACTION=="add",SUBSYSTEM=="usb",DRIVER=="cdc_ether",RUN+="/sbin/modprobe cdc_ether"
ACTION=="add",SUBSYSTEM=="net",RUN+="/sbin/ifup %k"
ACTION=="remove",SUBSYSTEM=="net",RUN+="/sbin/ifdown %k",RUN+="/sbin/ip addr flush %k"
ホットプラグモジュールのロードが機能しないため、システムの起動時にロードに固執する必要があるようです。