2

我想使用共享内存驱动程序将时间从 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 捕获)

4

0 回答 0