我有一台 Debian 8.4 机器,我用它来通过 smstools 发送/接收短信。我的调制解调器是:华为技术有限公司 E169/E620/E800 HSDPA 调制解调器,几天内都运行良好,然后调制解调器通过 /dev/ttyUSB0 变得不可用,我必须切换到 /dev/ttyUSB1。接下来的几天它工作正常,然后同样的事情发生了 - 我必须切换回 /dev/ttyUSB0 有人知道为什么会发生这种情况吗?我该怎么办?是调制解调器的问题吗?在我之前的机器上,我有相同型号的调制解调器,它可以正常工作几个月。不幸的是,我无法使用该调制解调器,因为 ESXi 看不到它。
答案1
原因
嗯,我认为原因是某物重置调制解调器/USB 总线(我不确定:是 USB 总线重置、由其固件导致的调制解调器重置、由 SMS 发送守护程序导致的调制解调器重置还是完全其他原因),从而使调制解调器显示为另一个设备:因为热插拔设备的命名故意不是固定的 - 至少自从 Linux 内核切换为用于udev
管理/dev
层次结构以来。
补救措施
您应该做的是udev
在需要时使用 的功能为您提供持久的设备命名。
有多种方法可以做到这一点,但最简单的方法是请求内核创建一个使用自定义名称指向真实设备节点文件的符号链接。
例如,在与您的用途相同的 Debian 系统上,我们有:
$ cat /etc/udev/rules.d/55-USB-modems.rules
# idVendor 0x12d1 Huawei Technologies Co., Ltd.
# idProduct 0x1001 E169/E620/E800 HSDPA Modem
SUBSYSTEMS=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1001",SYMLINK+="ttyGSM1"
这条规则将使调制解调器还可用作/dev/ttyGSM1
节点。
请注意,用于匹配设备的那些idVendor
和属性在不同的设备之间是不同的;查询 USB 总线以确定您的设备具有什么。在我们的系统上,我们有:idProduct
$ lsusb|grep 12d1
Bus 002 Device 008: ID 12d1:1001 Huawei Technologies Co., Ltd. E169/E620/E800 HSDPA Modem
所以我认为你已经有这个想法了。
请注意,您需要重新启动udev
以使其重新加载其规则,然后重新插入调制解调器以使其从udev
的 PoV 中重新出现。
答案2
看来确实是调制解调器出了问题。我换了另一个,现在一切正常。