Я пишу очень простой драйвер USB-устройства для джойстика. LKM работает отлично, это просто набор отпечатков с функциями регистрации и отмены регистрации.
Когда я загружаю модуль и подключаю USB-устройство (джойстик), оно не связывается автоматически с моим драйвером. Он используется только драйвером usbhid.
поэтому мне пришлось написать правило, чтобы отсоединить устройство от этого драйвера и связать его с моим драйвером. это мое правило:
SUBSYSTEM=="usb", ATTRS{idVendor}=="0079", ATTRS{idProduct}=="0006", RUN="/bin/sh -c 'if [ -d /sys/bus/usb/drivers/usbhid/$id:1.0 ]; then echo -n $id:1.0 > /sys/bus/usb/drivers/usbhid/unbind; fi && echo -n $id:1.0 > /sys/bus/usb/drivers/joystick_driver/bind'"
это отлично работает. просто посмотрите, есть ли устройство в подсистеме usbhid. если да, просто отвяжите его, а затем привяжите мой драйвер к этому устройству.
но я не уверен, что то, что я делаю, - правильный путь.
Интересно, есть ли они в модуле ядра (код драйвера), который назначает или связывает драйвер с устройством джойстика без написания каких-либо правил. потому что, как выяснилось у моих исследователей, модуль ядра (драйвер устройства) не может привязывать или назначать устройство себе, он просто сообщает системе, что он может поддерживать это устройство, но не связываться с ним. Надеюсь, я понял, что я ищу.