drivers/usb/gadget 源码目录、构建配置与模块索引
1. 目录定位
drivers/usb/gadget实现 Linux 作为 USB 外设(Device/Peripheral) 时的软件栈。它不依赖 Host 侧CONFIG_USB,分为四层:
1 | 用户态 (ConfigFS / FunctionFS / /dev节点) |
RK3588 的 UDC 硬件驱动不在本目录,而在drivers/usb/dwc3(DWC3 gadget 模式);本目录udc/下的 SoC 驱动均为其它平台。
2. 构建结构
顶层Makefile:
1 | CONFIG_USB_LIBCOMPOSITE -> libcomposite.o |
USB_LIBCOMPOSITE由USB_CONFIGFS或各 legacy gadget select,并强制CONFIGFS_FS。
3. 顶层公共文件
| 文件 | 职责 |
|---|---|
composite.c |
Composite 框架:设备/配置/接口描述符、EP0 setup 分发、bind/unbind |
configfs.c |
ConfigFS 组装 gadget、UDC 绑定、Android UEVENT 扩展 |
functions.c |
usb_function_driver注册表、按名称查找 function |
epautoconf.c |
端点自动分配(usb_ep_autoconfig*) |
config.c |
描述符拷贝/组合辅助 |
usbstring.c |
UTF-8 到 UTF-16LE 字符串描述符 |
u_f.c |
alloc_ep_req()等 function 公共辅助 |
4. udc/ 目录
| 文件 | 职责 |
|---|---|
udc/core.c |
UDC 类核心:gadget 设备模型、/sys/class/udc、driver绑定、usb_ep_*/usb_gadget_* API |
udc/dummy_hcd.c |
软件模拟 HCD+UDC,本机回环测试 |
udc/trace.c |
tracepoint |
其余 udc/*.c |
各 SoC/PCI UDC(Renesas、Atmel、Aspeed vhub、BDC 等),RK3588 不使用 |
5. function/ 目录
| 分类 | 文件 | 说明 |
|---|---|---|
| 用户态桥 | f_fs.c |
FunctionFS,ADB 等用户态协议 |
| 存储 | f_mass_storage.c + storage_common.c、f_tcm.c |
BOT 存储 / UAS target |
| 串口类 | u_serial.c、f_acm.c、f_serial.c、f_obex.c |
/dev/ttyGS* |
| 网络类 | u_ether.c、f_ecm.c、f_ncm.c、f_rndis.c+rndis.c、f_eem.c、f_subset.c、f_phonet.c |
usb0网络接口 |
| 音频 | u_audio.c、f_uac1.c、f_uac2.c、f_uac1_legacy.c+u_uac1_legacy.c |
虚拟 ALSA 声卡 |
| 视频 | f_uvc.c、uvc_v4l2.c、uvc_video.c、uvc_queue.c、uvc_configfs.c |
V4L2 输出设备 |
| 其它 | f_hid.c、f_midi.c、f_printer.c、f_sourcesink.c/f_loopback.c |
HID/MIDI/打印/测试 |
| 本项目自定义 | f_bytrans.c |
字节透传,/dev/msgtrans*,无条件obj-m |
| 本项目自定义 | f_audio_raw.c |
原始音频传输,kfifo+字符设备,无条件obj-m |
f_bytrans.c与f_audio_raw.c是本树 2024 年新增的项目私有 Function(function/Makefile第 53-56 行直接obj-m,不受 Kconfig 控制),上游内核不存在。
6. legacy/ 目录
预组装的一体化 gadget 模块(g_serial、g_ether、g_mass_storage、g_ffs、g_zero、g_webcam、raw_gadget、GadgetFS inode.c等)。现代系统一般用 ConfigFS 替代;raw_gadget用于 fuzzing/协议实验。
7. Rockchip defconfig 配置矩阵
| 配置 | linux | electric | cpcem |
|---|---|---|---|
USB_GADGET |
y | y | y |
USB_GADGET_VBUS_DRAW |
500 | 500 | 500 |
USB_CONFIGFS |
y | y | y |
USB_CONFIGFS_UEVENT |
y | y | y |
USB_CONFIGFS_ACM |
y | y | y |
USB_CONFIGFS_MASS_STORAGE |
y | y | y |
USB_CONFIGFS_F_FS |
y | y | y |
USB_CONFIGFS_F_UVC |
y | - | - |
USB_CONFIGFS_F_UAC1/UAC2/HID |
- | - | y |
USB_DWC3 |
y | y | y |
所有配置都未启用 legacy gadget,运行时通过 ConfigFS 组装。
8. 阅读顺序
建议:udc/core.c(设备模型)→ composite.c(EP0/描述符)→ configfs.c(用户组装)→ 目标 function → RK3588 DWC3 集成。只看 function 而不懂 composite 的 setup 分发,无法解释描述符和 SET_ALT 行为。
正在加载留言…