我们有一个用 yocto 构建的 linux 系统。我们可以在重新启动后读取我们的硬件时钟,更改系统时间和硬件时间而不会出现任何错误(大部分时间)。然而; 在新的一个月之后,我们尝试过的每一年都会遇到这个错误。“hwclock:RTC_RD_TIME:无效参数”。示例 1:
root@:~# date
Thu Apr 30 23:59:50 UTC 2020
root@:~# hwclock
Thu Apr 30 23:59:52 2020 0.000000 seconds
root@:~#
root@:~#
root@:~# date
Fri May 1 00:00:10 UTC 2020
root@:~# hwclock
hwclock: RTC_TD_TIME: Invalid argument
root@:~#
这不是每个新月都会发生的,如果我在一月份做同样的测试,linux 可以毫无问题地读取 hwclock。设备是否通电也无关紧要。如果我将 hwclock 设置为 5 月 00:00:00 的第一天,它可以跟踪时间。
下个月班次出现同样的错误:
- 二月(不管是不是闰年)-> 三月
- 四月 -> 五月
- 六月 -> 七月
- 九月 -> 十月
- 十一月 -> 十二月
- 十二月(因为新年或新月不确定)-> 一月
据我了解,这是因为 rtc-lib.c 无法正确验证时间。
我尝试过多种不同的硬件
有谁知道可能导致这种情况的原因?
解决方案:故障不在 rtc-lib.c 中。错误的原因是错误的 RTC 实现。RTC 月份值是 1-indexed,但内核假定它是 0-indexed。为此向 rtc-[my_rtc_model].c 添加了一个补丁,现在它似乎正在工作。