有没有办法在没有 NTP 的情况下获取正确的系统时间?

有没有办法在没有 NTP 的情况下获取正确的系统时间?

我正在 ARMv7、3.10 内核上开发工业嵌入式设备。

首先,在开始讨论主题之前,让我先谈谈硬件时间。Amlogic meson8b 是核心单元,所以我使用“aml-rtc”作为主 rtc,但它不可靠。因此,我们决定使用外部 rtc 芯片,现在 ds1340 是主 rtc。经过几次测试,我认为硬件时间现在非常可靠。

问题出在系统时间上。系统时间比硬件时间运行得快大约 2~3 秒/天。如您所知,有很多使用 NTP 的解决方案,但由于我们设备的特性,它与以太网断开连接,所以我无法使用 NTP。

重点是我想知道是否有任何方法可以在没有 NTP 的情况下获取正确的系统时间。

感谢您阅读本帖,抱歉我的英语不好。


ps. 我也想过定期使用“hwclock --hctosys”调用,但这可能是一个严重的问题,因为要保存文件和日志。例如,LOG<1> 在系统时间 12:05 保存,如果 hwclock 将系统设置回 12:04,LOG<1> 可能会丢失,因为“新时间”到达 12:05 后会保存新日志。这只是一个例子,我也可以通过将“hwclock --hctosys”周期设置得很短来解决这个问题,但我希望将此方式作为最后的手段。

答案1

编辑

我最初的回答涉及一些编程。也许你可以用一些其他编程让整个设置更简单。在我的 Kubuntu 上man ntpdate显示它使用adjtime()系统调用来逐步调整系统时钟。考虑一个读取硬件时钟并调用的程序adjtime()


原始答案

来自 G-Man 的评论:

一些(大多数?所有?)NTP(客户端)软件通过加快或减慢系统时钟来工作,以便与外部时间源同步。

如果这是解决日志问题等的正确方法,也许您可​​以实现伪本地 NTP 服务器。让您的伪 NTP 服务器使用硬件时钟读取硬件时钟每小时一次对自己进行更正;然后让 NTP 客户端以不干扰日志和保存文件的方式调整系统时钟。

相关内容