我正在 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 客户端以不干扰日志和保存文件的方式调整系统时钟。