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 软件栈的层次结构:

USB Gadget 软件栈层次结构 用户空间 (User Space) 应用程序 / libusb / V4L2 用户态工具 Gadget Function 层 UVC Function / ECM Function / Mass Storage Function Gadget API / ConfigFS 层 配置绑定 / 端点管理 / 字符串描述符 UDC 驱动层 (硬件抽象) DWC3 / ChipIdea / FSL 等控制器驱动
实战要点: 本课程重点关注的 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 摄像头数据流的硬件通路:

RK3399 USB Gadget 摄像头数据流硬件通路 摄像头传感器 OV5640 / IMX219 MIPI CSI 接口 4-lane / 1.5Gbps ISP 图像处理 去噪 / 缩放 / 格式转换 DDR 内存 V4L2 帧缓冲区 DWC3 控制器 USB 3.0 / OTG USB Type-C 数据流方向: Sensor → ISP → DDR → DWC3 → Host
平台选择理由:
  • 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 控制器类型和视频输入接口的不同,为后续具体移植操作提供平台依据。