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

接口/总线/驱动

1117人已加入

描述

前言

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

USB整体框架

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

Linux系统

主机侧

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

Linux系统

usb_interface_descriptor -- 接口描述符

Linux系统

usb_endpoint_descriptor -- 端点描述符

Linux系统

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

usb_string_descriptor -- 字符串描述符

Linux系统

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

usb_device -- usb设备

Linux系统Linux系统Linux系统

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

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

Linux系统Linux系统

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

总结

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


审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分