私の知る限り、カーネルはハードウェアを検出し、sysfsに情報を追加して、/ devにデバイスを作成してから、udevイベントを生成します。私の質問は、デバイスドライバーがこれらすべてを実行するのか、それともカーネル自体なのかということです。ドライバーがそれを行うと、デバイスのメジャー番号とマイナー番号がわかって、devtmpsにファイルが作成されます。
また、デバイスを処理するドライバーをロードするためにmodprobeを呼び出すのはudevであることも(おそらく間違って)理解しています。
MODALIAS uevent環境変数の内容を使用してこれを行うため、エイリアスがこの文字列(正しいドライバー)と一致するすべてのモジュールがロードされると言われました。要するに、Linuxでのハードウェア検出のステップは何であり、WHOは各ステップを実行します:カーネル自体、カーネル内のドライバー、またはユーザー空間のudev。ありがとう。
カーネルはデバイス番号を決定するため、デバイス番号を認識しています。各ドライバーは、管理するデバイス番号を登録します。番号はソースコードにハードコードされているか、場合によっては動的に割り当てられます。 sysfs ファイルシステムを使用すると、udevなどのアプリケーションでカーネルがサポートするデバイスを検出できます。詳細については、 devは作成するデバイスのデバイス番号をどのように取得しますか? を参照してください。
ドライバーの初期化コードはハードウェアをプローブし、プローブ中に検出したハードウェアに基づいてデバイスを登録します。一部のタイプのハードウェアはプロービングをサポートしていません。たとえば、 ISAバス (PCタイプのコンピューターではほとんど古いバス)は、接続されているハードウェアを一覧表示する方法を提供しないため、ドライバーは通信を試みて、別の周辺機器がないことを祈るしかありません。同じアドレスに取り付けられています。一部のプラットフォームでは、ブートローダーに使用可能な周辺機器とそれらがマップされる場所を説明する デバイスツリー が含まれ、Linuxカーネルはこの情報に基づいてドライバーをアクティブ化します。周辺機器用にドライバをロードする方法は3つあります。
/etc/modules
またはinitramfsに含めることによって)。modprobe
を実行し、ペリフェラルの識別をエンコードするシンボリック名を渡します。これは、ドライバーモジュールの「実際の」名前のエイリアスです。参照 ドライバモジュールは自動的にロードおよびアンロードされますか?