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

如何将同PID/VID的单个USB软件无线电设备挂载到LXC容器

如何将同PID/VID的单个USB软件无线电设备挂载到LXC容器

问题背景

我在Linux服务器上接了两台软件无线电设备,它们的产品ID(productid)和厂商ID(vendorid)完全相同,同时服务器上运行着一个LXC容器。我希望只把其中一台设备挂载到容器里,不让容器访问另一台——毕竟我要给不太信任的用户开放容器的访问权限,但不想让他们接触到LXD主机,也不想让他们看到两台设备。

我已做过的调试步骤

先做了个 sanity check 确认LXC的USB挂载功能正常:

  • 先把两台设备都挂载到容器:
    lxc config device add my-container usrpUSB usb productid=6010 vendorid=0403
    
  • 运行第三方刷写工具,能正常操作设备,没问题;
  • 移除容器的USB设备:
    lxc config device remove my-container usrpUSB
    
  • 再运行刷写工具,果然失败了,说明LXC的USB挂载功能是正常的。

之后我想搞清楚LXC挂载设备时改了容器里哪些文件,尝试手动映射:

  • 挂载USB后,在容器里执行find / -ls > /tmp/find_with_usb.txt;
  • 移除USB后,再执行find / -ls > /tmp/find_without_usb.txt;
  • 对比两个文件,发现多了上百个文件,但都不是/dev/ttyUSB*这类字符设备,大多在/var/lib/lxcfs和/sys/fs/cgroup目录下,不清楚这些在LXD主机上的来源,所以手动路径/字符设备映射这条路走不通。

解决方案:通过设备序列号(serial)区分挂载

其实LXC的USB设备添加命令支持通过设备序列号来精准指定要挂载的设备——毕竟同PID/VID的设备,序列号肯定是唯一的。

步骤如下:

  1. 先在LXD主机上找到两台设备的序列号:
    可以用lsusb -v命令,找到对应idVendor 0x0403和idProduct 0x6010的设备,查看iSerial字段的值,就是设备的序列号。
    或者用更简洁的命令直接过滤:

    lsusb -d 0403:6010 -v | grep iSerial
    

    记下你想挂载的那台设备的序列号。

  2. 使用序列号精准添加USB设备到容器:
    把命令改成带serial参数的形式,比如假设目标设备序列号是ABC123:

    lxc config device add my-container usrpUSB usb productid=6010 vendorid=0403 serial=ABC123
    

    这样就只会把序列号为ABC123的那台软件无线电设备挂载到容器里,另一台会留在主机上,容器无法访问。

  3. 验证是否正确挂载:
    进入容器后,用lsusb命令查看,应该只能看到指定的那台设备;再运行刷写工具,确认只能操作这一台设备。

备注:内容来源于stack exchange,提问作者EdwardTeach

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 14:48:16