接口/总线/驱动
前言
接下来我们看一下Linux下USB驱动的架构,因为内容较多,会分成多篇来介绍!
USB整体框架
USB驱动分为主机侧和设备侧,主机侧和设备侧的USB控制器分别称为主机控制器(Host Controller)和USB设备控制器(UDC)。USB核心层向上下提供编程接口,维护整个系统的USB信息,完成热插拔控制,数据传输控制。
主机侧
从上图看,我们需要实现两个驱动,USB主机控制器驱动和USB设备驱动。
USB主机控制器驱动:控制插入的USB设备
USB设备驱动:控制具体USB设备和主机如何通信
设备侧
设备侧也需要实现两部分驱动,UDC驱动和Gadget Function驱动。
UDC驱动:控制USB设备和主机的通信
Gadget Function驱动:控制USB设备功能的实现
* 为什么叫“Gadget驱动”,是为了不和USB设备驱动混淆,所以改为“器件驱动”
重要结构体
之前在基础知识中,我们介绍过设备,配置,接口,端点等概念,它在Linux中有4个对应的结构体来表示。同时也有对应的结构体来描述USB设备。
内核版本:4.20.12
usb_device_descriptor -- 设备描述符
usb_config_descriptor -- 配置描述符
usb_interface_descriptor -- 接口描述符
usb_endpoint_descriptor -- 端点描述符
bmAttributes : Bit1-0:00控制,01同步,02批量,03中断。
usb_string_descriptor -- 字符串描述符
字符描述符是可选的,如果一个设备不支持字符串描述符,设备描述符、配置描述符和接口描述符中对字符串描述符的引用必须设置为0。
usb_device -- usb设备
它描述了一个USB设备, 里面包含了设备描述符,配置,端点等信息。
为了更清晰的了解设备,配置,接口,端点等结构体信息,我在Ubuntu上插入一个U盘,然后使用lsusb -v去查看该usb设备的设备描述符等信息。
它展示了一个设备的描述符信息,各个参数和上面的结构体都可以一一对上,它也描述了一个设备各种信息。
总结
后面会根据上面驱动框架分成USB主机控制器驱动,USB设备驱动,UDC驱动,Gadget Function驱动等4个部分来介绍对应的内容。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !