NTPを使用してUTCをローカルに同期する組み込みシステムがあります。システムのクライアントの1つは、他のクライアントの時間参照として機能します。レイヤー0だと思えばいいと思います。この「NTPサーバー」のプログラムは、GPSシステムやUIを介して新しい時間を設定する人など、いくつかの潜在的な時間源の1つから時間を設定するように求められます。新しい時刻は、NTP ポート 123 で実際の NTP メッセージとして表示されません。
私は成功せずにntpd時間を設定する方法を探していました。問題を解決しなければならないことをやろうと思いますがpopen()
、インターネットではローカルシステムを構成するのではなく、外部サーバーの時間をどのように調整するかに焦点が当てられているようです。
外部NTPサーバーを参照せずにntpdサーバー時間をどのように設定しますか?
ユースケースの例として、タイムソースは次のいずれかです。docs.novatel.com/oem7/Content/Home.htm(GNSS受信機)。これは可能な構成の1つにすぎません。他のクライアントは独自の別々のタイムソースを使用します。 NTPサーバーが含まれていないため、最初から1つを実装する必要がありました。
ベストアンサー1
時間は、多くの人が認識するよりもはるかに複雑なトピックです。 「時間を設定」するだけでよいように見えますが、ntpd
実際には考慮すべき点がたくさんあります。
あなたの質問に対する本当に盲目的な(悪い)答えは、単に以下を使用してシステム時間を設定することです。clock
コマンドラインから、またはstime
プログラムから。これは、NTP が独自の内部クロックを保存しないために可能です。しかし、そうすると、望む結果が出ないことがあります。
NTPは現在のシステム時間を設定してクライアントに配布するだけでなく、時計のエラーを追跡して他のタイムソースポーリング間で調整することもできます。単に現在の時間を設定するだけではNTPにエラーを通知しないため、NTPがシステムクロックを調整するために使用する「頻度」を更新しません。
リアルタイムの唯一のソースがシステム時間を設定する人ならば、唯一のオプションです。
GPSをサーバーのタイムソースとして使用する場合は、正しいntpd
用語は次ntpd
のように設定することです。レイヤ1仕える人。
ntpd
この問題に関するいくつかの記事を読んだ後、実際にGPSを含むハードウェア時計と通信する方法が組み込まれているようです。仮想アドレス範囲を使用して構成されます。127.127.0.0/16
。例は次のとおりです。
- https://developers.redhat.com/blog/2017/02/22/how-to-build-a-stratum-1-ntp-server-using-a-raspberry-pi/そして
127.127.20.0
- https://www.satsignal.eu/ntp/Raspberry-Pi-NTP.html#ntp-confそして
127.127.28.0
時間デバイスが実際にNTPサーバーボックスに接続されていないため、この機能が利用できない場合は、独自のカーネルモジュールを作成して、着信パケットに基づいてハードウェアクロックをシミュレートできます。
しかし、これまでの最良の方法は、この目的のために他の人が作成したドライバを使用することです。可能であれば、実際にはntpdを実行しているボックスにGNSSリスナーを接続して、必要に応じてntpdが自動的に時間を取得できるようにする必要があります。