GNU/Linux >> Linux の 問題 >  >> Linux

MODULE_DEVICE_TABLE(usb, id_table) の使い方を理解するのに苦労しました

通常、まだロードされていないデバイスのドライバーをロード/挿入することにより、ホットプラグをサポートするために使用されます。

ここにも同様の質問があります:デバイスが 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 モニター

    コマンド。


    Linux
    1. デバイスの永続性とOracle ASMLibについて

    2. Mac ファイルのタイムスタンプについて

    3. 開発用のデバイスをセットアップします (???????????? パーミッションなし)

    1. 特定の時間に Linux デバイスをウェイクアップすることは可能ですか?

    2. USB デバイスの消費電力を取得する

    3. 複数ノードの USB デバイスに一致する Udev ルール

    1. Linux –論理的に切断されたUSBデバイスを再接続する方法は?

    2. Webcam の Linux デバイス ドライバーを理解する

    3. USB バージョン 1.1 または 2.0 を確認する方法