鼠标驱动

Linux驱动之USB鼠标驱动编写

主宰稳场 提交于 2020-03-08 07:41:55
本篇博客分以下几部分讲解 1、介绍USB四大描述 2、介绍USB鼠标驱动程序功能及框架 3、介绍程序用到的结构体 4、介绍程序用到的函数 5、编写程序 6、测试程序 1、介绍USB四大描述符 USB设备驱动程序里定义了许多与驱动程序密切相关的描述符。这里介绍一下四种比较关键的描述符: 设备描述符 、 配置描述符 、 接口描述符 、 端点描述符 。这几个描述符都位于include\linux\usb\ch9.h中,先看一下每个描述直接的关系,从图中可以看出每一个查到USB主机上的USB设备都有一个设备描述符,设备描述符下面可以接多个配置描述符,配置描述符下面又可以接多个 当USB设备接到USB控制器上后,USB控制器第一次读取到的数据包,总共8字节 /*当USB设备接到USB控制器上后,USB控制器第一次读取到的数据包,总共8字节*/ struct usb_ctrlrequest { __u8 bRequestType; __u8 bRequest; __le16 wValue; __le16 wIndex; __le16 wLength; } __attribute__ ((packed)); 设备描述符 是在设备连接时,主机第一个读取的描述符,包含了主机需要从设备读取的基本信息。设备描述符有14个字段,如下所示。依照功能来分,设备描述符的字段包含了描述符本身、设备

《驱动学习 - USB鼠标驱动》

好久不见. 提交于 2019-12-01 12:25:23
参考/drivers/hid/usbhid/usbmouse.c(内核自带的USB鼠标驱动) 1.本节需要用到的宏如下: struct usb_device_id usbmouse_id_table []=USB_INTERFACE_INFO(cl,sc,pr);   USB_INTERFACE_INFO()设置usb_driver驱动的id_table成员。 cl:接口类,我们USB鼠标为HID类,所以填入0X03,也就是USB_INTERFACE_CLASS_HID sc:接口子类为启动设备,填入USB_INTERFACE_SUBCLASS_BOOT pr:接口协议为鼠标协议,填入USB_INTERFACE_PROTOCOL_MOUSE struct usb_device *dev=interface_to_usbdev(intf);   通过usb_ interface接口获取usb_device设备,为后面设置USB数据传输用。 pipe=usb_rcvintpipe(dev,endpoint); 创建一个接收(rcv)中断(int)类型的端点管道(pipe),用来端点和数据缓冲区之间的连接,鼠标为接收中断型 dev: usb_device设备结构体 endpoint:为端点描述符的成员endpoint->bEndpointAddress //端点地址