RK3588 kernel-6.1:drivers/usb/misc 功能与实现要点
源码基准:rk3588/kernel-6.1/drivers/usb/misc/。该目录在 drivers/usb/Makefile 中作为 misc 子目录引入,收录 不适配 storage/serial/class 等大类 的杂项 USB 设备或辅助代码。
官方说明见各 Kconfig 条目及 Documentation/usb/ 中与测试、EZUSB、usbmon 等交叉引用的文档。
1. 目录职责(为何存在)
杂项驱动的共同点通常是:
- 非标准类绑定:不走单一 USB Class(或仅用_VENDOR 协议),需要专用
usb_driver+usb_control_msg/usb_bulk_msg或少量urb。 - 辅助其它驱动:例如 固件下载后重新枚举,交给 snd-usb-audio、uvcvideo 等。
- 板级/芯片配套:板载 Hub 上电、HSIC 桥片寄存器、Microchip Hub SMBus 配置等。
- 测试与认证:usbtest、EHSET、Link Layer Test 等配合特定固件或治具。
它们共享内核 USB 核心 API(struct usb_driver、usb_submit_urb、usb_autopm),但彼此之间 无统一框架,逐一阅读 probe/ioctl/sysfs 即可。
2. 按功能分类(与 Makefile 对应)
2.1 固件加载 / 二次枚举
| 选项 | 文件 | 要点 |
|---|---|---|
USB_EMI26/USB_EMI62 |
emi26.c、emi62.c |
Emagic 音频接口:下载固件后设备变为标准 USB Audio,由 snd-usb-audio 接管 |
USB_ISIGHTFW |
isight_firmware.c |
Apple iSight:加载固件后可供 UVC 栈使用 |
USB_EZUSB_FX2 |
ezusb.c |
Cypress FX/FX2:Vendor 控制传输写 RAM、IHEX 固件、8051 复位位;导出 ezusb_* 供串口等驱动复用 |
2.2 主机侧测试 / USB-IF 流程
| 选项 | 文件 | 要点 |
|---|---|---|
USB_TEST |
usbtest.c |
与 linux-usb.org/usbtest 固件配合:ioctl USBTEST_REQUEST_* 跑批量/等时/scatter、队列深度等回归 |
USB_EHSET_TEST_FIXTURE |
ehset.c |
Embedded Host EHSET 治具:枚举特定 VID/PID 后令下游口进入电气测试模式 |
USB_LINK_LAYER_TEST |
lvstest.c |
SuperSpeed Link Layer Test 专用流量 |
2.3 Hub / 板级 USB 扩展(与 RK3588 板级可能相关)
| 选项 | 文件 | 要点 |
|---|---|---|
USB_ONBOARD_HUB |
onboard_usb_hub.c(+ onboard_usb_hub_pdevs.c) |
离散板载 Hub:regulator/GPIO 复位、上电时序;通过 usb_device_driver 等与 HCD 协作延迟绑定(见 linux/usb/onboard_hub.h) |
USB_HUB_USB251XB |
usb251xb.c |
Microchip USB251x:I2C/SMBus 配置 |
USB_HSIC_USB3503/USB4604 |
usb3503.c、usb4604.c |
SMSC HSIC→USB2.0 等:regmap/I2C |
2.4 字符设备 / 传感器 / 趣味硬件
含 iowarrior.c、ldusb.c(中断传输传感器)、legousbtower.c、adutux.c、yurex.c、idmouse.c(指纹)、usbsevseg.c、usblcd.c、cytherm.c、cypress_cy7c63.c、trancevibrator.c 等:多为 misc/cdev 或 sysfs,协议各异。
2.5 熵 / 显示 / 电源
| 选项 | 文件 | 要点 |
|---|---|---|
USB_CHAOSKEY |
chaoskey.c |
硬件 RNG:对接 hwrng/entropy |
USB_APPLEDISPLAY |
appledisplay.c |
Cinema Display 背光:backlight class |
USB_SISUSBVGA |
sisusbvga/ |
USB→VGA(SiS):子目录独立 Kconfig/Makefile |
APPLE_MFI_FASTCHARGE |
apple-mfi-fastcharge.c |
MFi 快充开关:power_supply |
USB_QCOM_EUD |
qcom_eud.c |
Qualcomm EUD:调试外设、USB_ROLE_SWITCH、VBUS 事件 |
2.6 其它
| 选项 | 文件 | 要点 |
|---|---|---|
USB_FTDI_ELAN |
ftdi-elan.c |
ELAN U132 等 USB-CardBus 适配:与 USB_U132_HCD(host 目录)配合 |
USB_USS720 |
uss720.c |
USB-并行打印桥等 |
BRCM_USB_PINMAP |
brcmstb-usb-pinmap.c |
Broadcom STB:USB 信号旁路到 GPIO |
3. 典型实现模式(原理)
3.1 普通设备驱动
MODULE_DEVICE_TABLE(usb, ...)+usb_driver:probe里usb_alloc_coherent/usb_submit_urb或同步usb_control_msg。- 电源:
usb_mark_last_busy、usb_autopm(若支持运行时挂起)。 - 用户态接口:
misc_register、cdev或 debugfs/sysfs。
3.2 固件型(emi / isight / ezusb)
probe 中检测 RAM/CPU 停机状态 → Vendor 下载 → usb_reset_device 或期待 重新枚举 → probe 返回,后续由 类驱动 绑定。
3.3 测试型(usbtest)
绑定特定测试设备 VID/PID(或 GENERIC + 模块参数);ioctl 解析 usbtest_param,在内核构造 长度/队列/SG 等 urb,统计耗时并回报。
3.4 板载 Hub(onboard_usb_hub)
Platform(OF)描述 vdd、reset GPIO、延时 → onboard_hub_power_on 满足上电时序 → 待 USB 子系统发现下游 usb_device 后再挂接 usb_device_driver,避免 Hub 未供电时无效枚举。
4. 与 RK3588 的关联(阅读提示)
- 常见可能启用:
USB_ONBOARD_HUB(板载 RTS5411 等)、USB_HUB_USB251XB/ HSIC 桥(视 BOM)。 - 开发与认证:
USB_TEST、EHSET/LVS 多用于 HCD/IP 验证,产品内核可裁掉。 - 其余条目多为 特定外设或架构(如
USB_QCOM_EUD、BRCM_USB_PINMAP),与 RK3588 无必然关系。
5. 小结
drivers/usb/misc 不是单一子系统,而是 按 Kconfig 粒度可选的一兜小型 usb_driver:从 固件加载、合规测试、Hub 初始化 到 各种小众 USB 硬件。理解方式:锁定 CONFIG_* → 打开对应 .c 看 usb_driver 表与 probe 主路径,不必强求统一架构。
正在加载留言…