私が理解したところ、カーネルは特定のデバイスツリーを介してシステム内のさまざまなハードウェアと通信する方法を理解しています。
Ubuntuの1つのバージョンをダウンロードして、ハードウェアが異なる可能性があるシステムにインストールできるのはなぜですか?
BeagleBone組み込みボードも同様です。さまざまな周辺機器を使用してさまざまな種類のBeagleBoneボードにフラッシュできる基本的なDebianイメージがあります。同じ画像がすべての人に機能するときにどのデバイスツリー/デバイスツリーオーバーレイを使用するかをどうやって知ることができますか?
答え1
デバイスドライバ(つまり、ハードウェアと直接対話するカーネル部分)は、カーネルモジュールにコンパイルできます。これは、システムのハードウェアに応じて、必要に応じてカーネルによってロードまたはアンロードできる別々のファイルです。
主流のLinuxディストリビューションに付属の一般的なカーネルには、考えられるすべてのハードウェア用のモジュールとしてコンパイルされたすべてのドライバが付属する傾向があります。したがって、カーネルが特定のシステムで起動すると、システムにどのハードウェアがあるかを調べて検出し、ユーザースペースプログラムに特定のハードウェアudev
に必要なカーネルモジュールをロードするように指示します。
答え2
これLinuxカーネル図デバイス制御に関するいくつかの詳細を表示します。ここでは「ドライバー」と「基準寸法「」は「ロード可能なカーネルモジュール」を通じて拡張できます。
例:USBデバイスには通常、デバイスが接続されたときにロードされるモジュールがありますが、USBルートハブはカーネルに静的に接続され、nVidiaカードにはnVidiaからドライバをダウンロードする必要があります。
これはほとんどのディストリビューションがさまざまなハードウェアで実行されますが、必ずしもすべてのハードウェアで実行されるわけではありません。真新しいハードウェアには別々のモジュールまたはドライバが必要な場合があります。
ドライバとモジュールの違いに関する追加情報ねえ
カーネルがロードするモジュールを知る方法はハードウェア層に深く入り、列挙型を介してこれを行います。
- PCIバス
- SCSIバス
- USBハブ
- DSP...