ppp 影響串列埠,因此如果調製解調器重置,它們將無法使用
我有一個基於 Buildroot 的嵌入式系統,它使用 3G 調製解調器 (Cinterion PH8-P) 和 PPP 連接到網際網路。3G 調製解調器是一個提供 4 個 ttyUSB 埠的 USB 設備。其中一個用於 PPP,而另一個用於 GPS。
有時,3G 調製解調器會停止工作,需要重新啟動。為此,我首先停止 PPP 和 GPSd 守護程序,然後重新啟動調製解調器,然後再次重新啟動守護程序。不幸的是,如果事先執行 PPP,似乎會以某種方式影響串列埠,從而使其他程序無法再使用它們。
例如,如果我在尚未執行 PPP 的新啟動系統上執行以下命令:
cat /dev/ttyUSB3& echo "AT" > /dev/ttyUSB3
我得到了預期的
OK
AT 響應。如果我然後執行 PPP 一段時間(通過呼叫 pon),然後停止它(通過呼叫 poff),重新啟動調製解調器並嘗試再次發送相同的 AT 命令,終端似乎只是回顯了我發送給調製解調器的內容我沒有得到OK
回應。結果,GPS 無法工作,因為我停止從 GPS tty 埠接收 NMEA 消息。這幾乎就像 PPP 正在配置所有串列埠以將它們的輸出重定向到其他地方。儘管如此,在調製解調器重新啟動後,PPP 完全沒有問題再次啟動 - 根據日誌,聊天腳本愉快地發送它們的 AT 命令並得到預期的響應。什麼可能導致此問題?
事實證明,PPP正在影響它自己的串列埠,因為這是用於配置 GPS 的串列埠,這就是導致問題的原因。
通過比較
stty -F /dev/ttyUSB3
執行 PPP 前後的結果,很明顯 PPP 是在 raw 模式下配置串口,這意味著我不能用它來配置 GPS 埠。有趣的是,即使在 ttyUSBx 設備節點由於調製解調器被重置而被移除並重新創建後,這些設置仍然存在。只需執行
stty sane -F /dev/ttyUSB3
以恢復預設設置,我就可以毫無問題地配置 GPS 埠。