我在 Raspberry Pi 上使用串行 GPS/GNSS 设备时遇到了问题。有问题的设备是一个 u-blox GNSS 接收器,符号链接到/dev/gps
.
我尝试实现从该设备记录输出数据并同时向其发送校正数据。
更具体地说,我使用 RTKLIBs ( http://www.rtklib.com/ )str2str
工具将 NTRIP/RTCM 校正数据发送到 GNSS 接收器,以便使用 DGNSS/RTK 获得更好的位置估计。接收器的输出数据将由基于 GPS 守护进程 (gpsd) 的 python 脚本记录。
但是,我想主要问题与串口控制有关。当我首先运行写入过程(str2str)然后同时运行任何读取过程(我的python脚本/gpsd前端(例如cgps)/cat)时,读取过程将输出数据几秒钟然后冻结。我使用哪种工具来读取数据并不重要。
我发现了这个问题:https ://superuser.com/questions/488908/sharing-a-serial-port-between-two-processes 。因此,我确保这些进程获得了对设备的 rw 访问权限,甚至尝试以超级用户身份运行它们。此外,我偶然发现了 socat 和虚拟串行端口,但没有发现任何用处。(Linux 的虚拟串行端口)
有没有办法用一个进程从串行端口读取数据并用另一个进程写入它?我现在知道的唯一解决方案可能是使用pySerial重写python中的读写过程。这将允许只有一个进程访问串行设备,但这意味着大量的工作。