伙计们!
我有一台没有内置 RTC 的单板计算机(HardKernel Odroid C2),每次系统启动时都需要一个外部时间源。虽然我有一个本地 NTP 服务器,但我还需要 RTC 以防发生罕见的电源故障,这将迫使 NTP 服务器重新启动并失去它的时间。由于时间对于系统运行至关重要,因此我使用 PCF8563 I2C RTC 构建了 RTC。问题是它需要特殊的内核模块来使系统可用 RTC,我必须在引导过程中加载这些模块。因此系统以错误的时间启动,加载所需的模块,然后在 /etc/rc.local 的帮助下从 RTC 设置系统时间:
#Set system datetime from RTC
logger "Starting system clock synchronization with RTC"
if [ -e /dev/rtc ]; then
/sbin/hwclock --hctosys
fi
logger "System clock synchronized to RTC"
问题是 systemd 似乎将早期启动过程和时钟设置之间的时间段视为一种“不正确”的不写入日志。系统关闭和系统时钟设置后,我根本看不到任何日志:
Jan 5 23:20:39 tank systemd-journald[206]: Journal stopped
Jan 5 23:20:55 tank root[394]: System clock synchronized to RTC <- this is the second logger message
Jan 5 23:20:55 tank systemd[1]: Started /etc/rc.local Compatibility.
...
Jan 5 23:21:07 tank chronyd[384]: Forward time jump detected!
通过从 /etc/rc.local 运行 hwhlock --hctosys 从 RTC 同步系统时钟是 HardKernel 建议的方法。但这似乎完全错误,因为系统在运行 rc.local 之前显然会在预定义的时间内工作一段时间。那么,有什么方法可以提前从 RTC 设置系统时钟?