1、分配、设置注册usb_driver结构体。(usb_device结构体在USB总线会帮我们完成,具体见前面)
设置usb_driver主要有哪些要设置:
id_table--------USB总线匹配驱动和设备时候就依靠获取的设备接口描述符和驱动的id_table进行匹配来判断是否支持;
probe----------USB总线匹配成功会通过usb_probe_interface(driver的probe函数)来调用USB驱动的probe函数;
disconnect----这个函数前面没有提到,这个当USB设备拔出来时候,USB总线会调用。
对于分配设置usb_driver也很简单,分配就直接分配内存,注册就是通过usb_register函数。
所以对于USB框架驱动是十分简单的,核心的事情有两件事:
1、USB总线驱动在USB设备接入HUB时候会通信,获取USB设备的各种描述符,那么驱动第一件事就是通过接口直接把主机控制器之前读到的描述符给
读取出来,然后进行解析。这个解析就是USB驱动的最核心的工作:
2、就是根据获取的描述符来设置和操作USB设备,这部分核心工作就是通过urb来完成。
3、首先讨论id_table:
下面参考文章:http://linux.chinaunix.net/techdoc/install/2009/08/05/1128379.shtml
struct usb_device_id {
/* 确定设备信息去和结构体中哪几个字段匹配来判断驱动的适用性 */
__u16 match_flags;
/* Used for product specific matches; range is inclusive */
__u16 idVendor; //USB设备的制造商ID,
__u16 idProduct; //USB设备的产品ID,有制造商自定
__u16 bcdDevice_lo; /* USB设备的产品版本号最低值*/
__u16 bcdDevice_hi; /* 和最高值,以BCD码来表示。*/
/* 分别定义设备的类,子类和协议,他们由 USB 论坛分配并定义在 USB 规范中. 这些值指定这个设备的行为, 包括设备上所有的接口 */
__u8 bDeviceClass;
__u8 bDeviceSubClass;
__u8 bDeviceProtocol;</