当前位置: 首页 > GNU/Linux系统 > 正文

嵌入式设备ntp同步时间的一些笔记

本文主要记录平常积累的关于ntp的东东。
为了连接ntp服务器,设备必须连外网,设置方法不尽相同,此处从略。
ntp服务器有很多,但有些是用不了的。测试中用的是202.120.2.101,它是上海交通大学网络中心NTP服务器地址。ntp客户端使用的是ntpclient,使用方法如下:

$ ntpclient -s -t -i 10 -h 202.120.2.101

一、ntp同步时间测试
随意设置一个时间:

$ date 09120013 Thu Sep 12 00:13:00 GMT-8 2013

同步时间:

$ ntpclient -s -t -i 10 -h 202.120.2.101 41526 58384.802 121782.0 24.6 -2172899597099.9 37323.0 0

查看时间:

$ date Sat Aug 17 20:38:07 GMT-8 2013

写到RTC中

$hwclock -uw

在测试中,发现设备重启后,时区老是不对,一个很牛的但现在已经离职的同事告诉我是有个地方没设置。
修改/etc/default/rcS,将UTC打开,设置为yes。

# Set UTC=yes if your system clock is set to UTC (GMT), and UTC=no if not. UTC=yes

注:原来是注释掉的。
修改后,再次同步时间:

$ ntpclient -s -t -i 10 -h 202.120.2.101 41506 84272.529 61186.0 20.2 28896829196.1 28976.4 0 $ date Fri Aug 23 15:26:10 GMT-8 2013 $ hwclock -uw $ hwclock -r Fri Aug 23 07:26:19 2013 0.000000 seconds

时间没问题,时钟芯片比系统少8个小时。
重启设备
内核启动信息:

setting system clock to 2013-08-23 07:26:32 UTC (1377242792)

登陆后查看时间:

$ date Fri Aug 23 15:26:46 GMT-8 2013

这次没问题了。

二、时区在程序的使用。
linux系统的时区文件在/usr/share/zoneinfo目录中。
可以对时区进行一个小小的测试。

$ date Thu May 9 17:42:24 CST 2013

复制时区文件

$ pwd /usr/share/zoneinfo/Asia $ cp Tokyo /etc/localtime $ date Thu May 9 18:43:36 JST 2013

(东京时间比北京时间快一个小时)
很多上位机可以进行时区的选择,那么,在程序如何响应这个选择呢?
可以将每一个时区文件整合到一个数组当中,这里指的是每一个时区中的一个文件,比如东8区,可以使用Asia目录的Shanghai、Chongqing、Taipei中任意一个即可。
数组示例如下,当然,这个数组肯定要根据实际情况修改的。

static char* timezone_files[] = { "GMT+12", "GMT+11", ... "GMT-12", };

上位机发送时区索引值到下位机中,通过查找时区文件数组,得到对应的时区文件,然后拷贝为/etc/localtime(软链接方式也可以)即可。从上面的测试可知,当/etc/localtime更改时,系统时间会马上跟着更改。这样便完成时区的设置了。

后记:计算机时间不会骗人,这个文章中设置的各种时间与文章编写时间都差很远(测试的时间有5月初的,有8月底的,现在是10月底),因为这些是在日常中慢慢积累出来的。从文章中的时间以及文章中某一句话,可以得知此期间发生了一些事,如今物是人非,不回忆也罢。
迟,记于2013年10月20日。

本文固定链接: http://www.latelee.org/using-gnu-linux/ntp-sync-time-note.html

如无特别说明,迟思堂工作室文章均为原创,转载请注明: 嵌入式设备ntp同步时间的一些笔记 | 迟思堂工作室

目前暂无评论

发表评论

*

快捷键:Ctrl+Enter