另外,在32位Linux系统上,不可避免的会遇到2038年问题,也放在这里一并阐述。
从仓库发货的全新产品,为何RTC时间是1970年?
产品RTC电池没有正确安装,或者锂电池与电池仓之间的隔离塑料垫片没有去掉,RTC没电不工作。
提示:RTC独立供电的产品,使用前必须正确安装RTC电池,并在第一次开机的时候设置正确的RTC时间。库存产品,不安装RTC电池,或者在安装电池时做好供电隔离。
正常运行的系统,经过一段时间后内核出现如下提示:
rtc-pcf8563 0-0051: low voltage detected, date/time is not reliable.
说明RTC电池电压已经偏低。这样会导致RTC时间不可靠,从而影响到Linux系统时间的准确性。
设计时需注意以下几点:
RTC_VDD 仅供电给时钟芯片的VDD引脚;
RTC_VDD供电线路上使用的二极管选型低压降、低漏电流;
I2C 上拉电阻使用系统电源;
struct rtc_time {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
32位定时器有符号整数最大计数为0x7FFFFFF,换算成十进制是2147483647。
2147483647秒,换算成年的话,是68.09625973490614年,大概是68年零18天。所以,UNIX时间,从1970年1月1日零时起,经过68年零18天后(确切是2038年1月19日中午11:14:07),计数器溢出,RTC将无法正常工作。在32位系统上解决这个问题,需要升级到Linux内核到高版本,同时升级glibc,工作量很大,对一些发布较久的处理器,原厂不一定能提供新版本内核,这是很让人头疼的。如果选用选用64位处理器,跑64位Linux系统就没这个问题了。