***************************************************************************************************************************
作者:EasyWave 时间:2014.06.08
类别:Linux内核-TimeZone设置 声明:转载,请保留链接
注意:如有错误,欢迎指正。这些是我学习的日志文章......
***************************************************************************************************************************
一:什么是Linux系统的时钟
Linux时钟在概念上类似Windows时钟显示当前系统时间,但在时钟分类和设置上却和Windows大相径庭。Linux将时钟分为系统时钟(SystemClock)和硬件(Real TimeClock,简称RTC)时钟两种。系统时间是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的那个主板硬件时钟。既然Linux有两个时钟系统,那么大家所使用的Linux默认使用哪种时钟系统呢?会不回出现两种系统时钟冲突的情况呢?这些疑问和担心不无道理。首先,Linux并没有默认哪个时钟系统。当Linux启动时,硬件时钟会去读取系统时钟的设置,然后系统时钟就会独立于硬件运作。
从Linux启动过程来看,系统时钟和硬件时钟不会发生冲突,但Linux中的所有命令(包括函数)都是采用的系统时钟设置。不仅如此,系统时钟和硬件时钟还可以采用异步方式,即系统时间和硬件时间可以不同。这样做的好处对于普通用户意义不大,但对于Linux网络管理员却有很大的用处。例如,要将一个很大的网络中(跨越若干时区)的服务器同步,假如位于美国纽约的Linux服务器和北京的Linux服务器,其中一台服务器无须改变硬件时钟而只需临时设置一个系统时间,如要将北京服务器上的时间设置为纽约时间,两台服务器完成文件的同步后,再与原来的时钟同步一下即可。这样系统和硬件时钟就提供了更为灵活的操作。
二:如何设置TimeZone
首先需要查看嵌入式系统地ROOTFS中是否已经包含了zoneinfo这个文件夹,如果没有的话,可以到Ubuntu10.04的系统中(任何一个版本的Ubuntu中都有的)将/usr/share/zoneinfo整个zoneinfo文件夹复制到ROOTFS的/usr/share下,这样嵌入式系统中就有了timezone,如下所示:
注意,这个还只是第一步,这个只能说明这个系统中已经包含了有这个timezone的基本的东西而已。因为我们的时区是在中国,因此选择亚洲的上海。首先要找到上海这个文件,如下所示:
Asia文件夹
看到Shanghai,就说明是支持的。那么找到之后,还需要在ROOTFS的etc目录下设置一个链接,如下所示:
之后我们可以在ROOTFS的etc目录下看到localtime这个链接文件,如下所示:
鼠标右键点击属性可以查看到如下的信息,链接目标:../usr/share/zoneinfo/Asia/Shanghai,如下所示:
如果只是做到这几步的话,在嵌入式的Linux系统中,还无法正确的设置timezone,必须还需要设置一个环境变量才可以真正的实现timezone。就是在etc/profile文件中加入环境变量TZ,如下所示:
一定要记得,需要这样加上TZ的环境变量,timezone才会起作用的哦。这个是我在工作中遇到的一个问题,我是这样解决的,不知道的朋友可以参考下我的这篇博文测试下看看哦......