どのデバイスドライバーがカーネルに組み込まれていますか?


14

最近、ベンダーが提供する組み込みLinuxをハードウェアデバイスにインストールしました。lsmodデバイスのコマンドラインで実行したとき、応答は空でした。これは、デバイスで実行されているハードウェアのドライバーが.koファイルとしてではなく、カーネルに組み込まれていることを意味すると信じるようになりました。私の質問はこれです:このプロセスはどのように起こりますか?

人気のあるハードウェアのサポートは、その後のバージョンでカーネルに徐々に統合され、.koファイルが置き換えられますか?.koファイルは、リリース時点でカーネル統合ドライバーをサポートしていない新しいハードウェアをサポートするためだけに使用されていますか?私の限られた知識では、すべてのハードウェアドライバーは.koファイルの形式であると考えましたが、明らかにこれは間違っています。

私は全体のプロセスに少し混乱していますが、状況を間違って見ているかもしれないと感じているので、明確化に感謝します。


回答:


10

カーネルのロードに不可欠であると考えられるコアドライバーは通常カーネルに組み込まれますが、他のハードウェアドライバーなどはモジュールまたは.koファイルとして組み込まれます。

.koモジュールは、通常の下に格納されている/libルートパーティション上のディレクトリ。これらのいずれかを使用するには、カーネルが最初に基礎となるストレージデバイスを検出してアクセスし、次にそのファイルシステムにアクセスできる必要があります。そのため、SATA / SCSIとext2 / 3/4をサポートしていないカーネルが組み込まれていると実際に起動しないと想定しても安全です;)

ほとんどの組み込みカーネルドライバーをモジュール形式に切り替えることを選択できます。Ubuntuカーネルチームは、Linuxカーネルチームのデフォルト構成を変更し、ダウンロードしたストックカーネルイメージの追加の組み込みドライバーを含める/除外するかどうかを決定します。

独自のカーネルを構築する場合、同じことができます。

ここに画像の説明を入力してください

  • 上記のスクリーンショットでは、*は組み込みドライバーをM示し、モジュールを示しています。
  • ループバックデバイスのサポートは、多くの場合システムの起動に不可欠ですが、デフォルトで組み込まれています。
  • 低速USBドライバー(USB 1.0)もデフォルトで組み込まれているため、USBスティックから起動できますが、ここではモジュールに変更しました。

それは大いに役立ちます。最終的に自分でカーネルビルドをゼロから行うときに、このことをよりよく理解できると思います。
数学者

3

カーネルをコンパイルするときに、インストールするコンポーネントを構成できます。それだけでなく、カーネルに組み込まれているのか、それともモジュールにます

たとえば、多くの人が自分のext2ファイルシステムを使用しています / bootパーティションでます。このため、カーネルはブート時にext2ファイルシステムを読み取れる必要があります。これを実現するために、ext2モジュールはカーネル自体に組み込まれています。

次に、使用可能なモジュールの量を想像してください。それらをすべてカーネルに組み込むのは意味がありませんか?これが、これらを個別の.koモジュールとしてビルドし、自由にロードできる理由です。


1
はい、あなたの最後の段落は私の質問が正直であるように動機づけたものです。答えてくれてありがとう
数学者

1

これらは、Linuxカーネルのビルドをどのように構成したかによって異なります。

通常、コンパイルプロセスでは次のことができます。

  • モジュールのサポートの有無にかかわらずカーネルをコンパイルします(多くの場合、モジュールのサポートが付属しています)
  • ドライバーをモジュールとして、または組み込みソフトウェアとしてカーネルに直接コンパイルします

.koファイルが/programming/10476990/difference-between-o-and-ko-file用であるかを理解する

空の出力がlsmodある理由は、モノリシックカーネルがあるためです。

すべてのモジュール(存在する場合)を一覧表示する簡単な方法は、このコマンドを実行することです

find /lib/modules/*/ -type f -iname '*.ko' | less

の使用に注意し、必要なlessすべてのページャーを使用するか、出力を目的の場所にリダイレクトできます。


だから(私のように)モジュールサポートなしで構成されたカーネルでは、追加のハードウェアを使用するために.koファイルの形でドライバをインストールすることはできませんか?
数学者

はい、基本的にソースから再コンパイルする必要があります。再編集する必要があるドライバーを編集および/または追加する場合は、同じ.configファイルを使用して必要に応じて変更するだけです。
user827992

したがって、これを行うには、ベンダーからカーネルソースを取得し、.configファイルに正しい修正を加えて自分でコンパイルする必要があります。その後、他のドライバーをインストールしてもいいですか?
数学者

彼がバニラカーネルを使用した場合(元のソースコード以外は何もありません)、あなたは.configだけで大丈夫であり、PCでちょうど同じカーネルを再現できますが、バニラカーネル+いくつかのパッチまたは修正を使用した場合この追加情報が必要な場合、カスタムMakefileは、標準ツールチェーンおよび一般的な標準ビルドプロセスに対する他の変更と同様に、関連する変数と見なすこともできます。
-user827992

私の経験では、速度とサイズの理由から、組み込みLinuxのモジュールは無効になっており、そのようなデバイスのカーネルにはツリー外ドライバーが含まれていることが多く、ソース管理の恩恵を受けずに従業員のランダムなPCでビルドされています。頑張ってください。
スティーブンM.ウェッブ

0

ファイルの内容を見る / 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.

??? OPが何をすべきかわからない。彼は端末の最初の行を実行することになっていますか?これが答えかもしれませんが、少し詳しく説明していただけますか?
匿名2

0
ls /sys/module

すべての組み込みおよび外部モジュールが含まれているようです。

ただし、実際にはモジュールではないエントリも含まれているようです。 https //unix.stackexchange.com/questions/225706/are-modules-listed-under-sys-module-all-the-loaded-modules

TODO:ソースを読み、そこに何が置かれるかをより正確に理解します。

この方法の利点は、/bootまたはでカーネル設定を見つけることができることに依存しないことです/proc/config.gz

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.