iTOP-4412- 驱动-usb 文档 04- 主控制器和驱动框架简介
在学习 USB 驱动的过程中,虽然 USB 的内部驱动不需要我们去写,但是还是需要对其有
个大概的了解。
1 USB 驱动架构简介
USB 是一种主从结构的系统。主机叫做 Host,从机叫做 Device;开发板作为 USB host
端,USB 鼠标、USB 键盘、USB-WIFI 等等称为设备端;通常,作为 USB device 的设备被称
为 Gadget。
如下图所示,是 USB 驱动架构简略图。在主机端(这里需要注意的是,内部驱动和外部
驱动都是属于主机端)。
2 USB 主控制器
本节简单了解一下 4412 的主控制驱动。
2.1 USB 主控制器的功能
USB 主控制器是集成到片上系统的,例如,4412 开发板,主控制器是在 4412 芯片上,
代码也是集成在三星原厂提供的内核中的。主控制器主要有一下功能:
1. 解析和维护 URB
2. 负责不同 USB 传输类型的调度工作
3. 负责 USB 数据的实际传输工作
4. 实现虚拟 USB HUB(集线器)的功能
2.2 了解 USB 主控制器驱动
USB 的 USB CORE 在内核源码“drivers/usb/core/”中,如下图所示,可以看到和各种
功能对应的内核源码。其中有,USBCORE 核心代码,hub、urb 等等。这些都是具体平台无
关的代码,在任意平台中都是通用的核心层代码,给外部驱动提供对应的 API。
至此,我们完成分析了主控制的设备注册和驱动注册。具体实现代码更加复杂,但是这部
分不需要我们去做,有原厂会提供做好的驱动。
本文档只是让大家对主控制驱动有个感性的认识,在后面文档中的设备描述符、URB(请
求块)才是驱动学习的重点。
另外还有具体的 USB 驱动的移植,也比主机驱动和 USB 核心层驱动更重要,希望大家不
要花费过多的时间去研究主控制驱动和 USB 核心层代码。而是要在主机驱动和核心层驱动的
基础上,移植我们在项目和工程中需要的外围模块。到后面,大家会发现,在移植和使用
USB 外围设备驱动的时候,完全不需要用到 USB 主控制器、USB 驱动框架等等知识。