我目前正在使用 Ubuntu 18 开发 Nvidia Jetson TX2,使用 Emlid Reach GPS 模块,该模块能够通过 TCP 连接提供 NMEA 消息,并通过 UART 引脚提供 1-PPS 信号。
我无法正确同步系统时钟与 GPS 时钟。
我能够使用所需的 PPS 标志编译 Linux 内核:
CONFIG_PPS=y
CONFIG_PPS_DEBUG=y
CONFIG_PPS_CLIENT_KTIMER=y
CONFIG_PPS_CLIENT_LDISC=y
CONFIG_PPS_CLIENT_GPIO=y
它公开两个设备:/dev/pps0 和 /dev/pps1。pps0 对应内核 PPS,pps1 是与板上的 GPIO 引脚相关的 PPS。
GPS 模块通过 USB 电缆连接,但通过创建 USB 转以太网接口并响应 IP 192.168.2.15 来提供数据,用于数据采集的 TCP 端口可配置并设置为 9001。PPS 信号连接到 jetson 中的一个引脚。
我的问题是,一些 gps/pps 工具给我满意的结果,而其他的却失败得很惨。
测试两个 pps 信号:
sudo ppstest /dev/pps0
sudo ppstest /dev/pps1
给出令人满意的结果:
trying PPS source "/dev/pps0"
found PPS source "/dev/pps0"
ok, found 1 source(s), now start fetching data...
source 0 - assert 1657740302.347287559, sequence: 6590 - clear 0.000000000, sequence: 0
...
但是 ppscheck 工具却没有这样做,并且失败了:
$ sudo ppscheck /dev/pps0
# Seconds nanoSecs Signals
PPS ioctl(TIOCMIWAIT) failed: 25 Inappropriate ioctl for device
gpsmon 能够从 TCP 连接获取 NMEA 数据,但不能从 PPS 获取,方法如下:
sudo gpsmon -D 5 192.168.2.15:9001:/dev/pps0
PPS 行仍为空白。
另一方面,尝试配置 gpsd 失败:
sudo gpsd -D 5 -N -n tcp://192.168.2.15:9001
gpsd:INFO: launching (Version 3.17)
gpsd:IO: opening IPv4 socket
gpsd:ERROR: can't bind to IPv4 port gpsd, Address already in use
gpsd:ERROR: maybe gpsd is already running!
尝试使用 pps1 会得到类似的结果。
哪种方式才是配置 gpsd 以从 TCP 连接 + PPS 设备获取 NMEA 数据的正确方法?是否有关于 PPS“设备 ioctl 不合适”错误的文档?
谢谢