RK3588 kernel-6.1:drivers/usb/misc 功能与实现要点

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-audiouvcvideo 等。
  • 板级/芯片配套:板载 Hub 上电、HSIC 桥片寄存器、Microchip Hub SMBus 配置等。
  • 测试与认证usbtestEHSETLink Layer Test 等配合特定固件或治具。

它们共享内核 USB 核心 APIstruct usb_driverusb_submit_urbusb_autopm),但彼此之间 无统一框架,逐一阅读 probe/ioctl/sysfs 即可。


2. 按功能分类(与 Makefile 对应)

2.1 固件加载 / 二次枚举

选项 文件 要点
USB_EMI26/USB_EMI62 emi26.cemi62.c Emagic 音频接口:下载固件后设备变为标准 USB Audio,由 snd-usb-audio 接管
USB_ISIGHTFW isight_firmware.c Apple iSight:加载固件后可供 UVC 栈使用
USB_EZUSB_FX2 ezusb.c Cypress FX/FX2:Vendor 控制传输写 RAMIHEX 固件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 离散板载 Hubregulator/GPIO 复位、上电时序;通过 usb_device_driver 等与 HCD 协作延迟绑定(见 linux/usb/onboard_hub.h
USB_HUB_USB251XB usb251xb.c Microchip USB251xI2C/SMBus 配置
USB_HSIC_USB3503/USB4604 usb3503.cusb4604.c SMSC HSIC→USB2.0 等:regmap/I2C

2.4 字符设备 / 传感器 / 趣味硬件

iowarrior.cldusb.c(中断传输传感器)、legousbtower.cadutux.cyurex.cidmouse.c(指纹)、usbsevseg.cusblcd.ccytherm.ccypress_cy7c63.ctrancevibrator.c 等:多为 misc/cdevsysfs,协议各异。

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 普通设备驱动

  1. MODULE_DEVICE_TABLE(usb, ...) + usb_driverprobeusb_alloc_coherent/usb_submit_urb 或同步 usb_control_msg
  2. 电源usb_mark_last_busyusb_autopm(若支持运行时挂起)。
  3. 用户态接口misc_registercdevdebugfs/sysfs

3.2 固件型(emi / isight / ezusb)

probe 中检测 RAM/CPU 停机状态Vendor 下载usb_reset_device 或期待 重新枚举probe 返回,后续由 类驱动 绑定。

3.3 测试型(usbtest)

绑定特定测试设备 VID/PID(或 GENERIC + 模块参数);ioctl 解析 usbtest_param,在内核构造 长度/队列/SGurb,统计耗时并回报。

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_TESTEHSET/LVS 多用于 HCD/IP 验证,产品内核可裁掉。
  • 其余条目多为 特定外设或架构(如 USB_QCOM_EUDBRCM_USB_PINMAP),与 RK3588 无必然关系

5. 小结

drivers/usb/misc 不是单一子系统,而是 按 Kconfig 粒度可选的一兜小型 usb_driver:从 固件加载合规测试Hub 初始化各种小众 USB 硬件。理解方式:锁定 CONFIG_* → 打开对应 .cusb_driver 表与 probe 主路径,不必强求统一架构。

文章互动

阅读 --

留言

0 条留言

正在加载留言…