Linux でのハードウェア検出はどのように機能しますか?

Linux でのハードウェア検出はどのように機能しますか?

Linux で「Wi-Fi が機能しない」、「ビデオが機能しない」などの問題をトラブルシューティングしなければならないときはいつも、正しい方法がよくわかりません。私のアプローチは乱雑です。試してlspci、調べてdmesg、ログを調べて、Google で検索すれば、うまくいけば解決策が見つかります。私が本当に望んでいるのは、何が起こっているのかを理解し、全体の経路をたどって、正確に何かがうまくいかないときを見つけることです。

Wi-Fiが壊れているとします。

lspciコンピューターにどのようなネットワーク カードがあるのか​​調べるために を実行します。通常、lspciの出力に Wi-Fi に関連する何かが表示されます。この「何か」には、カードの名前とモデルが含まれます。しかし、これはどのように動作するのでしょうか。このコマンドは、以前に他の何か (udev など) によって正常に検出されたデバイスのみを一覧表示するのでしょうか。デバイスの名前/説明はどこで取得するのでしょうか。ハードウェア内のどこかに保存されるのでしょうか。lspci前の手順で何か問題が発生した場合、 がハードウェアを報告しない可能性はありますか。

ここで、自分のハードウェアに適切なカーネル モジュールが存在するかどうかを把握する必要があります。カーネル ソースにアクセスし、実行してmake menuconfig、自分のハードウェアの名前を検索します。これは、カーネルが地球上のすべてのネットワーク カード モデルを認識している必要があることを意味しますか? このようなモデルが多すぎるため、これは奇妙に思えます。すべてのネットワーク カードは同様のインターフェイスを持っているはずですが、カードの種類ごとに異なるモジュールが必要になるほどの違いは何でしょうか?

私のカードに適したカーネル モデルを見つけるためのより良い方法はありますか? 見つけたモジュールをコンパイルしてインストールした後でもカードが動作しない場合はどうすればよいでしょうか? モジュールが正しいことを確認するにはどうすればよいですか (つまり、問題は後の段階で発生するということです)?

ifconfigここで、またはを実行しますiwconfig。これらのコマンドは、ネットワークインターフェース結果にWiFiインターフェースが表示された場合、カーネルがハードウェアを正常に検出し、インターフェース他のプログラムが使用できるようになりますか? 現在の問題はより高レベルであることを意味しますか (間違ったパスワードなど)?

ディレクトリの内容は、/dev/何が問題なのかを理解する(または、何かが確実に正しく進んでいることを確認する)のに役立ちますか?

この質問が乱雑に見えたら申し訳ありません。私の頭の中の混乱を反映しています。この混乱を取り除くのを手伝ってください。

関連情報