Embedded

ppp 影響串列埠,因此如果調製解調器重置,它們將無法使用

  • April 5, 2016

我有一個基於 Buildroot 的嵌入式系統,它使用 3G 調製解調器 (Cinterion PH8-P) 和 PPP 連接到網際網路。3G 調製解調器是一個提供 4 個 ttyUSB 埠的 USB 設備。其中一個用於 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 命令並得到預期的響應。

什麼可能導致此問題?

事實證明,PPP正在影響它自己的串列埠,因為這是用於配置 GPS 的串列埠,這就是導致問題的原因。

通過比較stty -F /dev/ttyUSB3執行 PPP 前後的結果,很明顯 PPP 是在 raw 模式下配置串口,這意味著我不能用它來配置 GPS 埠。有趣的是,即使在 ttyUSBx 設備節點由於調製解調器被重置而被移除並重新創建後,這些設置仍然存在。

只需執行stty sane -F /dev/ttyUSB3以恢復預設設置,我就可以毫無問題地配置 GPS 埠。

引用自:https://unix.stackexchange.com/questions/274485