我想使用共享内存驱动程序从GPS推送时间 接收器进入NTP(注1) - 主机操作系统是Linux,使用NTP 4.2.6p5。 根据{{3}},我 需要在共享内存中填充以下结构:
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];
};
缺少的主要字段是“时间戳”和“跳跃”的精确定义。我认为时间戳是Unix时间,以UTC为单位,但是如何调整闰秒,以及它如何与“跳跃”字段进行交互?使用诸如documentation之类的界面的典型示例并没有真正回答这个问题。
(注1:在这个项目中,我们正在处理我们自己的GPS解决方案和基于原始观测值的时间,因此没有使用NMEA或其他GPS协议.PPS通过GPIO线提供给我们,我们正在使用ATOM驱动程序通过linuxpps捕获这个)