前言
使用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
以管理员身份默认安装
使用
首先以管理员身份打开PowerShell终端
🎈查询BUSID:usbipd list
这样会显示所有连接的usb设备
🎈查询主机的IP地址:ipconfig
🎈分享USB设备:usbipd bind --busid=<BUSID>
注意:如果设备分享出去,主机就不能访问这个USB设备了,只有解除后才可以。解除分享USB设备的代码:
usbipd unbind --busid=<BUSID>
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
测试是否安装成功
使用usbip连接主机分享的USB设备
usbip attach --remote=<HOST_IP> --busid=<HOST_BUSID>
可以看到,容器中多出来了一个USB设备
参考
ubuntu启用USB/IP 通过网络共享USB设备–以野火鲁班猫为例
USB/IP: A Transparent Device Sharing Technology over IP Network