この記事はかなり昔のものです。最近のカーネルは最初からPPS対応になっており、カーネルの作り直しはしないでそのまま使えます。精度はオフセットが±20μsの範囲に収まる程度です。
=============================================================================================
Raspberry Pi を使って Stratum-1 NTPサーバを動かしています。
GPSのPPS信号を使った Stratum-1 NTPサーバの作り方
この記事のコメント欄で”のべろ”さんという人に教わったのですが、PPS用のカーネル設定がまだ不完全でした。教わった通りやってみると、なんと精度が20倍くらい高くなりました。
Tickless System をOFFにするとよいとのことで以下のページを教わりました。
http://bugs.ntp.org/show_bug.cgi?id=2314
PPSとカーネルの設定について調べてみるといくつか参考になるページが見つかりました。カーネルのバージョンが3.10だとちょっとConfigurationの仕方が異なるようです。以下のページが参考になります。
以下のようにカーネルの設定をします。
$ sudo make menuconfig を実行してカーネルコンフィギュレーションメニューが出たところで、General setup > Timers subsystem と進みます。
Timer tick handling という項目があるのでさらに進み、Periodic timer ticks (constant rate, no dynticks) にチェックを入れます。
ひとつ戻って、Old Idle dynticks config のチェックをはずし、High Resolution Timer Supportにチェックをいれます。
さらにひとつ戻って、Device Drivers > PPS Support と進みます。PPS kernel consumer support と PPS client using GPIO にチェックをいれます。
これでOK。あとは前の記事で書いたようにカーネルイメージを作成し、Raspberry Piを再起動します。
これでしばらくデータを取ってみました。以下のようになりました。1000ns のオフセットをかけてあります。中央の1000のラインが0で下がマイナス、上がプラスです。だいたい±500ns の範囲内に入っています。
まだこの他に、CPUガバナーの設定とシリアル通信のLatency の設定をするとさらに精度があがるそうなので、そちらもやってみます。