Linux USB子系统(1)-设备、驱动、框架

本文详细介绍了Linux USB子系统的框架,包括Linux USB驱动的层次结构,主机侧与设备侧的控制器和驱动,以及设备、配置、接口、端点的概念。文章还探讨了SOC上的USB主机控制器和驱动,USB设备与驱动的匹配过程,以及物理设备的插入和注册流程。
摘要由CSDN通过智能技术生成

Linux USB子系统框架


内核版本:linux-3.4.2

1. Linux USB驱动层次

USB采用树形拓扑结构,主机侧和设备侧的USB控制器分别称为主机控制器(Host Controller)和USB设备控制器(UDC),每条总线上只有一个主机控制器,负责协调主机和设备间的通信,设备不能主动向主机发送任何消息。如图:

linux_usb_driver

1.1 主机侧

从主机侧去看,在Linux驱动中,处于USB驱动最底层的是USB主机控制器硬件,在其上的是USB主机控制器驱动,在主机控制器驱动上的为USB核心层,再上层为USB设备驱动层。因此,在主机侧的层级结构中,要实现的USB驱动包括:USB主机控制器驱动和USB设备驱动。
USB核心层向上为USB设备驱动提供编程接口,向下为USB主机控制器驱动提供编程接口,维护真个系统的USB设备信息,完成设备热插拔控制、总线数据传输控制等。
USB设备驱动负责驱动具体的设备,例如U盘,鼠标等设备。USB设备驱动既可以注册成某个类型的设备驱动,例如输入子系统,此时的主设备号依据具体的子系统而定;又可以作为一个独立的USB设备注册进系统,这时的主设备号是180(USB_MAJOR)。

USB主机控制器驱动的代码位于:driver/usb/host,根据具体的硬件实现一个该硬件对应的主机控制器驱动的文件。
USB核心层代码位于:driver/usb/core。
USB设备驱动代码依据具体的设备放在对应的目录下。

1.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.设备、配置、接口、端点、端点0

在USB设备的逻辑组织中包含了设备、配置、接口、端点四个层次。

2.1 设备

一个设备里包含了不同级别的配置,可以有一个或者多个配置。设备描述符描述了这个设备。
在linux中,结构体usb_device_descriptor对应于协议中的设备描述符。

struct usb_device_descriptor {
    __u8  bLength;                           /* 描述符长度 */
    __u8  bDescriptorType;                   /* 描述符类型 设备描述符类型值是1 */

    __le16 bcdUSB;                           /* USB版本号 */
    __u8  bDeviceClass;                      
  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值