私の理解では、カーネルは特定のデバイスツリーを介してシステム内のさまざまなハードウェアと通信する方法を理解しています。
Ubuntuの1つのバージョンをダウンロードでき、ハードウェアが異なる可能性のある任意のシステムにこれをインストールできるのはどうしてですか?
BeagleBone組み込みボードについても同じことが言えます。さまざまな周辺機器を備えたさまざまなタイプのBeagleBoneボードのいずれかにフラッシュできるデフォルトのDebianイメージがあります。同じ画像がすべてに機能する場合、どのデバイスツリー/デバイスツリーオーバーレイを使用するかをどのように知るのですか?
Linuxカーネルマップ は、デバイスコントロールを詳細に示しています。これには、「ドライバ」および「 モジュール 」と呼ばれるものが含まれており、「ロード可能なカーネルモジュール」によって拡張できます。
例:USBデバイスには通常、デバイスが接続されたときにロードされるモジュールがありますが、USBルートハブはカーネルに静的にリンクされており、nVidiaカードにはnVidiaからダウンロードしたドライバーが必要です。
そのため、ほとんどのディストリビューションは多種多様なハードウェアで実行されますが、必ずしもすべて非常に新しいハードウェアであるとは限らず、個別のモジュールまたはドライバーが必要になる場合があります。
ドライバーとモジュールの違いの詳細については こちらをご覧ください
カーネルがロードするモジュールを知る方法は、ハードウェアレイヤーを深く掘り下げ、次のように列挙することでそれを行います。
デバイスドライバー(つまり、ハードウェアと直接対話するカーネルの部分)は、カーネルモジュールとしてコンパイルできます。これらは個別のファイルであり、システムに存在するハードウェアに応じて、必要に応じてカーネルによってロードまたはアンロードできます。
主流のLinuxディストリビューションに付属している汎用カーネルには、モジュールとしてコンパイルされた考えられるすべてのハードウェアのすべてのドライバーが付属している傾向があります。したがって、カーネルが特定のシステムで起動すると、システム上にあるハードウェアをプローブして検出し、ユーザースペースプログラムudev
に、特定のハードウェアに必要なカーネルモジュールをロードするように指示します。