看一下Linux下USB驱动的架构(一)

看一下Linux下USB驱动的架构(一),第1张

前言

接下来我们看一下LinuxUSB驱动的架构,因为内容较多,会分成多篇来介绍!

USB整体框架

USB驱动分为主机侧设备侧,主机侧和设备侧的USB控制器分别称为主机控制器(Host Controller)和USB设备控制器(UDC)。USB核心层向上下提供编程接口,维护整个系统的USB信息,完成热插拔控制,数据传输控制。

看一下Linux下USB驱动的架构(一),poYBAGL7ZPKAX4dwAAC4uFp1BKo303.png,第2张

主机侧

从上图看,我们需要实现两个驱动,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 -- 设备描述符

看一下Linux下USB驱动的架构(一),poYBAGL7ZQiAYMoOAAD7jo0bIEI488.png,第3张

usb_config_descriptor -- 配置描述符

看一下Linux下USB驱动的架构(一),pYYBAGL7ZTeARetQAADNZEI2QRw930.png,第4张

usb_interface_descriptor -- 接口描述符

看一下Linux下USB驱动的架构(一),poYBAGL7ZUyAF-U0AACYHjFlePs295.png,第5张

usb_endpoint_descriptor -- 端点描述符

看一下Linux下USB驱动的架构(一),poYBAGL7ZXOATahOAADdnXUwfMU259.png,第6张

bmAttributes : Bit1-0:00控制,01同步,02批量,03中断。

usb_string_descriptor -- 字符串描述符

看一下Linux下USB驱动的架构(一),pYYBAGL7ZYqAfrisAABFk3g3r1E587.png,第7张

字符描述符是可选的,如果一个设备不支持字符串描述符,设备描述符、配置描述符和接口描述符中对字符串描述符的引用必须设置为0。

usb_device -- usb设备

看一下Linux下USB驱动的架构(一),pYYBAGL7Zb2AbqP5AAGdvfcZa6A178.png,第8张看一下Linux下USB驱动的架构(一),pYYBAGL7ZcOALh4EAAFFdGUV-co922.png,第9张看一下Linux下USB驱动的架构(一),pYYBAGL7ZcmAdtaNAAC7CHHx4ic190.png,第10张

它描述了一个USB设备, 里面包含了设备描述符,配置,端点等信息。

为了更清晰的了解设备,配置,接口,端点等结构体信息,我在Ubuntu上插入一个U盘,然后使用lsusb -v去查看该usb设备的设备描述符等信息。

看一下Linux下USB驱动的架构(一),poYBAGL7ZfWAbsUKAAGaACkf0bU866.png,第11张看一下Linux下USB驱动的架构(一),poYBAGL7ZfyAOIXjAABoAPzL6uI271.png,第12张

它展示了一个设备的描述符信息,各个参数和上面的结构体都可以一一对上,它也描述了一个设备各种信息。

总结

后面会根据上面驱动框架分成USB主机控制器驱动USB设备驱动UDC驱动Gadget FuncTIon驱动等4个部分来介绍对应的内容。


审核编辑:刘清

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/3000204.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存