macOS主机通过docker-machine创建的VirtualBox无法访问USB UART设备求助
解决docker-machine VirtualBox虚拟机访问Nordic nRF52840 USB串口的问题
我之前也碰到过类似的Nordic开发板串口映射问题,给你梳理几个靠谱的解决步骤:
一、先搞定VirtualBox的USB设备识别问题
你说VirtualBox没把nRF52840识别为USB设备,大概率是虚拟机的USB控制器没开或者设备过滤器没配置:
- 先停掉你的docker-machine虚拟机:
docker-machine stop default - 打开VirtualBox图形界面,找到
default虚拟机,右键选设置 -> 切换到USB标签:- 勾选「启用USB控制器」,然后选择「USB 3.0 (xHCI)控制器」(nRF52840用3.0兼容性更好)
- 点击右侧的「添加USB设备过滤器」按钮,在列表里找到标注为「Nordic Semiconductor」的设备(如果没看到,先插拔下开发板刷新设备列表),添加进去
- 重新启动虚拟机:
docker-machine start default - 进入虚拟机检查:
docker-machine ssh default ls /dev/ttyACM* # nRF52840被识别为USB串口后一般会显示为ttyACM0
二、解决macOS的USB权限问题
如果还是看不到设备,大概率是VirtualBox没获得macOS的USB访问权限:
- 打开「系统偏好设置」->「安全性与隐私」->「隐私」标签,找到「USB」选项
- 确保列表里的「Oracle VM VirtualBox」被勾选,如果没看到,先重启VirtualBox,再插拔开发板,系统会弹出权限请求,点击「允许」
三、如果USB方式还是不行,试试正确的串口映射
你之前尝试的串口映射没成功,可能是路径或配置不对:
- 停掉虚拟机后,进入VirtualBox设置 -> 串口标签:
- 勾选「启用串口」,端口号选「COM1」(对应虚拟机内的
/dev/ttyS0) - 端口模式选「主机设备」,然后在「路径/地址」里输入macOS上的设备路径:
/dev/tty.usbmodem144241 - 注意:每次插拔开发板,这个路径的后缀可能会变,先在macOS终端用
ls /dev/tty.usb*确认最新路径
- 勾选「启用串口」,端口号选「COM1」(对应虚拟机内的
- 启动虚拟机后,进入虚拟机检查串口是否存在:
docker-machine ssh default ls /dev/ttyS0 - 给当前用户添加串口访问权限:
sudo usermod -aG dialout docker
四、容器内访问串口的注意事项
如果是要在docker容器里访问串口,运行容器时需要挂载设备:
docker run --device=/dev/ttyACM0:/dev/ttyACM0 --user $(id -u):$(id -g) your-image-name
(如果是串口映射的ttyS0就替换成对应路径)
额外排查点
- 先在macOS上用
screen /dev/tty.usbmodem144241 115200测试设备本身是否能正常通信,排除硬件或驱动问题 - 如果VirtualBox的USB过滤器里找不到设备,用
system_profiler SPUSBDataType在macOS终端获取设备的Vendor ID和Product ID,手动添加到USB过滤器里(输入VID和PID的十六进制值)
内容的提问来源于stack exchange,提问作者martin
相关产品推荐
相关产品推荐

