使用中のカーネルでサポートされているすべてのハードウェアを確認したい。たとえば、Linuxカーネルの3.8.x.xバージョンを使用している場合、そこでサポートされているハードウェアをどのように知ることができますか。 lspci
、lshw
、lscpu
、dmidecode
などのツールは、現在使用されているハードウェアのみをチェックし、lsmod
でロードされたモジュールを使用してこれを見つけようとするのも便利ではありません。
私が欲しいのは、使用中のカーネルで実際にサポートされているすべてのハードウェアを、そのハードウェアを使用しているかどうかを考慮せずにチェックするものです。
今のところ私は次のようなことを考えました:
/lib/modules/3.8.0-5-generic/kernel/drivers
を読み取り、すべてのファイルを解析します。これを達成する他の小さな方法はありますか?.
私が欲しいのは、使用中のカーネルで実際にサポートされているすべてのハードウェアを、そのハードウェアを使用しているかどうかを考慮せずにチェックするものです。
カーネルが構築された.config
ファイルがある場合は、ソースをダウンロードしてmake menuconfig
を実行できます。これにより、A)カーネルを構成できるハードウェアがわかります(ただし、 [〜#〜] note [〜#〜])、およびB)カーネルが実際に構成されているハードウェアを参照してください。
だからこれを行うには:
uname -r
でバージョンを見つけてください。.config
を見つけます。ディストリビューションからソースを入手した場合は、含まれていることを願っています。/bootのどこかにあるかもしれません。さらに良いことに、多くの場合、ディストリビューションカーネルは/proc/config.gz
機能を使用して構築されています。存在する場合は、それをコピーして解凍し、ファイルの名前を.config
に変更して、カーネルソースツリーの最上位にコピーします。make menuconfig
を実行します。 ncursesdevelopmentパッケージ(ncurses-dev
またはncurses-devel
)がインストールされている必要があり、rootである必要があります。Menuconfigを使用している間は、.config
ファイルの内容を変更する以外に悪いことはできません。これは問題ではありません(後で混乱させないでください)。
[〜#〜] note [〜#〜]:オプションが異なるため、実際にすべての可能なハードウェア構成を同時に表示することはできません。他の場所で選択されたものに基づいて、1つの場所に表示される場合があります。カーネル構成は少し迷路です。ただし、実際に選択されているものはすべて確実に表示されます(M
はモジュールであることを意味し、*
は組み込みであることを意味します)。
使用可能なすべてのモジュールに対してmodinfo
を呼び出すことができます。これにより、モジュールのエイリアスが出力されます。モジュールの1つのエイリアスe1000e
これは(他にもたくさんありますが):
pci:v00008086d00001559sv*sd*bc*sc*i*
これは、ベンダーID 8086およびデバイスID 1559のPCIデバイス用にロードする必要があることを意味します。 USBデバイスのパターンは似ています。
私はあなたが探していることが可能だとは思いません。たとえば、モジュラーカーネルを想定すると、多くのモジュールは、サポートするハードウェアが実際に見つからない場合、初期化に失敗します。だから彼らは静かに中絶するでしょう。
カーネルソースを自動的に解析して、ハードウェア名/バージョン/モデル番号を探すのは大変な作業です。一般的なサブシステム(シリアル、scsi、usbなど)がありますが、コードは必ずしも均一ではありません。それはすぐに明らかになります。