这了实现的目标---usb鼠标用作按键,左、右、中键分别作为字符"l"、"s"、回车的输入。
问1:怎么写USB设备驱动程序?
答:1. 分配/设置usb_driver结构体
.id_table
.probe
.disconnect
2. 注册
下面直接进入代码编写:
/* 1. 分配/设置usb_driver */
id_table 成员---- 描述这个 USB 驱动支持的 USB 设备列表,它是一个指针,指向一个 usb_device_id 数组,usb_device_id 结构体用于包含 USB 设备的厂商 ID,产品 ID,产品版本,设备类,接口类等信息。
可用宏来生成 usb_device_id 对象:USB_DEVICE(vendor,product);
该宏根据厂商 ID,产品 ID 生成一个 usb_device_id 的对象,在数组中加入该元素将意味着该驱动可支持匹配厂商 ID,产品 ID 的设备。
USB_DEVICE_INFO(class,subclass,protocal) -----创建一个设备指定类型的 usb_device_id 对象。
USB_INTERFACE_INFO(class,subclass,protocal)----创建一个接口指定类型的 usb_device_id 对象。
MODULE_DEVICE_TABLE (usb, skel_table);第一个参数是设备的类型,如果是 USB 设备,那自然是 usb(如果是 PCI 设备,那将是 pci);后面一个参数是设备表,这个设备表的最后一个元素是 空的,用于标识结束。当内核告知热插拔系统一个新的 PCI 设备被发现时,热
问1:怎么写USB设备驱动程序?
答:1. 分配/设置usb_driver结构体
.id_table
.probe
.disconnect
2. 注册
下面直接进入代码编写:
/* 1. 分配/设置usb_driver */
static struct usb_driver usbmouse_as_key_driver = {
.name = "usbmouse_as_key_",
.probe = usbmouse_as_key_probe,
.disconnect = usbmouse_as_key_disconnect,
.id_table = usbmouse_as_key_id_table,
};
static struct usb_device_id usbmouse_as_key_id_table [ ] = {
{ USB_INTERFACE_INFO(USB_INTERFACE_CLASS_HID, USB_INTERFACE_SUBCLASS_BOOT,
USB_INTERFACE_PROTOCOL_MOUSE) },
//{USB_DEVICE(0x1234,0x5678)},
{ } /* Terminating entry */
};
写 USB 设备驱动时,主要完成的工作是 probe()和 disconnect()函数,即探测和断开函数。
id_table 成员---- 描述这个 USB 驱动支持的 USB 设备列表,它是一个指针,指向一个 usb_device_id 数组,usb_device_id 结构体用于包含 USB 设备的厂商 ID,产品 ID,产品版本,设备类,接口类等信息。
可用宏来生成 usb_device_id 对象:USB_DEVICE(vendor,product);
该宏根据厂商 ID,产品 ID 生成一个 usb_device_id 的对象,在数组中加入该元素将意味着该驱动可支持匹配厂商 ID,产品 ID 的设备。
USB_DEVICE_INFO(class,subclass,protocal) -----创建一个设备指定类型的 usb_device_id 对象。
USB_INTERFACE_INFO(class,subclass,protocal)----创建一个接口指定类型的 usb_device_id 对象。
MODULE_DEVICE_TABLE (usb, skel_table);第一个参数是设备的类型,如果是 USB 设备,那自然是 usb(如果是 PCI 设备,那将是 pci);后面一个参数是设备表,这个设备表的最后一个元素是 空的,用于标识结束。当内核告知热插拔系统一个新的 PCI 设备被发现时,热