>> On Sat, Apr 25, 2020 at 1:46 AM Sohaib Mhmd <xunilams@xxxxxxxxx> wrote:
>> Hi everyone, I made a very simple USB driver,
>> but the problem is that the probe and disconnect functions never was called.
>> I tried to google for this problem but unfortunately:
>> 1- I don't use usb-storage, it's a keyboard! (but anyway the same problem exists with any usb-based device) and all driver on my machine are bluetooth related drive (i think!) (as you see from lsmod | grep usb)
>> 1- I don't use usb-storage, it's a keyboard! (but anyway the same problem exists with any usb-based device) and all driver on my machine are bluetooth related drive (i think!) (as you see from lsmod | grep usb)
>> 2- I tried to rmmod usbhid but I get error: ERROR: Module usbhid is builtin.
>> I tried to search for "usbhid" in .config file to remove it but I didn't find anything.
>> What should I do?
>> thanks, smalinux
>> What should I do?
>> thanks, smalinux
Hello Sohaib,
Looking at the very last line of your dmesg output :
[ 4545.614471] hid-generic
0003:045E:0800.000C: input,hiddev96,hidraw2: USB HID v1.11 Device
[Microsoft Microsoft® Nano Transceiver v2.0] on
usb-0000:00:14.0-3/input2
The reason your probe and disconnect functions are never called is because the hid-generic driver has claimed your device. This is the default behavior.
Since usbhid is builtin you are unable to unload it using rmmod. But you can unbind it. The steps are below:
1 - sudo modprobe <your_kernel_module>
2 - unbind hid-generic ( from a root terminal )
3 - bind <your_kernel_module> ( from a root terminal )
4 - check dmesg ( should show your probe has been called )
5 - unbind <your_kernel_module> ( from a root terminal )
6 - check dmesg ( should show your disconnect has been called )
Clear the log buffer with dmesg -c then run dmesg -w.
Now find your bus id. Your bus id is 3-3:1.2 from your second last dmesg output.
[ 4545.613190] input: Microsoft Microsoft® Nano Transceiver v2.0 System Control as /devices/pci0000:00/0000:00:14.0/usb3/3-3/3-3:1.2/0003:045E:0800.000C/input/input49
[ 4545.613190] input: Microsoft Microsoft® Nano Transceiver v2.0 System Control as /devices/pci0000:00/0000:00:14.0/usb3/3-3/3-3:1.2/0003:045E:0800.000C/input/input49
To unbind from hid-generic from a root shell/terminal:
echo "3-3:1.2" > /sys/bus/usb/drivers/usbhid/unbind
echo "3-3:1.2" > /sys/bus/usb/drivers/usbhid/unbind
Now to bind to your driver from a root shell:
echo "3-3:1.2" > /sys/bus/usb/drivers/'my first usb driver'/bind // you need the single quotes because of the spaces in your driver name
echo "3-3:1.2" > /sys/bus/usb/drivers/'my first usb driver'/bind // you need the single quotes because of the spaces in your driver name
You should see dmesg telling you the probe function has been called now.
To unbind your driver from a root shell:
echo "3-3:1.2" > /sys/bus/usb/drivers/'my first usb driver'/unbind // you need the single quotes because of the spaces in your driver name
and now dmesg should show you the disconnect function has been called.
If you pull out your device and plug it back in usbhid will be triggered. To stop that you can from a root terminal:
echo '0' > /sys/bus/hid/drivers_autoprobe
echo '0' > /sys/bus/hid/drivers_autoprobe
Good luck - Aruna ( If you have the kernel source why not re-compile ? Look for CONFIG_USB_HID in Make menuconfig )
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies