1. 课程导论与ARM平台概述
1.1 USB Gadget 框架简介
USB Gadget 是 Linux 内核中用于实现设备端(Device Side)USB 功能的软件框架。与主机端(Host Side)的 USB 控制器驱动不同,Gadget 框架允许嵌入式设备模拟成各种 USB 外设,例如 U 盘、串口、以太网卡或摄像头。
核心概念: Gadget 框架将硬件控制器抽象为 UDC(USB Device Controller),上层通过 Function 驱动实现具体功能,中间由 ConfigFS / GadgetFS 提供用户空间配置接口。
下图展示了 USB Gadget 软件栈的层次结构:
实战要点: 本课程重点关注的 UVC(USB Video Class) Function 位于 Gadget Function 层。它负责将 V4L2 视频设备的数据流封装成标准的 USB 视频帧格式,使主机端无需安装额外驱动即可识别为摄像头。
1.2 ARM Cortex-A 系列处理器特点
ARM Cortex-A 系列是面向应用处理器的核心架构,广泛应用于嵌入式 Linux 和移动计算领域。其关键特性如下表所示:
| 特性 | Cortex-A7 | Cortex-A53 | Cortex-A72 |
|---|---|---|---|
| 架构 | ARMv7-A | ARMv8-A (64位) | ARMv8-A (64位) |
| 流水线 | 8级,顺序 | 8级,顺序 | 15级,乱序 |
| L1缓存 | 32KB I / 32KB D | 32KB I / 32KB D | 48KB I / 32KB D |
| 典型频率 | 1.0 - 1.5 GHz | 1.2 - 2.0 GHz | 1.8 - 2.5 GHz |
| USB支持 | 集成 DWC2/3 | 集成 DWC3 | 集成 DWC3 + PCIe |
| 功耗 | 超低 (< 0.5W) | 低 (< 2W) | 中高 (3-8W) |
移植注意事项: Cortex-A7 和 A53 通常采用 顺序执行 流水线,在 USB 中断处理路径中应避免过多乱序优化;Cortex-A72 的乱序执行能力更强,但需要关注缓存一致性(Cache Coherency)问题,特别是在 DMA 传输场景下。
ARM Cortex-A 系列处理器的内存架构对 USB Gadget 性能有直接影响:
- L1/L2 缓存层次: USB 数据流通常经过 DMA 直接写入内存,CPU 需要保证缓存与内存的一致性。ARMv7 使用
DMA API (dma_map_single)进行缓存同步,ARMv8 则依赖IOMMU/SMMU进行地址转换。 - GIC 中断控制器: USB 中断通过 GIC(Generic Interrupt Controller)分发。Cortex-A7 使用 GIC-400,Cortex-A53/A72 使用 GIC-500 或 GIC-600,中断亲和性设置影响多核负载均衡。
- 内存带宽: 摄像头数据流(如 1080p@30fps 约需 90MB/s)对内存带宽敏感,需确保总线仲裁不成为瓶颈。
1.3 常见 ARM 开发板介绍
本课程以两款主流 ARM 开发板作为移植目标平台,其硬件配置对比如下:
| 参数 | i.MX6Q (NXP) | RK3399 (Rockchip) |
|---|---|---|
| CPU | 4× Cortex-A9 @ 1.2GHz | 2× Cortex-A72 + 4× Cortex-A53 |
| GPU | Vivante GC2000 | Mali-T860 MP4 |
| USB控制器 | 1× OTG (ChipIdea) + 1× Host | 1× OTG (DWC3) + 2× Host (DWC2) |
| 内存 | 1GB DDR3 | 2/4GB LPDDR4 |
| 视频输入 | 并行CSI (8/16-bit) | MIPI CSI (4-lane) + 并行 |
| 内核版本 | 4.14 / 5.4 (LTS) | 4.19 / 5.10 (LTS) |
| Gadget驱动 | chipidea.ko / ci_hdrc.ko | dwc3.ko / dwc3-of-simple.ko |
下图展示了 RK3399 平台 USB Gadget 摄像头数据流的硬件通路:
平台选择理由:
- i.MX6Q: 经典 Cortex-A9 平台,ChipIdea UDC 驱动成熟稳定,适合学习 USB Gadget 基础原理和中断处理流程。
- RK3399: 高性能 big.LITTLE 架构,DWC3 控制器支持 USB 3.0,适合验证高带宽 UVC 摄像头(如 4K@30fps)的 Gadget 实现。
1.4 本章小结
本章建立了 USB Gadget 摄像头驱动移植的知识框架:
- 理解了 USB Gadget 框架 的四层结构(用户空间 → Function → API → UDC),明确了 UVC Function 在本课程中的核心地位。
- 掌握了 ARM Cortex-A 系列 处理器的缓存、中断和内存带宽特性对 USB 性能的影响,为后续驱动优化打下基础。
- 熟悉了 i.MX6Q 和 RK3399 两款开发板的硬件差异,特别是 USB 控制器类型和视频输入接口的不同,为后续具体移植操作提供平台依据。