最近、ベンダーが提供する組み込みLinuxをハードウェアデバイスにインストールしました。デバイスのコマンドラインでlsmod
を実行すると、応答が空でした。これは、デバイスで実行されているハードウェアのドライバーが.koファイルとしてではなく、カーネルに組み込まれていることを意味すると信じるようになりました。私の質問はこれです:このプロセスはどのように起こるのですか?
人気のあるハードウェアのサポートは、その後のバージョンでカーネルに徐々に統合され、.koファイルが置き換えられますか? .koファイルは、リリース時点でカーネル統合ドライバーをサポートしていない新しいハードウェアをサポートするためだけに使用されていますか?私の限られた知識では、すべてのハードウェアドライバーは.koファイルの形式であると考えましたが、明らかにこれは間違っています。
私は全体のプロセスに少し混乱していますが、状況を間違った方向で見ているかもしれないと感じているので、明確化に感謝します。
カーネルのロードに不可欠と考えられるコアドライバーは通常カーネルに組み込まれますが、他のハードウェアドライバーなどはモジュールまたは。koファイルとして組み込まれます。
。koモジュールは通常、ルートパーティションの/lib
ディレクトリの下に保存されます。これらのいずれかを使用するには、カーネルが最初に基礎となるストレージデバイスを検出してアクセスし、次にそのファイルシステムにアクセスできる必要があります。そのため、SATA/SCSIおよびext2/3/4をサポートしないカーネルが組み込まれているカーネルは、実際には起動しないと想定しても安全です;)
ほとんどの組み込みカーネルドライバーをモジュール形式に切り替えることを選択できます。 Ubuntuカーネルチームは、Linuxカーネルチームのデフォルト構成を変更し、ダウンロードするストックカーネルイメージの追加の組み込みドライバーを含める/除外するかどうかを決定します。
独自のカーネルを構築する場合、同じことができます:
*
は組み込みドライバーを示し、M
はモジュールを示します。カーネル をコンパイルすると、どのコンポーネントがインストールされているかconfigureに到達します。それだけでなく、カーネルに組み込まれるかどうか、またはmoduleであるかどうかを選択できます。
たとえば、多くの人が/ bootパーティションでext2ファイルシステムを使用しています。このため、カーネルはブート時にext2ファイルシステムを読み取れる必要があります。これを実現するために、ext2モジュールはカーネル自体に組み込まれています。
次に、使用可能なモジュールの量を想像してください。それらをすべてカーネルに組み込むのは意味がありませんか?これが、これらを個別の。koモジュールとしてビルドし、自由にロードできる理由です。
これらは、Linuxカーネルのビルドをどのように構成したかによって異なります。
通常、コンパイルプロセスでは次のことができます。
.koファイルの目的を理解する https://stackoverflow.com/questions/10476990/difference-between-o-and-ko-file
lsmod
に空の出力がある理由は、モノリシックカーネルがあるためです。
すべてのモジュール(存在する場合)を一覧表示する簡単な方法は、このコマンドを実行することです
find /lib/modules/*/ -type f -iname '*.ko' | less
less
の使用に注意してください。必要なすべてのページャーを使用するか、出力を目的の場所にリダイレクトできます。
ls /sys/module
すべての組み込みモジュールと外部モジュールが含まれているようです。
しかし、実際にはモジュールではないエントリもいくつか含まれているようです: https://unix.stackexchange.com/questions/225706/are-modules-listed-under-sys-module-all-the-loaded-モジュール
TODO:ソースを読み、そこに何が置かれるかをより正確に理解します。
この方法の利点は、/boot
または/proc/config.gz
の下でカーネル構成を見つけることができることに依存しないことです。
ファイルの内容を参照してください/ lib/modules/$(uname -r)/modules.builtin
例えば特定のモジュールを検索するには
grep <module> /lib/modules/$(uname -r)/modules.builtin
Documentation/kbuild/kbuild.txt
modules.builtin
--------------------------------------------------
This file lists all modules that are built into the kernel. This is used
by modprobe to not fail when trying to load something builtin.