版本信息:
Linux version 4.1.15
需求: RTC时间不够精确,过一段时间就可以看出和实际时间有明显出入,有必要添加NTP服务,使系统可以与网络同步时间。
首先把NTP服务build进rootfs,修改/etc/ntp.conf,网上参考很多,内容如下:
driftfile /var/lib/ntp/drift
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
restrict 10.0.0.0 mask 255.0.0.0 nomodify notrap
restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap
restrict 172.16.0.0 mask 255.15.0.0 nomodify notrap
# Use public servers from the pool.ntp.org project.
server 210.72.145.44 perfer
server 0.cn.pool.ntp.org
server 1.cn.pool.ntp.org
server 2.cn.pool.ntp.org
server 0.asia.pool.ntp.org
server 1.asia.pool.ntp.org
server 2.asia.pool.ntp.org
server 0.CentOS.pool.ntp.org
server 1.centos.pool.ntp.org
server 2.centos.pool.ntp.org
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
更新rootfs,重启系统(确保可以上网),发现时间确实和网上同步了。
查看date,
~# date
Wed Mar 28 01:12:39 UTC 2018
系统时间是UTC时间,我们希望是中国时间,需要在rootfs添加时区配置,默认rootfs没有localtime,使用UTC时间,NTP在同步时间时,会把系统时间改为真正的UTC时间。添加中国时区(Shanghai)方法如下:
从ubuntu 拷贝/usr/share/zoneinfo/Asia/Shanghai 到目标机,再执行
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
重启系统,这样date 就是上海时区的时间了。
~# date;hwclock -r
Wed Mar 28 09:22:39 CST 2018
Wed Mar 28 01:22:39 2018 0.000000 seconds
不过RTC时间总是UTC时间, 可执行hwclock -r -u
~# date;hwclock -r -u
Wed Mar 28 10:00:51 CST 2018
Wed Mar 28 10:00:51 2018 0.000000 seconds
系统开机时,系统会读rtc时间设定系统时间,关机时会把系统时间写入rtc.具体执行脚本在
/etc/rc2.d/S20hwclock.sh —>/etc/init.d/hwclock.sh
从中可以看出,hwclock.sh从/etc/default/rcS 读出UTC 变量值,决定tz (时区) 是–UTC,或者 –localtime. 决定hwclock –hctosys ,hwclock -systohc 用–UTC 还是–localtime. 可以修改/etc/default/rcS VERBOSE=yes,这样系统开关机时可以从串口看到hwclock.sh的执行过程。
ntpd启动脚本在 /etc/rc2.d/S20ntpd.sh —>/etc/init.d/ntpd
执行 /etc/init.d/ntpd restart
date时间即可以立即同步。
ntpd启动后,执行ntpdate会报端口占用错误,如果想用ntpdate同步时间,可把/etc/init.d/ntpd执行属性去掉,重启系统,
执行 ntpdate 0.cn.pool.ntp.org
date时间即可以和网上同步。
修改ntpd的授时间隔(Polling interval):
默认ntpd的Polling interval是6~10, 即
minpoll 6
maxpoll 10
意思是Polling interval 64s~1024s.
minpoll最小可取3,maxpoll最大可取17, 把
minpoll 6
maxpoll 8
添加到/etc/ntp.conf, 重启系统测试:
这是时间不准时的时间,
~# hwclock -r;date
Wed Mar 28 11:00:38 2018 0.000000 seconds
Wed Mar 28 11:00:38 CST 2018
这是时间被ntp校准后的时间,经过4、5分钟,date时间确实被校准了。
:~# hwclock -r;date
Wed Mar 28 11:06:04 2018 0.000000 seconds
Thu Mar 29 11:13:36 CST 2018
但rtc没有被同时校准,网上有提示在 /etc/sysconfig/ntpd 添加
SYNC_HWCLOCK=yes
经过实际测试,date和rtc没有被同时校准,不过,过一段时间rtc也被校准了。
~# hwclock -r;date
Thu Mar 29 03:50:41 2018 0.000000 seconds
Thu Mar 29 11:50:40 CST 2018
目前还有一个小毛病是date使用localtime, hwclock -r却是UTC时间,尝试修改/etc/default/rcS UTC=no,依然如此,也许是ntpd把RTC时间改为UTC时间了吧,好在可以通过hwclock -r -u 获取和date一致的时间。