web-dev-qa-db-ja.com

カーネルでサポートされているすべてのハードウェアを一覧表示する方法

使用中のカーネルでサポートされているすべてのハードウェアを確認したい。たとえば、Linuxカーネルの3.8.x.xバージョンを使用している場合、そこでサポートされているハードウェアをどのように知ることができますか。 lspcilshwlscpudmidecodeなどのツールは、現在使用されているハードウェアのみをチェックし、lsmodでロードされたモジュールを使用してこれを見つけようとするのも便利ではありません。

私が欲しいのは、使用中のカーネルで実際にサポートされているすべてのハードウェアを、そのハードウェアを使用しているかどうかを考慮せずにチェックするものです。

今のところ私は次のようなことを考えました:

  • /lib/modules/3.8.0-5-generic/kernel/driversを読み取り、すべてのファイルを解析します。
  • カーネルのgitソースをダウンロードし、これに関する情報をgrepします。
  • それを行う他のクレイジーで非常に長い方法。

これを達成する他の小さな方法はありますか?.

4
Luis Alvarado

私が欲しいのは、使用中のカーネルで実際にサポートされているすべてのハードウェアを、そのハードウェアを使用しているかどうかを考慮せずにチェックするものです。

カーネルが構築された.configファイルがある場合は、ソースをダウンロードしてmake menuconfigを実行できます。これにより、A)カーネルを構成できるハードウェアがわかります(ただし、 [〜#〜] note [〜#〜])、およびB)カーネルが実際に構成されているハードウェアを参照してください。

make menuconfig

だからこれを行うには:

  1. ソースをダウンロードします。ディストリビューションにパッケージがある場合もあれば、 kernel.org ;から入手することもできます。 uname -rでバージョンを見つけてください。
  2. カーネルに使用されている.configを見つけます。ディストリビューションからソースを入手した場合は、含まれていることを願っています。/bootのどこかにあるかもしれません。さらに良いことに、多くの場合、ディストリビューションカーネルは/proc/config.gz機能を使用して構築されています。存在する場合は、それをコピーして解凍し、ファイルの名前を.configに変更して、カーネルソースツリーの最上位にコピーします。
  3. ソースツリーのトップレベル内からmake menuconfigを実行します。 ncursesdevelopmentパッケージ(ncurses-devまたはncurses-devel)がインストールされている必要があり、rootである必要があります。

Menuconfigを使用している間は、.configファイルの内容を変更する以外に悪いことはできません。これは問題ではありません(後で混乱させないでください)。

[〜#〜] note [〜#〜]:オプションが異なるため、実際にすべての可能なハードウェア構成を同時に表示することはできません。他の場所で選択されたものに基づいて、1つの場所に表示される場合があります。カーネル構成は少し迷路です。ただし、実際に選択されているものはすべて確実に表示されます(Mはモジュールであることを意味し、*は組み込みであることを意味します)。

2
goldilocks

使用可能なすべてのモジュールに対してmodinfoを呼び出すことができます。これにより、モジュールのエイリアスが出力されます。モジュールの1つのエイリアスe1000eこれは(他にもたくさんありますが):

pci:v00008086d00001559sv*sd*bc*sc*i*

これは、ベンダーID 8086およびデバイスID 1559のPCIデバイス用にロードする必要があることを意味します。 USBデバイスのパターンは似ています。

3
t-8ch

私はあなたが探していることが可能だとは思いません。たとえば、モジュラーカーネルを想定すると、多くのモジュールは、サポートするハードウェアが実際に見つからない場合、初期化に失敗します。だから彼らは静かに中絶するでしょう。

カーネルソースを自動的に解析して、ハードウェア名/バージョン/モデル番号を探すのは大変な作業です。一般的なサブシステム(シリアル、scsi、usbなど)がありますが、コードは必ずしも均一ではありません。それはすぐに明らかになります。

2
user28151