我有一台基于 Ubuntu 16.04 的虚拟机,它在 Windows 10 上的 VirtualBox 中运行。在我的主机上,我连接了一个 ZWave USB 天线,然后将其映射/连接到虚拟机。当我第一次启动虚拟机时,我可以看到 USB 设备被正确检测到/dev/ttyACM0
:
eric@XMEANT ~ $ dmesg | grep acm
[ 18.593264] cdc_acm 2-2:1.0: ttyACM0: USB ACM device
eric@XMEANT ~ $ ls /dev/ttyA*
/dev/ttyACM0
但是,在我唤醒主机从睡眠模式唤醒后,我不再看到列表中的设备/dev
。
eric@XMEANT ~ $ ls /dev/ttyA*
ls: cannot access '/dev/ttyA*': No such file or directory
按照我在另一个帖子中找到的提示超级用户问题,我尝试了以下方法:
eric@XMEANT ~ $ cat /proc/tty/drivers
/dev/tty /dev/tty 5 0 system:/dev/tty
/dev/console /dev/console 5 1 system:console
/dev/ptmx /dev/ptmx 5 2 system
/dev/vc/0 /dev/vc/0 4 0 system:vtmaster
acm /dev/ttyACM 166 0-255 serial
ttyprintk /dev/ttyprintk 5 3 console
max310x /dev/ttyMAX 204 209-224 serial
serial /dev/ttyS 4 64-111 serial
pty_slave /dev/pts 136 0-1048575 pty:slave
pty_master /dev/ptm 128 0-1048575 pty:master
unknown /dev/tty 4 1-63 console
eric@XMEANT ~ $ lsmod | grep acm
cdc_acm 36864 0
eric@XMEANT ~ $ sudo modprobe -r cdc_acm
eric@XMEANT ~ $ sudo modprobe cdc_acm
但是,仍然没有找到设备:
eric@XMEANT ~ $ ls /dev/ttyA*
ls: cannot access '/dev/ttyA*': No such file or directory
我尝试过从 VirtualBox 取消映射并重新映射,但没有任何效果。我能想到的唯一方法是重新启动虚拟机。但这不是一个真正有效的解决方案,因为重新启动我的虚拟机和所有服务等可能需要几分钟。
还有其他方法可以强制虚拟机重新扫描/重新检测丢失的设备或重新启动找到它所需的子服务吗?
答案1
您应该尝试重新加载 USB 核心模块。
不确定您是否面临与我以前遇到的完全相同的问题(运行 Debian 9 的 VirtualBox VM 有时会丢失其所有 USB 设备,与任何暂停无关),但这个小脚本对我的情况很有效:
#!/bin/sh
USB_DRIVERS="ehci_pci ehci_hcd ohci_pci ohci_hcd"
echo "Unloading USB modules..."
for usb_driver in ${USB_DRIVERS}
do
sudo modprobe -r ${usb_driver}
done
echo "Reloading USB modules..."
for usb_driver in ${USB_DRIVERS}
do
sudo modprobe ${usb_driver}
done
sleep 2
lsusb
它卸载 USB 模块,重新加载它们并最后列出 USB 设备。