从 TCP 源 + PPS 设备获取 GPS 时间

从 TCP 源 + PPS 设备获取 GPS 时间

我目前正在使用 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 不合适”错误的文档?

谢谢

相关内容