USB基础---Linux USB驱动层次

在Linux系统中,提供主机侧和设备侧视角的USB驱动框架,从主机侧看到的USB主机控制器和设备驱动,以及从设备侧看到的设备控制器和Gadget驱动。

  1. Linux系统中USB驱动的整体视图

图1

(1)   Mass storage

USB Mass Storage Device ,USB大容量设备,比如我们的移动硬盘,或者是我们手机连接PC时作为一个大容量设备。

(2)   CDC

CDC(Communication Device Class)类是USB2.0标准下的一个子类,定义了通信相关设备的抽象集合。它与USB2.0标准以及其下的子类的相互关系如下图所示:

图2

(3)   HID

人机接口设备Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。不过HID设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID设备。

(4)   UDC(USB device controller)

图3

 

  1. 主机侧与设备侧USB驱动

2.1   主机侧

从主机侧的角度看,需要编写的USB驱动包括USB主机控制器驱动和USB设备驱动两类,USB主机控制器驱动程序控制插入其中的USB设备,而USB设备驱动程序控制该设备如何作为从设备与主机通信,比如图3右边,Android设备作为主机,USB主机控制器驱动程序控制插入其中的USB键盘,而USB设备驱动此时对应HID(包括USB键盘)的驱动。

每条总线上只有一个主机控制器,负责协调主机和设备间的通信,而设备不能主动向主机发生任何消息。

USB核心负责USB驱动管理和协议处理的主要工作。其功能包括:通过定义一些数据结构、宏、功能函数,向上为设备驱动提供编程接口,向下为USB主机控制器驱动提供编程接口;维护整个系统的USB设备信息;完成设备热拔插控制、总线数据传输控制等。

2.2   设备侧

Linux内核的USB设备侧驱动程序分为3个层次:UDC驱动程序、Gadget(小配件) Function API和Gadget Function驱动 。

UDC驱动程序直接访问硬件,控制USB设备和主机间的底层通信,向上层提供与硬件相关操作的回调函数。Gadget Function API是UDC驱动程序回调函数的简单封装。Gadget Function驱动具体控制USB设备功能的实现,使设备表现为“网络链接”、“打印机”或“USB Mass Storage”等特性,它使用Gadget Function API控制UDC实现这些功能。Gadget Function API把下层的UDC驱动和上层到Gadget Function驱动隔离开,是的在linux系统中编写USB设备侧驱动时能够把功能的实现和底层通信分离。

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loongembedded

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值