![如何在 Atmel xPlained SAMA5D3 上获得稳定时间](https://linux22.com/image/1439380/%E5%A6%82%E4%BD%95%E5%9C%A8%20Atmel%20xPlained%20SAMA5D3%20%E4%B8%8A%E8%8E%B7%E5%BE%97%E7%A8%B3%E5%AE%9A%E6%97%B6%E9%97%B4.png)
我在 Atmel xPlained SAMA5D3 SBC 上的 SD 卡上运行 Debian Jessie。我有一个 Python 程序,它通过串行线对另一个设备进行采样。该设备有一个非常可靠的 20 秒倒计时时钟。我发现计算出的周期时间变化很大。
这导致我发现 systemd-timesyncd 每 32 秒调整时钟 0.5 秒到 1.0 秒。它似乎并没有调整滴答率,而只是不断偏移。由于它太多了,它永远不会后退,并且每 32 秒都会达到一次。我发现完整的 ntp 包和 openntpd 的行为类似。
所以我关闭了 systemd-timesyncd。然后发现,那时我每分钟会损失大约 1.5 秒。
这促使我安装了 ntpdate 和 adjtimex。我编写了一个 cron 作业,每 10 分钟执行一次 ntpdate,并将结果记录到文件中。通过使用公式
tickAdjust = ntpAdjustmentMilliseconds / 10minutes
我可以使用 adjtimex -t 来调整刻度值。当值为 10158 时,10 分钟更新变得非常小,徘徊在 0 的两侧。
所以我现在的问题是,该怎么办?我已经学习了一些有关 Linux 和时间的知识,但现在我似乎有更多问题。我不知道 10158 这个值是否太离谱了,还是可以接受的?我是否应该编写一个小的 Python 程序来分析我的日志并按照我手动执行的操作?为什么它最初如此严重地偏离,以至于 systemd-timesyncd 无法调整它?我的内核是否指向正确的时钟源?用户指南说有两个处理器时钟,但下面显示 3 个:
# cat /sys/devices/system/clocksource/clocksource0/available_clocksource
> tcb_clksrc pit jiffies
它们之间有什么关系?我尝试过更改时钟源,但似乎什么都没改变,为什么?系统时钟和硬件时钟在哪里?rtc 硬件到底有没有用?
我并不害怕使用 ntpdate 和 adjtimex 来“自己动手”,但我觉得我对如何真正实现稳定时间并没有很好的理解。