Я пытаюсь узнать драйвер устройства USB для Linux. Я выбрал контроллер MS XBOX 360. Я заметил, что есть универсальный драйвер (xpad.ko) для Linux. Излишне говорить, что мой код основан на xpad.c. В любом случае, я построил свой драйвер (360.ko). modprobe -r для текущего драйвера (xpad, led_class, даже usbhid). также в черный список драйвера xpad. Сделал insmod на моем драйвере (360.ko). USBcore регистрирует мой драйвер (usbcore: зарегистрирован новый драйвер интерфейса Microsoft Xbox 360 Controller). Тем не менее, он не вызывает мой usb_360_probe (). Любые подсказки ?????
static struct usb_driver uDriver = {
.name = "Microsoft Xbox 360 Controller",
.probe = usb_360_probe,
.disconnect = usb_360_disconnect,
.id_table = skel_table,
};
#define USB_360_VENDOR_ID 0x045E
#define USB_360_PRODUCT_ID 0x0202//0x0289//0x028E //I tried all these product IDs!
static struct usb_device_id skel_table[] = {
{ USB_DEVICE(USB_360_VENDOR_ID, USB_360_PRODUCT_ID) },
{},
};
static int usb_360_probe(struct usb_interface *intf, const struct usb_device_id*id)
{
printk(KERN_INFO, "(360)usb_360_probe.\n");
}
static int __init usb_360_init(void)
{
int result;
printk(KERN_INFO, "(360)usb_360_init.\n");
/* register this driver with the USB subsystem */
result = usb_register(&uDriver);
if (result)
{
printk(KERN_INFO, "(360)usb_register failed.\n");
}
printk(KERN_INFO, "(360)usb_register succeeded.\n");
return result;
}
static void __exit usb_360_exit(void)
{
/* deregister this driver with the USB subsystem */
usb_deregister(&uDriver);
printk(KERN_INFO, "(360)usb_unregister succeeded.\n");
}
module_init(usb_360_init);
module_exit(usb_360_exit);
// Я использую printk (KERN_INFO) для сообщения dmesg. Это работает для других моих драйверов.
ядро: 2.6.32-21-generic