web-dev-qa-db-ja.com

modprobeはudevが要求するドライバーをどこにロードしますか?

Linuxシステムが起動して正常に動作しているシナリオを考えてみましょう。ユーザーがやって来て hotplugs USBメモリデバイス。

発生するイベントのシーケンスを以下の図に示します。

enter image description here

Modprobeはどこにドライバーをロードしますか? modprobeがロードした後、またはロードする前に、要求されたデバイスのドライバーは/sys/bus/driversにありますか?

ここで確立しようとしているのは、/sys/のエントリと上のグラフで発生するイベントとの関係です。

7

Ueventメッセージには、デバイスに関する情報が含まれます( )。この情報には、PCIやUSBなどのバスに接続されたデバイスの登録済みベンダーとモデルIDが含まれています。 Udevはこれらのイベントを解析し、modprobeに渡す固定形式のモジュール名を作成します。 modprobeは、カーネルのインストール時に生成され、固定形式のモジュール名を実際のドライバーモジュールファイル名にマップする/lib/modules/VERSIONというファイルをdepmod.aliasの下で探します。プロセスの詳細については ドライバモジュールが自動的にロードおよびアンロードされますか? を参照してください。この回答は、カーネルがmodprobeを直接呼び出した初期の時代を説明していますが、modprobeモジュールのエイリアスの動作は変更されていません。

さらに参照 Michael Opdenackerのプレゼンテーション「Hotplugging with udev」 これには、より多くの例があり、udevを使用したデバイス管理の他の側面が説明されています Linuxのスクラッチガイド 固定形式のモジュール名が定義されています。

modprobeinit_module システムコールを呼び出してモジュールをロードします。 sysfsとは一切対話しません。モジュールがロードされると、カーネルは/sys/moduleにモジュールのエントリを作成します。 sysfsの他の場所にあるエントリは、モジュール内のコード次第です(たとえば、USBデバイスのタイプ用のドライバーを備えたモジュールは、/sys/bus/usb/driversの下にエントリを追加する汎用USBサポートコードを呼び出します)。