/dev/ttyACM0 在睡眠后丢失 - 如何重新检测/重新启动/重新扫描 ttyACM0?

/dev/ttyACM0 在睡眠后丢失 - 如何重新检测/重新启动/重新扫描 ttyACM0?

我有一台基于 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 设备。

相关内容