ホットプラグイベント時に外部でコンパイルされたモジュールを自動的にロードする

ホットプラグイベント時に外部でコンパイルされたモジュールを自動的にロードする

私は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/。その結果、modprobemodprobeを使用してモジュールをロードしようとすると、モジュールが認識されます。


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"

ホットプラグモジュールのロードが機能しないため、システムの起動時にロードに固執する必要があるようです。

ベストアンサー1

おすすめ記事