Linuxシステムが起動して正常に動作しているシナリオを考えてみましょう。ユーザーがやって来て hotplugs USBメモリデバイス。
発生するイベントのシーケンスを以下の図に示します。
Modprobeはどこにドライバーをロードしますか? modprobeがロードした後、またはロードする前に、要求されたデバイスのドライバーは/sys/bus/drivers
にありますか?
ここで確立しようとしているのは、/sys/
のエントリと上のグラフで発生するイベントとの関係です。
Ueventメッセージには、デバイスに関する情報が含まれます( 例 )。この情報には、PCIやUSBなどのバスに接続されたデバイスの登録済みベンダーとモデルIDが含まれています。 Udevはこれらのイベントを解析し、modprobe
に渡す固定形式のモジュール名を作成します。 modprobe
は、カーネルのインストール時に生成され、固定形式のモジュール名を実際のドライバーモジュールファイル名にマップする/lib/modules/VERSION
というファイルをdepmod.alias
の下で探します。プロセスの詳細については ドライバモジュールが自動的にロードおよびアンロードされますか? を参照してください。この回答は、カーネルがmodprobe
を直接呼び出した初期の時代を説明していますが、modprobe
モジュールのエイリアスの動作は変更されていません。
さらに参照 Michael Opdenackerのプレゼンテーション「Hotplugging with udev」 これには、より多くの例があり、udevを使用したデバイス管理の他の側面が説明されています Linuxのスクラッチガイド 固定形式のモジュール名が定義されています。
modprobe
は init_module
システムコールを呼び出してモジュールをロードします。 sysfsとは一切対話しません。モジュールがロードされると、カーネルは/sys/module
にモジュールのエントリを作成します。 sysfsの他の場所にあるエントリは、モジュール内のコード次第です(たとえば、USBデバイスのタイプ用のドライバーを備えたモジュールは、/sys/bus/usb/drivers
の下にエントリを追加する汎用USBサポートコードを呼び出します)。