我有一个 Debian Buster 系统,它没有编译内核,CONFIG_RTC_SYSTOHC
因为我不想打开 11 分钟内核模式。但是,我想检查此更改是否真的有效。
所以我检查了命令status
输出中的字段。字段是或adjtimex --print
。status
24577
0b110000000000001
根据此处的手册页- https://linux.die.net/man/8/adjtimex ,该字段的64
位似乎是,根据此处:https://access.redhat.com/solutions/ 55432表示开启。status
not set
11-minute mode
这与我使用CONFIG_RTC_SYSTOHC
as编译内核时的预期相矛盾not set
。如何可靠地检查 11 分钟模式是否实际关闭,或者我是否adjtimex
错误地解释了输出?
(只是为了清除阅读此答案的任何人可能造成的混淆:Linux 运行时,(通常)有两个时钟:“主”时钟是系统时钟,通常是基于 CPU 的。另一个时钟是持久硬件时钟(RTC)。当系统关闭时,系统时钟会丢失时间,只有持久的硬件时钟才能保持正确的挂钟时间。)
字段的
64
位的主要含义是“系统时钟正在/未被NTP或其他时间源同步”。11 分钟模式过去与此紧密耦合:如果系统时钟正在同步,则 RTC 将每 11 分钟更新一次;如果没有,那就不会了。status
adjtimex
CONFIG_RTC_SYSTOHC
稍后添加了每 11 分钟禁用系统时钟到 RTC 传输的选项。禁用
CONFIG_RTC_SYSTOHC
会切断系统时钟同步和 RTC 11 分钟更新之间的连接。您可以查看相关的内核源代码,在 Debian Buster 的标准 4.19.xx 内核中是sync_rtc_clock()
kernel /time/ntp.c 第 #532 行中的函数。可以看到 whenCONFIG_RTC_SYSTOHC
没有设置,函数提前返回,什么都不做:换句话说,禁用实际上
CONFIG_RTC_SYSTOHC
是11-minute mode
一个无操作。更具实验性的是,您可以使用内核分析工具在 11 分钟的适当倍数内监控该
rtc_set_time()
函数,并查看它被调用的频率。如果你发现答案是 0 次,你就会知道硬件 RTC 时钟没有被 11 分钟模式或其他任何东西调整。