源码目录、构建配置与对象模型
1. 源文件
drivers/usb/usbip是扁平目录,共22个文件、约8772行。文件集合与标准Linux 6.1 USB/IP实现一致,未发现Rockchip专用源文件、版权标记或平台条件分支。
| 文件 | 职责 |
|---|---|
usbip_common.[ch] |
协议结构、PDU/URB转换、字节序、socket收包、ISO辅助、调试 |
usbip_event.c |
全局单线程event workqueue |
stub_main.c |
stub模块入口、busid表、driver sysfs |
stub_dev.c |
USB device driver、probe/disconnect、socket sysfs、EH回调 |
stub_rx.c |
接收SUBMIT/UNLINK,构造并提交真实URB |
stub_tx.c |
URB completion、返回PDU和unlink结果 |
stub.h |
stub_device、stub_priv、bus_id_priv |
vhci_hcd.c |
虚拟HCD、Root Hub、端口、enqueue/dequeue、平台设备 |
vhci_sysfs.c |
attach/detach/status/nports |
vhci_tx.c、vhci_rx.c |
VHCI请求发送与完成接收 |
vhci.h |
VHCI controller/device/request对象 |
vudc_main.c |
VUDC模块入口和虚拟controller实例 |
vudc_dev.c |
gadget/endpoint ops及UDC注册 |
vudc_sysfs.c |
socket、状态和设备描述符接口 |
vudc_rx.c、vudc_tx.c |
Host PDU收发 |
vudc_transfer.c |
URB与gadget request撮合、定时调度 |
vudc.h |
VUDC、endpoint、request和传输对象 |
2. Makefile
1 | usbip-core = usbip_common + usbip_event |
CONFIG_USBIP_DEBUG为所有本目录源文件增加-DDEBUG。
3. Kconfig
| 配置 | 类型/依赖 | 说明 |
|---|---|---|
USBIP_CORE |
tristate,依赖NET |
select USB_COMMON、SGL_ALLOC |
USBIP_HOST |
tristate,依赖core和USB |
物理设备服务端 |
USBIP_VHCI_HCD |
tristate,依赖core和USB |
客户端 |
USBIP_VHCI_HC_PORTS |
1–15,默认8 | 每个USB2/USB3 RH的端口数 |
USBIP_VHCI_NR_HCS |
1–128,默认1 | 虚拟controller数量 |
USBIP_VUDC |
tristate,依赖core和USB_GADGET |
软件设备服务端 |
USBIP_DEBUG |
bool | 编译调试消息 |
每个VHCI controller实际包含一对primary/shared HCD,即一个USB2 Root Hub和一个USB3 Root Hub,各有HC_PORTS个端口。
4. 公共对象
struct usbip_device嵌入stub、VHCI和VUDC实例,统一保存:
- side和status;
- status spinlock;
- sysfs路径mutex;
- userspace传入的sockfd及内核socket;
- RX/TX kthread;
- event位图和等待队列;
- shutdown/reset/unusable回调;
- 可选KCOV remote handle。
它不是Linux device model对象,而是三类前端共享的连接状态容器。
5. Stub对象
stub_device:真实usb_device、devid、请求链表和TX waitqueue;stub_priv:一次远端SUBMIT,保存一个或多个本地URB、SG及完成计数;stub_unlink:待发送的UNLINK回复;bus_id_priv:最多16项的可导出busid表。
6. VHCI对象
vhci:一对USB2/USB3 HCD及全局锁;vhci_hcd:每个HCD的port status、seqnum和vdev数组;vhci_device:一个远端设备/Root Hub端口/连接;vhci_priv:URB与USB/IP seqnum的映射;vhci_unlink:取消请求及目标seqnum。
7. VUDC对象
vudc:usb_gadget、gadget driver、endpoint集合和连接状态;vep:虚拟usb_ep;vrequest:虚拟usb_request;urbp:远端Host发来的URB;tx_item:SUBMIT或UNLINK完成队列项;transfer_timer:模拟帧推进和传输撮合。
VUDC模块参数num默认1,用于创建多个usbip-vudc.N平台设备。
8. 本树构建状态
arch/arm64/configs中的Rockchip defconfig未发现CONFIG_USBIP_*。源码存在不代表镜像包含模块;需检查最终.config和modules.dep,产品配置还应显式评估安全影响。
正在加载留言…