RTC Q&A
Q1:为什么偶尔出现RTC时间会恢复到default值?
一般是因为电池供电不稳的原因,驱动强行把RTC时间设置到default值,这个default值可以在dtsi里面配置,例如在kernel/arch/arm/boot/dts/mercury6.dtsi文件设置如下:

则设置的为 1983/10/5 00:00:00
假如没配置的话, default值就是1970/1/1 00:00:00
设置的值顺序(秒 分 时 日 月份 年份 星期 天数),说明如下:

Q2:为什么我没有添加rtc供电的电池,reboot重启,或者断电重启后,rtc时间会同步呢?
在没有电池的情况下,断电,rtc是肯定会回到default状态的,如果断电rtc照样运行,那要排查一下硬件电路,是否有电容之类的,短暂存储和供电给rtc运行了,断电久一点,应该就不会走了。
至于reboot命令,本身电源就没有断开,reboot期间,rtc时间仍然可以走。
Q3:为什么hwclock写rtc异常?如下图

先检查kernel config有没有打开:

再检查dtsi(kernel/arch/arm/boot/dts/mercury6.dtsi)有没有打开:

如果都打开了,那请确认一下芯片内部没有内置rtc。
Q4:为什么kernel下执行"hwclock"后,系统会断电?
请确保kernel中已打开了如下两个驱动:
CONFIG_RTCPWC_SW_RST_OFF=y CONFIG_RTCPWC_INNER_EHHE=y