Jak zidentyfikować moduł, który ma odbierać urządzenie tylko na podstawie identyfikatora dostawcy / produktu?

14

Załóżmy, że znam numeryczne identyfikatory produktu / dostawcy sprzętu, których nie mam tutaj i chcę wiedzieć, czy istnieje wsparcie dla mnie w jądrze, mogę to zrobić (przykład odbiornika USB Bluetooth):

modinfo btusb
filename:       /lib/modules/3.7.5-030705-generic/kernel/drivers/bluetooth/btusb.ko
[...]
alias:          usb:v0A5Cp*d*dc*dsc*dp*icFFisc01ip01in*
alias:          usb:v0489p*d*dc*dsc*dp*icFFisc01ip01in*
alias:          usb:v413Cp8197d*dc*dsc*dp*ic*isc*ip*in*
[...]

Na podstawie tego mogę zobaczyć, które urządzenia mają być objęte roszczeniem, btusbi to wymaga wcześniejszej znajomości nazwy modułu. Jednak w niektórych przypadkach nie mam pojęcia o nazwach modułów obsługujących takie urządzenie.

Sprzęt sieciowy jest jedną z tych kategorii, o której trudno się dowiedzieć. Ponadto nazwy lspcii lsusbsą czasami niejednoznaczne lub po prostu błędne. Obecnie przeglądam całe drzewo źródeł jądra, które nie jest aż tak eleganckie.

  • Czy istnieje sposób na wyświetlenie wszystkich modalności wszystkich modułów (w tym wbudowanych w jądro) za jednym razem, aby znaleźć dopasowanie?
  • Czy też istnieje sposób zapytania do jądra, aby dostarczyć mi moduły jądra żądające takiego urządzenia, którego tak naprawdę nie posiadam?

Przypadków użycia:

  • Użytkownicy zadają tutaj pytania, na które mogę odpowiedzieć / oszukać, sprawdzając, czy „wsparcie jest dostępne, jeśli uaktualniasz do ...” lub „Wypróbuj rmmod module1; modprobe module2 as module2 wydaje się również obsługiwać twoje urządzenie”.
  • Sprawdzanie wsparcia przed zakupem sprzętu z wcześniejszą znajomością identyfikatorów. Oprócz wyszukiwania za pomocą identyfikatorów mogę następnie szukać raportów o błędach w samym module jądra.
gertvdijk
źródło
Tak naprawdę nie ma łatwego sposobu na uzyskanie tych informacji. Nie wszystkie urządzenia USB są objęte roszczeniami na podstawie ich identyfikatorów. Urządzenia oparte na klasach (pamięć masowa, HID oraz wiele urządzeń szeregowych i sieciowych) są identyfikowane na podstawie dostarczonego interfejsu.
Alistair Buxton,
może może w tym pomóc przełącznik trybu USB. jeśli go nie masz:sudo apt-get install usb-modeswitch
Dimitris Theodoridis
wpisz lsusb, a zobaczysz ID
Dimitris Theodoridis
z twojego pytania właśnie zobaczyłem, że chcesz zobaczyć identyfikator i zmienić go, czy się mylę?
Dimitris Theodoridis
teraz naprawdę cię nie rozumiem. proszę wyjaśnij swoje pytanie, niż mogę je lepiej zrozumieć i sprawdź, czy naprawdę mogę Ci pomóc
Dimitris Theodoridis

Odpowiedzi:

3

Jeśli przekształcisz problem jako „Jak mogę uruchomić modinfona wszystkich (lub niektórych) modułach i wybierzesz niektóre dane wyjściowe do dalszego wykorzystania?”, Możesz skorzystać z tej sztuczki (zostawiłem polecenia, których użyłem, aby dowiedzieć się, jak uzyskać do wyniku końcowego):

ls /lib/modules
ls /lib/modules/$(uname -r)
ls /lib/modules/$(uname -r)/kernel
find  /lib/modules/$(uname -r)/kernel -type f -name '*.ko' -print
for i in $( !! ) ; do
for i in $( find  /lib/modules/$(uname -r)/kernel -type f -name '*.ko' -print ) ; do
   j=${i##.*/}
   j=${j%%.ko}
   echo $j
   modinfo $i | egrep 'filename:|alias:'
   echo ""
   done

Tej sztuczki można użyć gdzie indziej, baw się dobrze!

waltinator
źródło