HCL:树莓派3 RTC
树莓派的主要问题之一是缺乏实时时钟 (RTC),该时钟在重新启动后直接向系统提供正确的时间。通常,系统需要通过 NTP 访问网络才能获取正确的时间,但如果没有访问 NTP 服务器的权限,在网络中断或独立设置期间,系统将在每次重新启动后以预定义的日期和时间启动。
DS3231
这个解决方案非常简单且价格便宜。有一个带有 DS3231 I2C 芯片的小型 RTC 模块,可以直接连接到 GPIO 插座。
模块安装
该模块安装到 GPIO 插座的引脚 1,3,5,7,9,如图所示。
设备树 (DT) 叠加
需要使用设备树 (DT) 叠加激活 RTC 模块。该配置位于 /boot/efi/extraconfig.txt。
dtoverlay=i2c-rtc,ds3231
重新启动后,您将通过 dmesg 输出看到该模块。
[ 4.526184] rtc-ds1307 1-0068: rtc core: registered ds3231 as rtc0
首次启动时,RTC 连接并配置了互联网访问,时间将通过互联网与 NTP 同步,并保存到 RTC。
下次启动时,您的 dmesg 将显示时间是从 RTC 获取的以设置系统时间
[ 23.364623] rtc-ds1307 1-0068: setting system clock to 2021-01-29T12:59:55 UTC (1611925195)
timedatectl
timedatectl 显示来自系统和 RTC 的当前时间
Local time: jeu. 2021-01-28 16:42:22 UTC
Universal time: jeu. 2021-01-28 16:42:22 UTC
RTC time: jeu. 2021-01-28 16:42:22
Time zone: UTC (UTC, +0000)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
hwclock
另一个工具是 hwclock,用于检查 RTC 模块上的时间。
#> hwclock --show 2019-01-30 17:29:41.818087+0100
要将系统通过 NTP 获取的时间写入 RTC 模块,请运行 --systohc。
#> hwclock --systohc
systemd (仅 Leap)
在 Tumbleweed 上,从 RTC 加载时间到系统是自动的,无需执行任何操作。
在较旧的 Leap 上,您可能需要通过 systemd 服务 从 RTC 加载时间,创建文件 /usr/lib/systemd/system/hwclock-start.service,内容如下。
[Unit] Description=read rtc and write to system clock After=sysinit.target [Service] Type=oneshot ExecStart=/sbin/hwclock --hctosys --utc [Install] WantedBy=basic.target
启用该服务并重新启动系统。
#> systemctl status hwclock-start
:

