源码目录、构建配置与对象模型

源码目录、构建配置与对象模型

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_devicestub_privbus_id_priv
vhci_hcd.c 虚拟HCD、Root Hub、端口、enqueue/dequeue、平台设备
vhci_sysfs.c attach/detach/status/nports
vhci_tx.cvhci_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.cvudc_tx.c Host PDU收发
vudc_transfer.c URB与gadget request撮合、定时调度
vudc.h VUDC、endpoint、request和传输对象

2. Makefile

1
2
3
4
5
usbip-core = usbip_common + usbip_event
usbip-host = stub_dev + stub_main + stub_rx + stub_tx
vhci-hcd = vhci_sysfs + vhci_tx + vhci_rx + vhci_hcd
usbip-vudc = vudc_dev + vudc_sysfs + vudc_tx + vudc_rx
+ vudc_transfer + vudc_main

CONFIG_USBIP_DEBUG为所有本目录源文件增加-DDEBUG

3. Kconfig

配置 类型/依赖 说明
USBIP_CORE tristate,依赖NET select USB_COMMONSGL_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对象

  • vudcusb_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_*。源码存在不代表镜像包含模块;需检查最终.configmodules.dep,产品配置还应显式评估安全影响。

文章互动

阅读 --

留言

0 条留言

正在加载留言…