使用しているカーネルがサポートしているすべてのハードウェアを見たいです。たとえば、3.8.xx バージョンの Linux カーネルがある場合、どのハードウェアがサポートされているかをどうやって知ることができますか?lspci
、、、、lshw
などlscpu
のツールは、dmidecode
現在使用されているハードウェアのみを確認し、ロードされたモジュールを利用して探そうとするのも不便であるlsmod
。
私が望むのは、そのハードウェアを使用しているかどうかに関係なく、私が使用しているカーネルが実際にサポートしているすべてのハードウェアを確認することです。
現在私は次のことを考えています。
- 各ファイルを読み取り、
/lib/modules/3.8.0-5-generic/kernel/drivers
解析します。 - これについて詳しくは、カーネルとgrepのgitソースコードをダウンロードしてください。
- 他の奇妙で長いアプローチ。
これを達成する他の小さな方法はありますか?
答え1
利用可能なすべてのモジュールを呼び出すことができますmodinfo
。これにより、モジュールのエイリアスが印刷されます。このモジュールのエイリアスの1つe1000e
は次のとおりです(エイリアスがたくさんあります)。
pci:v00008086d00001559sv*sd*bc*sc*i*
これは、ベンダーIDを持つPCIデバイスにロードする必要があることを意味します。8086とデバイスID1559。 USBデバイスのパターンは似ているようです。
答え2
私が望むのは、そのハードウェアを使用しているかどうかに関係なく、私が使用しているカーネルが実際にサポートしているすべてのハードウェアを確認することです。
.config
カーネルを構築するために使用されたファイルがある場合は、ソースコードをダウンロードして実行すると、make menuconfig
A)どのハードウェアに対してカーネルを設定できるかについてのアイデアが得られます(ただし、参照ノート)およびB)カーネルが実際に構成されているハードウェア。
これを行うには、次の手順を実行します。
- ソースコードをダウンロードしてください。ディストリビューションにパッケージがある場合もあれば、以下から入手することもできます。kernel.org;バージョンを探します
uname -r
。 .config
あなたの中核に合ったものを見つけてください。ディストリビューションでソースコードを取得した場合は、/boot にも表示できます。より良いことは、今度はデプロイカーネルが/proc/config.gz
この機能で構築されることが多いことです。存在する場合は、コピーして解凍し、ファイル名を変更して.config
カーネルソースツリーの最上位レベルにコピーします。make menuconfig
ソースツリーの最上位レベルで実行します。 ncursesが必要です開発するパッケージはすでにインストールされている(ncurses-dev
またはncurses-devel
)ので、root権限が必要です。
menuconfigを使用するときにファイルの内容を変更する以外に.config
悪いことができないことは重要ではありません(今後この内容と混同しないでください)。
ノート:実際には見えません。みんなハードウェア構成も可能です。これは、他の場所で選択した項目によっては、別のオプションがある場所に表示される可能性があるためです。カーネル構成は少し迷路です。しかし、実際に選択されたすべての項目を確実に見ることができます(M
つまり、モジュールであり、組み込み*
であることを意味します)。
答え3
私はあなたが探していることが可能だとは思わない。たとえば、モジュラーカーネルを想定すると、多くのモジュールが実際にサポートしているハードウェアが見つからない場合は、自分で初期化できません。だから彼らは静かに流産するでしょう。
ハードウェア名/バージョン/モデルを見つけるためにカーネルソースコードを自動的に解析するのは難しい作業です。共通サブシステム(例:シリアル、scsi、usb)がありますが、コードが必ずしも統合されるわけではありません。あなたはすぐにこれを理解するでしょう。