我在Raspberry Pi上使用串行GPS/GNSS設備發現了一個問題。有問題的設備是一個符合/dev/gps
的u-blox GNSS接收器。Linux:通過一個進程從串口讀取數據,並用另一個進程寫入數據
我試圖實現記錄來自該設備的輸出數據並同時向其發送校正數據。更具體地說,我使用RTKLIB(http://www.rtklib.com/)str2str
工具來發送NTRIP/RTCM校正數據到GNSS接收器,以便使用DGNSS/RTK獲得更好的位置估計。 接收器的輸出數據將通過基於GPS deamon(gpsd)的python腳本進行記錄。
但是,我猜主要問題是與串口控制有關。 當我首先運行寫入過程(str2str),然後同時讀取過程(我的python腳本/ gpsd前端(例如cgps)/ cat)時,讀取過程將輸出數據幾秒鐘並凍結。使用哪個工具讀取數據並不重要。
我發現這個問題:https://superuser.com/questions/488908/sharing-a-serial-port-between-two-processes。因此我確信這些進程能夠訪問設備,甚至嘗試以超級用戶身份運行它們。此外,我偶然發現了socat和虛擬串行端口,但沒有發現任何用處。 (Virtual Serial Port for Linux)
有沒有辦法從一個進程的串口讀取數據並用另一個進程寫入數據?我現在唯一知道的解決方案可能是使用pySerial重寫python中的讀寫過程。這將允許只有一個進程訪問串行設備,但意味着大量的工作。