drivers/usb/gadget 源码目录、构建配置与模块索引

drivers/usb/gadget 源码目录、构建配置与模块索引

1. 目录定位

drivers/usb/gadget实现 Linux 作为 USB 外设(Device/Peripheral) 时的软件栈。它不依赖 Host 侧CONFIG_USB,分为四层:

1
2
3
4
5
用户态 (ConfigFS / FunctionFS / /dev节点)
-> Function 驱动 (function/)
-> libcomposite (composite/configfs/epautoconf)
-> UDC 框架 (udc/core.c)
-> UDC 硬件驱动 (udc/*、或树外如 dwc3 gadget)

RK3588 的 UDC 硬件驱动不在本目录,而在drivers/usb/dwc3(DWC3 gadget 模式);本目录udc/下的 SoC 驱动均为其它平台。

2. 构建结构

顶层Makefile

1
2
3
CONFIG_USB_LIBCOMPOSITE -> libcomposite.o
= usbstring + config + epautoconf + composite + functions + configfs + u_f
CONFIG_USB_GADGET -> udc/ function/ legacy/

USB_LIBCOMPOSITEUSB_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.cf_tcm.c BOT 存储 / UAS target
串口类 u_serial.cf_acm.cf_serial.cf_obex.c /dev/ttyGS*
网络类 u_ether.cf_ecm.cf_ncm.cf_rndis.c+rndis.cf_eem.cf_subset.cf_phonet.c usb0网络接口
音频 u_audio.cf_uac1.cf_uac2.cf_uac1_legacy.c+u_uac1_legacy.c 虚拟 ALSA 声卡
视频 f_uvc.cuvc_v4l2.cuvc_video.cuvc_queue.cuvc_configfs.c V4L2 输出设备
其它 f_hid.cf_midi.cf_printer.cf_sourcesink.c/f_loopback.c HID/MIDI/打印/测试
本项目自定义 f_bytrans.c 字节透传,/dev/msgtrans*,无条件obj-m
本项目自定义 f_audio_raw.c 原始音频传输,kfifo+字符设备,无条件obj-m

f_bytrans.cf_audio_raw.c是本树 2024 年新增的项目私有 Function(function/Makefile第 53-56 行直接obj-m,不受 Kconfig 控制),上游内核不存在。

6. legacy/ 目录

预组装的一体化 gadget 模块(g_serialg_etherg_mass_storageg_ffsg_zerog_webcamraw_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 行为。

文章互动

阅读 --

留言

0 条留言

正在加载留言…