Zgodność sprzętu z Linuksem > Joysticki, Gamepady

[Poradnik] Wyszukiwanie Sterowników

(1/1)

1709:
Większość sterowników znajduje się w kernelu.
Główne źródło kernela można znaleźć na platformie GitHub  https://github.com/torvalds/linux
Informację o sterownikach można znaleźć np. w tym pliku
https://github.com/torvalds/linux/blob/master/drivers/hid/Kconfig

Czego dotyczą sterowniki HID ?
Z wikipedii możemy wyczytać

--- Cytuj ---Urządzenia HID są produkowane z myślą o podłączeniu ich do portu USB,
dzięki czemu są łatwo rozpoznawane i odpowiednio przez komputer numerowane.
--- Koniec cytatu ---

Wracając co powyższego pliku.
W przeglądarce można użyć skrótu Ctr+F   ( przynajmniej w przeglądarce Firefox to działa )
i wyszukać swój na przykład kontroler PS4 lub inny żeby sprawdzić czy jest wspierany.

Jeśli ten sterownik jest tam na stronie, czy to znaczy że mój system także posiada ten sterownik ?
- Nie koniecznie, sprawdźmy to.

Przykład.
Załóżmy teoretycznie że posiadam kontroler PS4
i w powyższym pliku pisze że jest wspierany przez " HID_PLAYSTATION "
Więc znajdźmy go w naszym systemie.


--- Kod: ---
$ find /lib/modules/$(uname -r) -type f -name '*.ko' | grep -i "playstation"
/lib/modules/5.15.0-91-generic/kernel/drivers/hid/hid-playstation.ko
--- Koniec kodu ---
To znaczy że mój kernel 5.15.0 w systemie zawiera ten moduł / sterownik,
więc kontroler PS4 powinien działać. :D

--------{
Ostrzeżenia:
- Ta nazwa posiada podkreślnik w nazwie HID_PLAYSTATION ,
natomiast nazwa  hid-playstation.ko posiada myślnik w nazwie.
Należy to uwzględnić podczas wyszukiwania plików.

- Nie mogę znaleźć uniwersalnej komendy pokazującej listę wszystkich dostępnych modułów w systemie Linux.
Dlatego w zależności od dystrybucji możliwe że powyższą komendę trzeba będzie lekko zmodyfikować.
Komenda " modprobe -l " może nie istnieć.
Można spróbować w ten sposób

--- Kod: ---
modprobe -c | grep hid | grep playstation
--- Koniec kodu ---
Ale nie gwarantuję że sposób jest prawidłowy, w sensie że jeżeli plik konfiguracyjny istnieje, to sterownik także istnieje. ( Nie mam pewności )
--------}

W przypadku nie znalezienia modułu we własnym systemie,
natomiast jeśli istnieje na stronie projektu / kodu źródłowego Linux,
wtedy jest duże prawdopodobieństwo że sterownik
znajdziemy w systemie dopiero po zaktualizowaniu kernela do nowszej wersji.

Oczywiście czasami system musi wspierać więcej technologii dla danego urządzenia niż tylko USB,
np. może wymagać także działania z Bluetooth,
ale może chociaż ten poradnik także komuś się przyda.

Paweł Kraszewski:
+1 za post.
Uzupełnienie z mojej strony:

* Na ogół informacja z konfiguracją jądra jest gdzieś dostępna w zainstalowanym systemie. Albo jako plik w /boot, albo jako wirtualny plik /proc/config.gz. Weryfikacja obecności pada PS wygląda tak:


--- Kod: ---
> zcat /proc/config.gz| grep PLAYSTATION

CONFIG_HID_PLAYSTATION=m
CONFIG_PLAYSTATION_FF=y
--- Koniec kodu ---

Jak widać - driver jest włączony jako moduł (=m) i ma włączony force feedback.

* Jeżeli mamy komputer, w którym jakieś urządzenie działa, to możemy sprawdzić, jaki driver je obsługuje poleceniem inxi -F.

* W wielu przypadkach (zwłaszcza WiFi) - o ile sterownik jest opensource'owy, to firmware już nie, i trzeba go mniej lub bardziej ręcznie doinstalować.

1709:
Niestety nie wszystkie urządzenia podłączane do USB są obsługiwane przez standard HID.
" Standard " HID powstał z myślą o lepszym zarządzaniu sterownikami.
Najlepiej sobie
1. Pobrać kod źródłowy linuxa / kernela ze strony https://github.com/torvalds/linux
2. Rozpakowac archiwum
3. Wyszukać urządzenie
np. mam słuchawki producenta HyperX
to w rozpakowanym katalogu archiwum otwieram terminal i wyszukuję komendą

