GNU/Linux >> Znalost Linux >  >> Linux

Jak najít modul jádra pro dané zařízení?

Snažím se vyřešit problém:USB myš nefunguje na čerstvě nainstalovaném linuxu.

Mám podezření, že problém je v tom, že pro můj usb hardware neexistuje vhodný modul/ovladač jádra. Opravdu:

$ 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
...

Jak vidíte, pro zařízení USB řadiče není hlášen žádný ovladač jádra (předpokládám, že by měl být hlášen podobným způsobem jako ovladač hlášený pro řadič SATA)

Potřebuji tedy znovu sestavit jádro s modulem, který by byl vhodný pro mé zařízení. Jak ale zjistím, jaký modul mám postavit? Mám informace, které identifikují mé zařízení:je to ID dodavatele a ID hardwaru ([1b21:43b9]). Jak zjistit odpovídající název modulu jádra na základě těchto informací?

Přijatá odpověď:

PCI ID 1022:43b9 je řadič čipové sady AMD X370 USB 3.1 xHCI. PCI subsystém ID 1b21:1142 by naznačoval, že by ve skutečnosti mohl být řadič ASMedia ASM1042A USB 3, možná integrovaný do čipové sady AMD.

Pro většinu čipů řadiče USB 3.x je vhodný modul ovladače xhci_pci což závisí na modulu xhci_hcd . Oba tyto moduly jsou součástí standardního linuxového jádra, takže by měly být dostupné ve všech moderních linuxových distribucích. Odpovídající možnosti konfigurace jádra jsou CONFIG_USB_XHCI_PCI a CONFIG_USB_XHCI_HCD .

Mnoho distribucí obsahuje konfigurační soubor jádra jako /boot/config-<kernel version number> . Můžete tedy spustit tento příkaz:

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

Zde jsou oba xhci_hcd a xhci_pci jsou nakonfigurovány tak, aby byly dostupné jako moduly. Pokud by řádky říkaly ...=y místo toho by podpora USB 3 byla zkompilována do hlavního jádra.

PCI ID 1022:43b5, subsystém ID 1b21:1062 je řadič AHCI SATA (nebo eSATA), který je již pokryt modulem ahci .

PCI ID můžete vyhledat v PCI ID Repository.

Pokud byl ovladač určen ID dodavatele/produktu, můžete použít /sbin/modprobe -c | grep '<vendor ID>.*<product ID>' . Pokud získáte zpět řádek jako je tento, našli jste shodu:

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

Tyto informace pocházejí z /lib/modules/modules.alias[.bin] , který je generován depmod příkaz z informací o podpoře zařízení vložených do samotných modulů jádra (definované ve zdrojovém kódu pomocí MODULE_DEVICE_TABLE makro). Můžete také použít modinfo <module name> | grep alias pro zobrazení hardwarové podpory nárokované konkrétním modulem.

Ne všechny moduly jsou však specifikovány ID dodavatele/produktu. Některé ovladače pokrývají celou třídu zařízení; například xhci_pci modul požaduje podporu základní třídy PCI 0x0C, podtřídy 0x03, rozhraní 0x30…, které se mapuje na „řadič sériové sběrnice“, „řadič USB“ a „XHCI“. To je vyjádřeno jako

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

Všimněte si, že byste za normálních okolností neměli provádět žádné z těchto vyhledávání ručně, pokud jste některé moduly nezařadili na černou listinu nebo pokud automatická detekce z nějakého důvodu selže. Když například linuxové jádro detekuje řadič USB 3 původního plakátu, způsobí provedení (ekvivalentu) následujícího příkazu:

modprobe pci:v00001022d000043b9sv1b21sd1142bc0Csc03i30

který obsahuje všechna ID dodavatele hardwaru/zařízení/třídy/podtřídy/rozhraní dostupná pro zařízení. Pokud je v záznamu modprobe jeden ze zástupných aliasů konfigurace odpovídá tomuto řetězci, příslušný modul se načte automaticky.

Související:Jaké jsou oddělovače slov readline?

Pro USB zařízení (a vlastně pro všechny autoprobeable sběrnice) existuje podobný systém aliasů modulů a úložiště USB ID.

Pokud ve svém systému nemáte zkompilovaný příslušný modul, nejlepším řešením je použít úložiště PCI ID k identifikaci zařízení nebo čipu, který je v něm použit. Někdy položka úložiště identifikuje modul linuxového jádra, který pro něj bude poskytovat podporu. Pokud tyto informace nejsou k dispozici, možná budete muset googlovat pomocí modelu zařízení/čipu; to vám obvykle umožní najít jakékoli alternativní/experimentální moduly ovladačů, které (zatím?) nebyly zahrnuty do standardního jádra.


Linux
  1. Linux:Jak najít ovladač zařízení používaný pro zařízení?

  2. Linux – Jak najít ovladač (modul) spojený se zařízením v Linuxu?

  3. Jak najít soubory v daném sektoru?

  1. Jak nastavit modul CWP pro WHMCS

  2. Jak zjistit verzi kompilovaného modulu jádra?

  3. jak najít cestu k linuxovému modulu

  1. Jak odladím modul jádra, ve kterém se zobrazí ukazatel NULL?

  2. Jak zobrazit parametry příkazového řádku linuxového jádra dané pro aktuální boot?

  3. Jak najít ovladač (modul) spojený se zařízením v Linuxu?