文章目录

  • 前言
  • Windows主机配置
  • 安装usbipd-win
  • 使用
  • Docker的容器配置
  • 安装usbip
  • 使用usbip连接主机分享的USB设备
  • 参考


前言

使用Docker来配置嵌入式编译环境无疑为开发者们带来了极大的便利。Docker以其轻量级、可移植和隔离性强的特点,使得嵌入式编译环境的搭建和管理变得简单而高效。通过Docker,我们可以轻松地创建、配置和部署编译环境,而无需担心这些操作会对主机系统造成过多的负担,从而保持主机系统的清爽和高效。

然而,在Windows环境中使用Docker时,我们可能会遇到一个挑战:Docker容器无法直接访问主机的USB设备。这对于需要连接USB设备进行开发或测试的嵌入式项目来说,无疑是一个很大的限制。在传统的开发环境中,我们通常会将USB设备直接连接到主机上,并通过主机上的软件或驱动程序进行访问。但在Docker容器中,由于隔离性的限制,我们无法直接访问主机的USB设备。

为了解决这个问题,我们可以考虑使用usbip(USB over IP)这一技术。usbip是一种允许我们通过网络共享USB设备的解决方案。通过usbip,我们可以将主机上的USB设备虚拟化为一个网络设备,并通过网络将其共享给远程机器或Docker容器。这样,即使USB设备没有直接连接到Docker容器所在的主机上,我们也可以通过网络来访问这个设备。

使用usbip来解决Docker容器无法访问USB设备的问题,可以带来以下几个好处

首先,它打破了Docker容器与主机USB设备之间的隔离限制。通过usbip,我们可以将主机上的USB设备共享给Docker容器,使得容器能够像访问本地设备一样访问这些USB设备。这为我们进行嵌入式开发或测试提供了极大的便利。

其次,它提高了开发环境的灵活性和可扩展性。由于usbip是通过网络进行设备共享的,因此我们可以将USB设备放置在任何位置,并通过网络将其共享给需要访问它的Docker容器。这使得我们可以更加灵活地组织和管理开发环境,而无需担心USB设备的物理位置。

最后,它还提高了开发环境的可移植性。通过使用Docker和usbip,我们可以将整个嵌入式编译环境和USB设备一起打包成一个可移植的镜像。这样,无论我们在哪个机器或平台上运行这个镜像,都可以轻松地访问和使用其中的USB设备,而无需进行额外的配置或安装。

总之,使用Docker来配置嵌入式编译环境确实带来了很多便利,而使用usbip来解决Docker容器无法访问USB设备的问题则进一步提高了开发环境的灵活性和可移植性。这使得我们可以更加高效地进行嵌入式开发或测试工作,并享受Docker带来的种种好处。

Windows主机配置

安装usbipd-win

下载usbipd-win

docker 挂载usb通讯 docker调用usb设备_docker

以管理员身份默认安装

使用

首先以管理员身份打开PowerShell终端

🎈查询BUSID:usbipd list

docker 挂载usb通讯 docker调用usb设备_docker_02

这样会显示所有连接的usb设备

🎈查询主机的IP地址:ipconfig

🎈分享USB设备:usbipd bind --busid=<BUSID>

注意:如果设备分享出去,主机就不能访问这个USB设备了,只有解除后才可以。解除分享USB设备的代码:usbipd unbind --busid=<BUSID>

docker 挂载usb通讯 docker调用usb设备_嵌入式_03

Docker的容器配置

安装usbip

apt install linux-tools-virtual hwdata

update-alternatives --install /usr/local/bin/usbip usbip `ls /usr/lib/linux-tools/*/usbip | tail -n1` 20

使用usbip help测试是否安装成功

docker 挂载usb通讯 docker调用usb设备_usbip_04

使用usbip连接主机分享的USB设备

usbip attach --remote=<HOST_IP> --busid=<HOST_BUSID>

docker 挂载usb通讯 docker调用usb设备_docker 挂载usb通讯_05

可以看到,容器中多出来了一个USB设备