由于项目需要,将openwrt的uclibc切换到了glibc,但是使用中发现配置的时区无法生效。后来查找资料发现uclibc和glibc对时区的使用有差异:
1.对于uclibc,重要文件是/etc/TZ,实际连接到/tmp/TZ,修改时区后,会根据配置文件system中的timezone的option修改/tmp/TZ
2.对于glibc,重要文件是/etc/localtime,实际连接到/tmp/localtime,而/tmp/localtime也是连接文件,根据配置文件system中的zonename的option修改该连接
基于以上,使用glibc后,需要进行一下修改来生效时区:
1.make menuconfig,选中Utilities->zoneinfo中的所有package,会将时区相关的信息文件安装到/usr/share/zoneinfo/,/tmp/localtime连接到该目录下相应文件
2./etc/init.d/system中system_config函数将ln -s "/usr/share/zoneinfo/$zonename" /tmp/localtime修改为ln -sf "/usr/share/zoneinfo/$zonename" /tmp/localtime,强制建立连接,可以使系统完全启动后也能修改时区并生效