GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Cara Menemukan Modul Kernel Untuk Perangkat yang Diberikan?

Saya mencoba memecahkan masalah:mouse usb tidak berfungsi di linux yang baru diinstal.

Saya menduga masalahnya adalah tidak ada modul/driver kernel yang cocok untuk perangkat keras usb saya. Memang:

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

Seperti yang Anda lihat, tidak ada driver kernel yang dilaporkan untuk perangkat pengontrol USB (saya kira itu harus dilaporkan dengan cara yang mirip dengan driver yang dilaporkan untuk pengontrol SATA)

Jadi, saya perlu membangun kembali kernel dengan modul yang cocok untuk perangkat saya. Tetapi bagaimana saya bisa mengetahui modul apa yang harus saya buat? Saya memiliki informasi yang mengidentifikasi perangkat saya:itu adalah id vendor dan id perangkat keras ([1b21:43b9]). Bagaimana cara mengetahui nama modul kernel yang sesuai dengan informasi ini?

Jawaban yang Diterima:

ID PCI 1022:43b9 adalah Pengontrol Chipset USB 3.1 xHCI Seri AMD X370. ID subsistem PCI 1b21:1142 akan menyarankan bahwa itu mungkin pengontrol ASMedia ASM1042A USB 3, mungkin terintegrasi ke dalam chipset AMD.

Untuk sebagian besar chip pengontrol USB 3.x, modul driver yang sesuai adalah xhci_pci yang bergantung pada modul xhci_hcd . Kedua modul ini adalah bagian dari kernel Linux standar, sehingga harus tersedia di semua distribusi Linux modern. Opsi konfigurasi kernel yang sesuai adalah CONFIG_USB_XHCI_PCI dan CONFIG_USB_XHCI_HCD .

Banyak distribusi menyertakan file konfigurasi kernel sebagai /boot/config-<kernel version number> . Jadi, Anda bisa menjalankan perintah ini:

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

Di sini, keduanya xhci_hcd dan xhci_pci dikonfigurasi untuk tersedia sebagai modul. Jika garis akan mengatakan ...=y sebagai gantinya, dukungan USB 3 akan dikompilasi ke dalam kernel utama.

ID PCI 1022:43b5, ID subsistem 1b21:1062 adalah pengontrol AHCI SATA (atau eSATA), yang sudah dicakup oleh modul ahci .

Anda dapat mencari ID PCI di Repositori ID PCI.

Jika driver telah ditentukan oleh vendor/ID produk, Anda dapat menggunakan /sbin/modprobe -c | grep '<vendor ID>.*<product ID>' . Jika Anda mendapatkan kembali baris seperti ini, Anda telah menemukan kecocokan:

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

Informasi ini berasal dari /lib/modules/modules.alias[.bin] , yang dihasilkan oleh depmod perintah dari informasi dukungan perangkat yang tertanam dalam modul kernel itu sendiri (didefinisikan dalam kode sumber dengan MODULE_DEVICE_TABLE makro). Anda juga dapat menggunakan modinfo <module name> | grep alias untuk melihat dukungan perangkat keras yang diklaim oleh modul tertentu.

Namun, tidak semua modul ditentukan oleh vendor/ID produk. Beberapa driver akan mencakup seluruh kelas perangkat; misalnya, xhci_pci modul mengklaim dukungan kelas dasar PCI 0x0C, subkelas 0x03, antarmuka 0x30... yang masing-masing dipetakan ke "Pengontrol bus serial", "pengontrol USB" dan "XHCI". Ini dinyatakan sebagai

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

Perhatikan bahwa Anda biasanya tidak perlu melakukan pencarian ini secara manual kecuali Anda telah memasukkan beberapa modul ke daftar hitam atau deteksi otomatis gagal karena suatu alasan. Misalnya, ketika kernel Linux mendeteksi pengontrol USB 3 pembuat poster asli, itu akan menyebabkan (setara dengan) perintah berikut dijalankan:

modprobe pci:v00001022d000043b9sv1b21sd1142bc0Csc03i30

yang berisi semua ID vendor/perangkat/kelas/subkelas/antarmuka perangkat keras yang tersedia untuk perangkat. Jika salah satu alias wildcard tercatat di modprobe konfigurasi cocok dengan string ini, modul masing-masing akan dimuat secara otomatis.

Terkait:Apa pemisah kata readline?

Untuk perangkat USB (dan memang untuk semua bus autoprobeable), ada sistem alias modul yang serupa, dan repositori ID USB.

Jika Anda tidak memiliki modul yang sesuai yang dikompilasi di sistem Anda, taruhan terbaik Anda adalah menggunakan repositori ID PCI untuk mengidentifikasi perangkat atau chip yang digunakan di dalamnya. Terkadang entri repositori mengidentifikasi modul kernel Linux yang akan memberikan dukungan untuknya. Jika informasi itu tidak ada, Anda mungkin perlu mencari di Google menggunakan model perangkat/chip; ini biasanya akan memungkinkan Anda untuk menemukan modul driver alternatif/eksperimental yang belum (belum?) disertakan dalam kernel standar.


Linux
  1. Linux:Bagaimana Menemukan Driver Perangkat yang Digunakan Untuk Perangkat?

  2. Linux – Bagaimana Cara Menemukan Driver (modul) yang Berhubungan Dengan Perangkat Di Linux?

  3. Bagaimana Menemukan Port Serial Yang Digunakan?

  1. Bagaimana Menemukan File Di Sektor Tertentu?

  2. Bagaimana Cara Menambahkan Parameter Modul Kernel?

  3. Bagaimana cara menggunakan ioctl() untuk memanipulasi modul kernel saya?

  1. Bagaimana menemukan versi modul kernel yang dikompilasi?

  2. Bagaimana cara membuat kode modul kernel Linux?

  3. Bagaimana menemukan driver (modul) yang terkait dengan perangkat di Linux?