web-dev-qa-db-ja.com

同じLinuxバージョンが異なるハードウェアでどのように機能するか

私の理解では、カーネルは特定のデバイスツリーを介してシステム内のさまざまなハードウェアと通信する方法を理解しています。

Ubuntuの1つのバージョンをダウンロードでき、ハードウェアが異なる可能性のある任意のシステムにこれをインストールできるのはどうしてですか?

BeagleBone組み込みボードについても同じことが言えます。さまざまな周辺機器を備えたさまざまなタイプのBeagleBoneボードのいずれかにフラッシュできるデフォルトのDebianイメージがあります。同じ画像がすべてに機能する場合、どのデバイスツリー/デバイスツリーオーバーレイを使用するかをどのように知るのですか?

1
Engineer999

Linuxカーネルマップ は、デバイスコントロールを詳細に示しています。これには、「ドライバ」および「 モジュール 」と呼ばれるものが含まれており、「ロード可能なカーネルモジュール」によって拡張できます。

例:USBデバイスには通常、デバイスが接続されたときにロードされるモジュールがありますが、USBルートハブはカーネルに静的にリンクされており、nVidiaカードにはnVidiaからダウンロードしたドライバーが必要です。

そのため、ほとんどのディストリビューションは多種多様なハードウェアで実行されますが、必ずしもすべて非常に新しいハードウェアであるとは限らず、個別のモジュールまたはドライバーが必要になる場合があります。

ドライバーとモジュールの違いの詳細については こちらをご覧ください

カーネルがロードするモジュールを知る方法は、ハードウェアレイヤーを深く掘り下げ、次のように列挙することでそれを行います。

  • pCIバス
  • sCSIバス
  • uSBハブ
  • dSP.。
2
Fabby

デバイスドライバー(つまり、ハードウェアと直接対話するカーネルの部分)は、カーネルモジュールとしてコンパイルできます。これらは個別のファイルであり、システムに存在するハードウェアに応じて、必要に応じてカーネルによってロードまたはアンロードできます。

主流のLinuxディストリビューションに付属している汎用カーネルには、モジュールとしてコンパイルされた考えられるすべてのハードウェアのすべてのドライバーが付属している傾向があります。したがって、カーネルが特定のシステムで起動すると、システム上にあるハードウェアをプローブして検出し、ユーザースペースプログラムudevに、特定のハードウェアに必要なカーネルモジュールをロードするように指示します。

2
Time4Tea