我正在使用openwrt(在路由器上运行的嵌入式 linux)。我正在使用显示为/dev/ttyACM0
.
[ 2430.460000] usb 1-1: new full-speed USB device number 4 using ehci-platform
[ 2430.630000] cdc_acm 1-1:1.0: This device cannot do calls on its own. It is not a modem.
[ 2430.630000] cdc_acm 1-1:1.0: ttyACM0: USB ACM device
我为openwrt编写了一个小代码,它打开给定的串行端口,/dev/ttyACMO
等待select()
系统调用以获取串行端口上的读/写事件fd
。
每当发生读取事件时,消息都会转储到stdout
.
我没有在串口上启用硬件流控制。
我让连接的外围设备每 2 秒在串行链路上发送一些预定义的消息。
现在,当我在openwrt中运行代码以打印串行消息时,我能够看到来自外围设备的消息。
问题是几分钟后串行链接掉线了。串行接口上不再有读取事件。
重置外围设备也无济于事。让它再次工作的唯一方法是从 USB 中完全移除外围设备并重新开始。
相同的设置在我的 Ubuntu 机器上运行良好。我使用相同的驱动程序接口,即usb-acm (in /dev/ttyACM0
)。在这里,系统将永远运行而不会出现串行挂断。
对正在发生的事情有任何想法或建议吗?