如何在不引用另一台伺服器的情況下設置 ntpd 伺服器時間?
我有一個嵌入式系統,它使用 NTP 在本地同步 UTC。系統中的一個客戶端充當其他客戶端的時間參考。我想您可以將其視為第 0 層。此“NTP 伺服器”上的程序可能會從許多潛在時間源之一(例如 GPS 系統或某人通過 UI 設置新時間)獲取設置時間的消息。新時間不會作為 NTP 埠 123 上的實際 NTP 消息出現。
我一直在尋找如何設置 ntpd 時間但沒有成功。我正在考慮
popen()
做點什麼——應該做點什麼,但網際網路似乎都集中在如何調整外部伺服器的時間,而不是配置本地系統。如何在不引用外部 NTP 伺服器的情況下設置 ntpd 伺服器時間?
作為範例案例,時間源可能是以下之一:docs.novatel.com/oem7/Content/Home.htm(GNSS 接收器)。這只是一種可能的配置。其他客戶使用他們自己單獨的時間源。它不包括 NTP 伺服器,所以我必須從頭開始實現一個。
時間是一個比許多人意識到的要復雜得多的話題。雖然看起來您需要做的只是“設定
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 伺服器盒,那麼您可以編寫自己的核心模組來模擬基於傳入數據包的硬體時鐘。
但到目前為止,您最好的選擇是使用其他人為此目的建構的驅動程序。如果可能的話,您應該將您的 GNSS 接收器連接到實際執行 ntpd 的盒子上,以允許 ntpd 隨時自動獲取時間。