ppp 影响串行端口,因此在重置调制解调器时无法使用串行端口

ppp 影响串行端口,因此在重置调制解调器时无法使用串行端口

我有一个基于 Buildroot 的嵌入式系统,它使用 3G 调制解调器 (Cinterion PH8-P) 和 PPP 连接到互联网。 3G 调制解调器是一个 USB 设备,提供 4 个 ttyUSB 端口。其中一个用于 PPP,而另一个用于 GPS。

有时,3G 调制解调器会停止工作,需要重新启动。为此,我首先停止 PPP 和 GPSd 守护程序,然后重新启动调制解调器,然后再次重新启动守护程序。不幸的是,如果预先运行 PPP,它似乎会以某种方式影响串行端口,以便其他程序无法再使用它们。

例如,如果我在尚未运行 PPP 的新启动系统上运行以下命令:

cat /dev/ttyUSB3&
echo "AT" > /dev/ttyUSB3

我收到了预期的OKAT 响应。如果我然后运行 ​​PPP 一会儿(通过调用 pon),然后停止它(通过调用 poff),重新启动调制解调器并尝试再次发送相同的 AT 命令,终端似乎只是回显我发送到调制解调器的内容我没有得到OK回应。结果,GPS 将无法工作,因为我停止从 GPS tty 端口接收 NMEA 消息。这几乎就像 PPP 正在配置所有串行端口以将其输出重定向到其他地方。尽管如此,在调制解调器重新启动后,PPP 完全没有问题 - 根据日志,聊天脚本愉快地发送其 AT 命令并获得预期的响应。

什么可能导致此问题?

答案1

事实证明,PPP影响它自己的串行端口,并且由于这是用于配置 GPS 的串行端口,因此这就是导致问题的原因。

stty -F /dev/ttyUSB3通过比较运行PPP前后的结果,很明显PPP是以原始模式配置串行端口的,这意味着我无法使用它来配置GPS端口。有趣的是,即使由于调制解调器重置而删除并重新创建 ttyUSBx 设备节点,这些设置仍然存在。

只需运行stty sane -F /dev/ttyUSB3恢复到默认设置,我就可以毫无问题地配置 GPS 端口。

相关内容