我想使用共享内存驱动程序将时间从 GPS 接收器推送到 NTP(注 1) - 主机操作系统是 Linux,使用 NTP 4.2.6p5。根据文档,我需要在共享内存中填充以下结构:
struct shmTime {
int mode; /* 0 - if valid set
* use values,
* clear valid
* 1 - if valid set
* if count before and after read of
* values is equal,
* use values
* clear valid
*/
int count; /* See documentation for "mode" on the site */
time_t clockTimeStampSec; /* external clock */
int clockTimeStampUSec; /* external clock */
time_t receiveTimeStampSec; /* internal clock, when external value was received */
int receiveTimeStampUSec; /* internal clock, when external value was received */
int leap; /* ??? */
int precision; /* Precision of the timestamp, in 2^precision seconds */
int nsamples; /* Set by NTPD - do not populate */
int valid; /* Shared memory is valid */
int dummy[10];
};
缺少的主要字段是“时间戳”和“飞跃”的精确定义。我认为时间戳是 UTC 时间的 Unix 时间,但是如何调整闰秒,以及它如何与“闰”字段交互?使用shmpps.c等接口的典型示例并不能真正回答问题。
(注 1:在这个项目中,我们正在处理我们自己的 GPS 解决方案和基于原始观测数据的时间,因此不使用 NMEA 或其他 GPS 协议。PPS 通过 GPIO 线提供给我们,我们正在使用 ATOM 驱动程序通过 linuxpps 捕获)