关键词: linux, 驱动,usb
USB驱动组成部分:
- USB的bus驱动。
- usb_core。当USB设备接到USB控制器接口时,usb_core就检测该设备的一些信息,例如生产厂商ID和产品的ID,或者是设备所属的class、subclass跟protocol,以便确定应该调用哪一个驱动处理该设备。
- usb的设备驱动。
USB core完成了大部分的工作,写USB驱动的时候,只能调用USBcore的接口,USB core会将咱们的请求发送给相应的HCD。USB core会进行整个USB系统的初始化,比如申请struct bus_type usb_bus_type,然后会扫描USB总线。一个USB键盘,那么就为它准备一个structdevice赋值,并插入devices链表中来。每一个USB设备的驱动程序都会对应一个struct usb_driver结构,USB core为每一个设备驱动准备了一个函数,让把 driver插入到usb_bus_type中的drivers链表中去。
USB主机控制器负责USB总线通信,处理usb状态,管理状态并报告状态信息。数据串行/解串行。生成frame或microframe。处理数据传输的请求。处理usb总线协议。差错控制和电源管理。提供root hub功能让设备连接。根据协议将数据包分发到usb core。
其中USB Core 和USB HCDriver已经由Linux内核实现,开发USB驱动程序就是利用USB Core的API开发USB Device Driver。
一个USB接口对应一个USB驱动。一个接口可以有多个设置。
内核参考代码Kernel\drivers\usb\core
参考
嵌入式Linux下的USB驱动开发.
LINUX下基于USB子系统的驱动编程 2003中国计算机大会
http://libusb.sourceforge.net/api-1.0/