在上一篇文章中完成的内容,仅仅是使RTC时间和系统时间一样,但是没有考虑时区的问题,现在已经搞定,先在此做一下记录。
本人使用的文件系统使用hwclock命令,不能得到时区的信息,但是开机的时候会有这么一句话:ds2417-rtc ds2417-rtc.0: setting system clock to 2017-08-17 07:00:19 UTC (1502953219),由此我认为RTC里面的时间是UTC时间,在没有添加与时区有关文件时,系统时间和RTC时间是一样的,都是UTC。这个我们正常使用的CST(UTC+8)明显是不一样的。
现在讲如何添加时区功能:
1.首先,拷贝时区文件。在一台ubuntu或者其他linux的PC主机上,将/usr/share/zoneinfo
的文件拷贝到嵌入式目标主机上,当然,并不需要全部拷贝上去,因为有好几MB的大小,这个大小对于嵌入式系统来说已经相当庞大了;由于我们需要的是北京时间,所以只将文件/usr/share/zoneinfo/Asia/Shanghai
拷贝至嵌入式系统同样的位置中,本来想找Asia/Beijing的,发现找不到,但效果是一样的;使用tftp等工具去拷贝都行,嵌入式系统上没有对应文件夹的话就自己创建。
然后千万要修改Shanghai的文件权限:chmod 777 Shanghai
2.然后,创建localtime符号链接文件。在嵌入式Linux系统中创建一个链接文件,注意文件位置,链到刚才Shanghai
那个文件,执行命令:
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3.也是我认为最重要的,在使用date命令修改完时间之后,仅仅是修改了系统时间,但是并没有修改RTC时间,所以我们还需要执行一下hwclock命令。如果大家按照网上的方法执行hwclock -w,那么你会把系统时间原封不动的写到RTC里面去,最后在开机的时候系统会从RTC里面读取时间然后按照时区文件+8,所以得到的时间会比设置的时间多了8小时。所以我们要把hwclock -w改为hwclock -u -w。这样我们写到RTC里的时间是没有经过+8的UTC时间,而开机的时候系统得到这个时间会+8,就是我们需要的时间了。
修改时区文件也只是在RTC时间(UTC)的基础上加加减减而已。