You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用libusb模拟USB热插拔移除事件?(测试与调试)

模拟USB热插拔移除事件测试libusb应用的实操方案

一、本地手动测试方案

Linux平台

  • usbip远程设备模拟
    找一台闲置Linux机器作为USB服务器,导出闲置USB设备:

    # bus-id通过lsusb查询,格式如1-2
    usbip bind -b 1-2
    # 启动usbip服务
    sudo systemctl start usbipd
    

    在测试机器上挂载该远程设备:

    usbip attach -r <服务器IP> -b 1-2
    

    模拟移除时,断开连接触发热插拔事件:

    # 先通过usbip list -l查询端口号,如001
    usbip detach -p 001
    
  • dummy_hcd虚拟USB设备
    加载内核模块创建虚拟USB控制器:

    sudo modprobe dummy_hcd
    

    系统生成虚拟USB设备后,执行以下命令模拟移除:

    # 设备路径通过lsusb查询,如/sys/bus/usb/drivers/dummy_hcd/1-1
    echo 1 > /sys/bus/usb/drivers/dummy_hcd/unbind
    

macOS平台

  • 磁盘镜像模拟USB驱动器
    创建虚拟磁盘镜像:

    hdiutil create -size 100m -fs HFS+ -volname "TestUSB" test.dmg
    

    挂载后,libusb可识别对应的虚拟USB存储设备:

    hdiutil attach test.dmg
    

    模拟移除时卸载镜像触发事件:

    hdiutil detach /Volumes/TestUSB
    
  • IOKit虚拟USB设备
    编写简单命令行工具调用IOKit API创建虚拟USB设备,之后通过IOServiceTerminate注销设备服务,直接触发libusb的热插拔回调。

二、自动化测试(GitHub共享运行器场景)

核心方案:Mock libusb API(单元测试首选)

直接在测试代码中Mock libusb关键API,无需依赖真实USB设备:

  • 用测试框架(如Google Test、Catch2)替换libusb_hotplug_register_callback,保存应用注册的回调函数
  • 测试移除事件时,手动调用该回调函数,传入LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT事件和模拟的设备句柄
  • 验证应用执行回调后的状态(如资源清理是否完成、日志输出是否符合预期)

Linux运行器实操

在GitHub Linux Runner上预装usbip,配合dummy_hcd做集成测试:

# 加载虚拟USB模块
sudo modprobe dummy_hcd
# 绑定并导出虚拟设备
bus_id=$(lsusb | grep dummy | awk '{print $2"-"$4}' | sed 's/:$//')
usbip bind -b $bus_id
sudo systemctl start usbipd
# 本地挂载虚拟设备
usbip attach -r 127.0.0.1 -b $bus_id
# 启动应用监听后,执行移除操作
port=$(usbip list -l | grep $bus_id | awk '{print $1}' | sed 's/^.*://')
usbip detach -p $port
# 验证应用响应是否正确

macOS MacStadium运行器实操

用hdiutil做集成测试,步骤简单且无需额外权限:

# 创建并挂载虚拟磁盘
hdiutil create -size 100m -fs HFS+ -volname "TestUSB" test.dmg
hdiutil attach test.dmg
# 启动应用后触发移除
hdiutil detach /Volumes/TestUSB
# 验证应用是否正确处理事件

三、关键注意事项

  • 确保应用的libusb_handle_events事件循环正常运行,否则热插拔回调无法触发
  • Mock API适合单元测试,模拟真实设备的方案更贴近生产环境,适合集成测试
  • GitHub运行器上执行内核相关操作需要sudo权限,macOS部分操作已由共享运行器预设配置

内容的提问来源于stack exchange,提问作者Michael Altfield

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:01:01