USB 驱动框架

一、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。

























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值