web-dev-qa-db-ja.com

Linuxに周辺ハードウェアのドライバーはどのようにインストールされていますか?

新しいワイヤレスキーボードを購入し、WindowsとLinuxの両方のボックスでテストしました。

それは両方で機能しましたが、最初の違いがありました-Windowsがインターネット上でキーボード(Logitech)のドライバーを検索してインストールするのに1、2分かかりました。それは私にそうすることを視覚的に通知し、その進捗状況を表示しました。

しかし、Debianコンピュータに接続したとき、そのような進歩には気づきませんでした。また、ほとんどすぐに使用できたので、どうしてこんなに速く動いたのかわかりません。

Linuxは一般的なBluetoothドングルドライバーと一般的なキーボードドライバーの組み合わせを使用していますか?

5
jcora

Linuxハードウェアドライバーはカーネルモジュールです。オープンソースモデルとカーネルのライセンスのため、ハードウェアメーカーによって作成されたものはほとんどありません。それらのほとんどは、リバースエンジニアリングされているか、標準化されたパブリックプロトコルに基づいています。ブルートゥースが後の領域にあることはかなり確かであり、マウスやキーボードのようなものはほとんどの場合完全に一般的です。

モジュールは、カーネルソースツリーの一部です。つまり、Linuxカーネルソースをダウンロードすると、利用可能なすべてのモジュールのコードが付属しています。もちろん、ビルドするときにそれらすべてを含める必要はありません。

Linuxディストリビューションは(一般的に)ビルド済みのバイナリのコレクションであり、これにはカーネルが含まれます。カーネル自体は1つのバイナリです。モジュールはこれに組み込まれるか、カーネルがロードおよびアンロードできる個別のバイナリのいずれかです。使用可能なすべてのモジュールを1つのバイナリに組み込むと、大規模でばかげたカーネルになり、ディストリビューションはできるだけ多くのハードウェアをカバーしたいので、ディストリビューションカーネルパッケージにはさまざまな個別のバイナリモジュールが含まれています。

これらは/lib/modulesで確認できます。ドライバーモジュールはカーネルに登録され、同時にビルドされます。カーネルは、システムで何が利用できるかを認識しています。新しいハードウェアを接続すると、システムに対して自身が識別され、カーネルは/lib/modulesから適切なドライバーを選択してロードします。

lsmodですべての現在ロードされているモジュールを見ることができます。

8
goldilocks