GNU/Linux >> Linux の 問題 >  >> Linux

特定のデバイスのカーネルモジュールを見つける方法は?

問題のトラブルシューティングを試みています。新しくインストールしたLinuxではUSBマウスが機能しません。

問題は、USBハードウェアに適したカーネルモジュール/ドライバーがないことだと思います。確かに:

$ lspci -knn
...
01:00.0 USB controller [0c03]: Advanced Micro Devices, Inc. [AMD] Device [1022:43b9] (rev 02)
        Subsystem: ASMedia Technology Inc. Device [1b21:1142]
01:00.1 SATA controller [0106]: Advanced Micro Devices, Inc. [AMD] Device [1022:43b5] (rev 02)
        Subsystem: ASMedia Technology Inc. Device [1b21:1062]
        Kernel driver in use: ahci
...

ご覧のとおり、USBコントローラーデバイスについてはカーネルドライバーが報告されていません(SATAコントローラーについて報告されているドライバーと同様の方法で報告する必要があると思います)

そのため、デバイスに適したモジュールを使用してカーネルを再構築する必要があります。しかし、どのモジュールを構築する必要があるかをどのように見つけることができますか?デバイスを識別する情報があります。ベンダーIDとハードウェアID([1b21:43b9])です。この情報を与えられた対応するカーネルモジュール名を見つける方法は?

承認された回答:

PCI ID 1022:43b9は、AMDX370シリーズチップセットUSB3.1xHCIコントローラーです。 PCIサブシステムID1b21:1142は、実際にはASMedia ASM1042A USB 3コントローラーであり、AMDチップセットに統合されている可能性があることを示唆しています。

ほとんどのUSB3.xコントローラーチップの場合、適切なドライバーモジュールはxhci_pciです。 これはモジュールxhci_hcdに依存します 。これらのモジュールは両方とも標準のLinuxカーネルの一部であるため、最新のすべてのLinuxディストリビューションで使用できるはずです。対応するカーネル構成オプションは、CONFIG_USB_XHCI_PCIです。 およびCONFIG_USB_XHCI_HCD

多くのディストリビューションには、カーネル構成ファイルが/boot/config-<kernel version number>として含まれています。 。したがって、次のコマンドを実行できます:

$ grep XHCI /boot/config-$(uname -r)
CONFIG_USB_XHCI_HCD=m
CONFIG_USB_XHCI_PCI=m
# CONFIG_USB_XHCI_PLATFORM is not set

ここでは、両方のxhci_hcd およびxhci_pci モジュールとして使用できるように構成されています。行に...=yと表示されている場合 代わりに、USB3サポートがメインカーネルにコンパイルされます。

PCI ID 1022:43b5、サブシステムID 1b21:1062はAHCI SATA(またはeSATA)コントローラーであり、モジュールahciで既にカバーされています。 。

PCIIDリポジトリでPCIIDを検索できます。

ベンダー/製品IDでドライバーが指定されている場合は、/sbin/modprobe -c | grep '<vendor ID>.*<product ID>' 。このような行が返ってきたら、一致するものが見つかりました:

alias pci:v0000<vendor ID>:d0000<product ID>sv... <module name>

この情報は、/lib/modules/modules.alias[.bin]から取得されます。 、depmodによって生成されます カーネルモジュール自体に埋め込まれたデバイスサポート情報からのコマンド(MODULE_DEVICE_TABLEを使用してソースコードで定義) 大きい)。 modinfo <module name> | grep alias 特定のモジュールによって要求されたハードウェアサポートを表示します。

ただし、すべてのモジュールがベンダー/製品IDで指定されているわけではありません。一部のドライバーはクラス全体をカバーします デバイスの;たとえば、xhci_pci モジュールは、PCIベースクラス0x0C、サブクラス0x03、インターフェイス0x30…のサポートを主張します。これらはそれぞれ「シリアルバスコントローラー」、「USBコントローラー」、「XHCI」にマッピングされます。これは次のように表されます

alias:          pci:v*d*sv*sd*bc0Csc03i30*

一部のモジュールをブラックリストに登録したか、何らかの理由で自動検出が失敗しない限り、通常、これらのルックアップを手動で行う必要はないことに注意してください。たとえば、Linuxカーネルが元のポスターのUSB 3コントローラーを検出すると、次のコマンド(と同等)が実行されます。

modprobe pci:v00001022d000043b9sv1b21sd1142bc0Csc03i30

これには、デバイスで使用可能なすべてのハードウェアベンダー/デバイス/クラス/サブクラス/インターフェイスIDが含まれます。 modprobeに記録されているワイルドカードエイリアスの1つ 構成がこの文字列と一致すると、それぞれのモジュールが自動的にロードされます。

関連:readlineの単語区切り文字とは何ですか?

USBデバイス(および実際に自動プローブ可能なバス)の場合、モジュールエイリアスの同様のシステムとUSBIDリポジトリがあります。

システムに適切なモジュールがコンパイルされていない場合は、PCI IDリポジトリを使用して、デバイスまたはその中で使用されているチップを識別するのが最善の策です。リポジトリエントリは、それをサポートするLinuxカーネルモジュールを識別する場合があります。その情報が存在しない場合は、デバイス/チップモデルを使用してグーグルで検索する必要があります。これにより、通常、標準カーネルに(まだ?)含まれていない代替/実験的なドライバーモジュールを見つけることができます。


Linux
  1. WHMCS用のCWPモジュールのセットアップ方法

  2. Oracleasm 用の SELinux モジュールをロードする方法

  3. ioctl() を使用してカーネル モジュールを操作するにはどうすればよいですか?

  1. Linux カーネルモジュールのコーディング方法は?

  2. Linuxモジュールのパスを見つける方法

  3. 現在のブートで指定された Linux カーネルのコマンド ライン パラメータを表示するにはどうすればよいですか?

  1. Linux:デバイスに使用されているデバイスドライバーを見つける方法は?

  2. Linux – Linux上のデバイスに関連付けられているドライバー(モジュール)を見つける方法は?

  3. Linux 上のデバイスに関連付けられているドライバー (モジュール) を見つける方法は?