我有一台 Raspberry Pi 4,上面安装了 Ubuntu 20.04。不幸的是,它不会一直连接到互联网,这意味着每次重启后日期都会被设置回构建时间。我添加了一个外部 RTC 模块(在 IIC 总线上工作的 DS3231),可以用 读取时间hwclock --show
。
dtoverlay=i2c-rtc,ds3231
添加到 后/boot/firmware/usercfg.txt
,模块rtc_ds1307
现在会在启动时加载。唯一的问题是,Ubuntu 似乎在加载模块之前尝试从 RTC 设置系统时间(参见dmesg
下面的输出)。启动后,我可以通过运行 手动将时间设置为 RTC 上的时间sudo hwclock --hctosys
。
有什么建议可以解决这个问题吗?有什么方法可以让模块更快地加载吗?
我尝试将其添加到超级用户/root crontab:
@reboot sleep 10; hwclock --hctosys
但它似乎不起作用。
输出自dmesg | grep rtc
:
[ 0.000000] Kernel command line: coherent_pool=1M 8250.nr_uarts=1 bcm2708_fb.fbwidth=0 bcm2708_fb.fbheight=0 bcm2708_fb.fbswap=1 smsc95xx.macaddr=DC:A6:32:43:2B:86 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000 net.ifnames=0 dwc_otg.lpm_enable=0 console=ttyS0,115200 console=tty1 root=LABEL=writable rootfstype=ext4 elevator=deadline rootwait fixrtc quiet splash
[ 1.726560] hctosys: unable to open rtc device (rtc0)
[ 2.470632] rtc-ds1307 1-0068: registered as rtc0
答案1
我正在做同样的事情,但对此还很陌生。
我认为您需要编辑脚本文件“/lib/udev/hwclock-set”,正如 Michael 所说,如下所示。
#!/bin/sh
# Reset the System Clock to UTC if the hardware clock from which it
# was copied by the kernel was in localtime.
dev=$1
# COMMENT OUT NEXT THREE LINES
#if [ -e /run/systemd/system ] ; then
# exit 0
#fi
if [ -e /run/udev/hwclock-set ]; then
exit 0
fi
if [ -f /etc/default/rcS ] ; then
. /etc/default/rcS
fi
# These defaults are user-overridable in /etc/default/hwclock
BADYEAR=no
我的时钟还没到,所以我还没有试过。如果它对你有用,请告诉我。