2

共有メモリ ドライバを使用して、GPS 受信機から NTP に時刻をプッシュしたいと考えています (注 1)。ホスト OS は 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