--- Kod: ---
grep -ri hyperx
--- Koniec kodu ---
i np. otrzymuję listę urządzeń

--- Kod: ---
$ grep -ri hyperx
sound/usb/quirks.c: DEVICE_FLG(0x0951, 0x16ad, /* Kingston HyperX */
drivers/input/joystick/xpad.c: { 0x03f0, 0x038D, "HyperX Clutch", 0, XTYPE_XBOX360 }, /* wired */
drivers/input/joystick/xpad.c: { 0x03f0, 0x048D, "HyperX Clutch", 0, XTYPE_XBOX360 }, /* wireless */
drivers/input/joystick/xpad.c: { 0x03f0, 0x0495, "HyperX Clutch Gladiate", 0, XTYPE_XBOXONE },
drivers/input/joystick/xpad.c: { 0x03f0, 0x07A0, "HyperX Clutch Gladiate RGB", 0, XTYPE_XBOXONE },
drivers/input/joystick/xpad.c: { 0x03f0, 0x08B6, "HyperX Clutch Gladiate", 0, XTYPE_XBOXONE }, /* v2 */
drivers/input/joystick/xpad.c: { 0x03f0, 0x09B4, "HyperX Clutch Tanto", 0, XTYPE_XBOXONE },
drivers/input/joystick/xpad.c: XPAD_XBOX360_VENDOR(0x03f0), /* HP HyperX Xbox 360 controllers */
drivers/input/joystick/xpad.c: XPAD_XBOXONE_VENDOR(0x03f0), /* HP HyperX Xbox One controllers */
--- Koniec kodu ---

Z czego pierwszy raczej jest od dźwięku, a pozostałe od kontrolerów / gamepadów

I o ile znajdziemy xpad sterownik do kontrolera

--- Kod: ---
$ find /lib/modules/$(uname -r) -type f -name '*.ko' | grep -i "xpad"
/lib/modules/5.15.0-91-generic/kernel/drivers/input/joystick/psxpad-spi.ko
/lib/modules/5.15.0-91-generic/kernel/drivers/input/joystick/xpad.ko
--- Koniec kodu ---

To niestety z tego co znalazłem w internecie to quirks nie dokońca jest sterownikiem.
Jest czymś pośredniczącym jak np. plik konfiguracyjny.

Tutaj za bardzo nie potrafię pomóc.
Jedyne co mogę napisać że jeśli urządzenie nam działa,
to komenda lsusb pokaże nazwy urządzeń


--- Kod: ---
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 0000:3825   USB OPTICAL MOUSE
Bus 001 Device 002: ID 04b4:6005 Cypress Semiconductor Corp.
Bus 001 Device 005: ID 03f0:0b92 HP, Inc HyperX Virtual Surround Sound
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
--- Koniec kodu ---

 i zakładając że " Bus " to " Port " , a " Device " to  " Dev "
za pomocą komendy lsusb -t

--- Kod: ---
$ lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
    |__ Port 1: Dev 5, If 3, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 1: Dev 5, If 1, Class=Audio, Driver=snd-usb-audio, 12M
    |__ Port 1: Dev 5, If 2, Class=Audio, Driver=snd-usb-audio, 12M
    |__ Port 1: Dev 5, If 0, Class=Audio, Driver=snd-usb-audio, 12M
    |__ Port 5: Dev 2, If 1, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 5: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 9: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
--- Koniec kodu ---
przypuszczam że są to sterowniki snd-usb-audio i usbhid

Komendą lsmod mogę sprawdzić czy są załadowane

--- Kod: ---
$ lsmod | grep -i "snd_usb_audio\|usbhid"
snd_usb_audio         364544  2
snd_usbmidi_lib        45056  1 snd_usb_audio
mc                     65536  1 snd_usb_audio
snd_hwdep              16384  2 snd_usb_audio,snd_hda_codec
snd_pcm               143360  6 snd_hda_codec_hdmi,snd_hda_intel,snd_usb_audio,snd_hda_codec,snd_hda_core
snd                   106496  28 snd_hda_codec_generic,snd_seq,snd_seq_device,snd_hda_codec_hdmi,snd_hwdep,snd_hda_intel,snd_usb_audio,snd_usbmidi_lib,snd_hda_codec,snd_hda_codec_realtek,snd_timer,snd_pcm,snd_rawmidi
usbhid                 65536  0
hid                   151552  2 usbhid,hid_generic
--- Koniec kodu ---

Wnioski
- Oba sterowniki są załadowane
- Znów trzeba uważać na myślniki i podkreślniki w nazwach

Nawigacja

[0] Indeks wiadomości

Idź do wersji pełnej