一、USB驱动程序概观
二、USB设备概观
三、几个重要的概念
1、端点:USB通信最基本的形式是通过单向传输数据的端点进行的,有控制、批量、等时、中断共四种端点。其中,每个USB设备都有一个称为“端点0”
的控制端点,USB核心使用该端点在设备插入时进行配置。内核使用usb_host_endpoint来描述usb端点,该结构中的usb_endpoint_descriptoer结构才
包含所有usb特定的数据(例如端点的地址、端点的类型、一次可以处理的最大字节数),这些数据格式由设备自己进行定义,usb核心不加限制。
2、接口:USB端点被绑定为接口。接口只处理一种逻辑连接,内核使用usb_interface结构体来描述usb接口。
3、配置:USB接口被绑定为配置。内核使用usb_host_config来描述usb配置,使用usb_device来描述整个usb设备。
四、USB设备通信的请求块URB
它生命周期:
1、由usb设备驱动程序创建。
2、分配给一个特定的usb设备的特定端点。
3、由usb核心递交到特定设备特定的usb主机控制器驱动程序。
4、由usb主机控制器驱动程序处理,它从设备进行usb传送。
5、当urb结束后,usb主机控制器驱动程序通知usb设备驱动程序。
五、注册USB驱动程序
所有usb驱动程序都必须创建的主要结构体是usb_driver。该结构体必须由usb驱动程序来填写,包括回调函数和变量,它们向usb核心代码描述了usb驱动程序。
探测函数
被调用的条件:当一个设备被安装,而usb核心该驱动程序应该处理时候,探测函数在USB集线器内核线程的上下文被调用。
主要任务:检查传递给它的设备信息,确认驱动程序是否适合该设备,若适合,则初始化任何可能用于控制usb设备的结构体,例如通常需要探测设备的端点地址
和缓冲区大小。
六、提交和控制URB
先分配使用usb_alloc_urb分配urb,创建dma缓冲区usb_buffer_alloc并使用copy_from_user复制数据到该缓冲区,然后在urb被递交给usb核心前还应该被正确地初始化
usb_fill_bulk_urb,最后提交到usb核心usb_submit_urb。