全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 接口/总线/驱动 >

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

时间:2022-08-16 17:41

人气:

作者:admin

导读:看一下Linux下USB驱动的架构(一)-USB驱动分为主机侧和设备侧,主机侧和设备侧的USB控制器分别称为主机控制器(Host Controller)和USB设备控制器(UDC)。...

前言

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

USB整体框架

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

poYBAGL7ZPKAX4dwAAC4uFp1BKo303.png

主机侧

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

poYBAGL7ZQiAYMoOAAD7jo0bIEI488.png

usb_config_descriptor -- 配置描述符

pYYBAGL7ZTeARetQAADNZEI2QRw930.png

usb_interface_descriptor -- 接口描述符

poYBAGL7ZUyAF-U0AACYHjFlePs295.png

usb_endpoint_descriptor -- 端点描述符

poYBAGL7ZXOATahOAADdnXUwfMU259.png

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

usb_string_descriptor -- 字符串描述符

pYYBAGL7ZYqAfrisAABFk3g3r1E587.png

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

usb_device -- usb设备

pYYBAGL7Zb2AbqP5AAGdvfcZa6A178.pngpYYBAGL7ZcOALh4EAAFFdGUV-co922.pngpYYBAGL7ZcmAdtaNAAC7CHHx4ic190.png

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

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

poYBAGL7ZfWAbsUKAAGaACkf0bU866.pngpoYBAGL7ZfyAOIXjAABoAPzL6uI271.png

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

总结

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


审核编辑:刘清

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信