Linuxドライバはカーネルまたはrootfsの一部ですか?

Linuxドライバはカーネルまたはrootfsの一部ですか?

私はARMプロセッサを内蔵したマザーボードを開発してきました。起動するには、ブートローダ、Linuxカーネル、およびルートファイルシステムを含むディスクイメージを追加する必要がありました。このディスクイメージは、ターゲットボード(ZedBoard)についてインターネット上で見つけることができます。

カーネルをコンパイルし、必要なすべてのドライバを有効にした後、/lib/modules/kernel_numberで多くのドライバを使用できることがわかりました。

全体の仕事がどのように機能するか少し混乱しています。ドライバはカーネルによってロードされますか?それでは、なぜすでにrootfsの一部ですか?それともカーネルはその中にコンパイルされた内容で上書きされますか?

ベストアンサー1

「ドライバ」と「モジュール」を区別する必要がありますが、非常に簡単です。 ドライバはモジュールであってもなくてもよい。 それ以外の場合は、ブートローダがロードしたカーネルにビルドされます。

モジュールの場合は、ルートのファイルシステム階層にあります/lib/modules/[kernel-release]1 カーネルは、これらのリポジトリを含むことができる小さな予備のルートファイルシステム(「initramfs」)で起動できます。これは通常のカーネルにとって一般的な現象であるため、物理ファイルシステムにアクセスするためにロードする必要があるモジュラードライバを決定できます。そうしないと、そこにあるどのモジュールにもアクセスできないからです。

ドライバはカーネルによってロードされますか?

はい。

それでは、なぜすでにrootfsの一部ですか?

ロードする前にどこに保管する必要がありますか?カーネル自体にはrootfsが含まれておらず(WRTの一部の形式のinitramfsを除く)、これはゲートキーパーにすぎません。

カーネルはその中にコンパイルされた内容で上書きされますか?

習慣。ドライバをコンパイルすると、カーネルは/lib/modulesそれを確認しません。そのようなドライバをロードするように明示的に要求すると、何が起こるのかわかりません。おそらくちょうどいいえと答えるでしょう。


1. Celadaが示唆したように、$(uname -r)このバージョン文字列は必ずしもバージョン番号である必要はありません。バージョンは同じで、バージョン文字列は異なる複数のコアを持つことができるため、別々のモジュールリポジトリを使用できます。同様に、同じリリース文字列を使用して、同じモジュールリポジトリを持つ複数のコアを持つことができます。

おすすめ記事