通常、まだロードされていないデバイスのドライバーをロード/挿入することにより、ホットプラグをサポートするために使用されます。
ここにも同様の質問があります:デバイスが Linux でホットプラグされているときにデバイスの存在を検出する
(私の答えから)
次のように機能します:
<オール>コード内の各ドライバーは、以下を使用してベンダー/デバイス ID を公開します:
MODULE_DEVICE_TABLE(of, omap_mcspi_of_match);
コンパイル時に、ビルド プロセスはすべてのドライバーからこの情報を抽出し、デバイス テーブルを準備します。
デバイスを挿入すると、デバイス テーブルがカーネルによって参照され、追加されたデバイスのデバイス/ベンダー ID と一致するエントリが見つかった場合、そのモジュールがロードされて初期化されます。
Linux デバイス ドライバーによると:
<オール>MODULE_DEVICE_TABLE
depmod
でマップファイルを生成するために使用されます プログラム;/sbin/hotplug
適切な環境変数が設定されている/sbin/hotplug
ロードするモジュールを決定し、実際にロードします。モジュールが既に読み込まれていれば問題ありません。このメカニズムは、デバイスが接続されたときに必要なモジュールが所定の位置にあることを保証するだけであることを再度言及する必要があります。これは、モジュールをそのデバイスまたはその他のものとリンクしません。モジュールをロードするだけです。
ドライバーが特定のデバイスで問題ないかどうかを確認するには、match()
bus_type
からの関数
[Xbuntu 14.04 互換] を理解する方法は次のとおりです。
モジュールを作成したら、それを手動または自動でロードできます。
- 手動 ->
insmod
modulename.ko またはmodprob
モジュール名.ko -
自動 -> 複数の方法があります。
<オール> -
/lib/modules/`uname -r`/kernel/modulename.ko にコピーします
/etc/modules
を更新します .システムは起動中にモジュールをロードします。 -
特定のハードウェア
add
の module.ko をロードするスクリプト/コマンドを記述します /change
/remove
udev
のイベント ルール/etc/udev/rules.d/10-local.rules
.この方法を使用して、ロード/アンロードの両方を実行できます。 - モジュールを
MODULE_DEVICE_TABLE
でコーディングします 登録。次に、modulename.ko を一度ロードして、depmod
を実行します。 コマンド [sudo depmod -a
] 新しいモジュールを/lib/modules/3.16.0-34-generic/modules.alias
に追加します/lib/modules/3.16.0-34-generic/modules.dep
ファイル。私が知っているように、システムはモジュールがロードされていない場合にのみロードされます。
次を使用して、udev イベントを使用してモジュールのロード/アンロードを監視できます。
<ブロック引用>udevadm モニター
コマンド。