通过请求NTP服务器实现网络对时

  Linux中如何实现网络对时,其中一种做法是请求【NTP服务器】来实现精准对时,这种做法相对来说更加精准,更加便捷。

  

步骤1:首先,NTP对时的第一步是要验证你手中的板子与你的【NTP服务器】之间的网络通信是否正常,验证网络是否正常就不赘述了,【ping】一下就好,地址解析不出来的就检查一下自己【DNS】设置。

步骤2:网络通信没有问题的情况下,尝试用【ntpdate】命令请求一下【NTP服务器】,以验证功能是否能够满足要求。

  发现自己没有这个命令,这时候可以考虑安装命令,由于系统是自己做的,所以选择直接用【buildroot】勾选编译,如图所示。

  

   勾选编译,一切正常。

 

  开始验证,【ntpdate $IP】,$IP就是【NTP服务器】的IP地址。

  

  这样是正常的。

 

  如果看到同步成功,但是【date】所显示的时间却不正确,就要观察一下,是不是【时区】设置的有问题,因为这种情况我也遇到了,由于之前设置时间的时候,并没有关注时区,只是单纯的把时间修改掉了,所以看起来像是没什么问题,但是到了网络自动对时的时候,会根据你当前设置的【时区】来完成对时。

  要查看时区,最简便的方式是查看【date】命令输出后面的这三个字母,如图所示。

  

  原本我这里是【UTC】,因此NTP同步成功后,时间比真实的早8个小时。

 

  那么问题来了,如何修改时区?

  如果你是用现成的系统,系统里已经有【zoneinfo】,那就按照网络中描述的改变链接文件的方式修改就好,但是如果这属于你构建系统的一部分,可以参考我的另一篇随笔【https://www.cnblogs.com/J-YANG/p/14822231.html】。

 

  修改完时区,这时候再看刚刚同步的时间就正常了。

  

 

步骤3:现在【date】已经被同步,但是这个时间并不会长久保存,此时需要将时间写入【RTC】。

  需要用到【hwclock】,这里要提醒一点,【hwclock】保存进去的时间没有时区这个概念。

  比如我现在用的是【CST】时间,如图。如果直接用【hwclock -w】,那么我保存进去的时间就如图所示,原封不动保存进去,那么当我有一天要取出【RTC】时间,将它设置到系统里时,就要用【hwclock -s】。

  

 

  但是如果我希望保存到【RTC】中的时间是【UTC】,以方便今后不管【时区】如何设置,都可以很轻松的转换过去,不用再重新同步,那就要考虑在【RTC】中保存【UTC】时间。当然,如果要保存【UTC】时间,那么取出来设置到系统里的时候也要相应的转换一下,如图所示。

  

 

  这两种方式搭配起来看就更好理解了。

  

 

   从【RTC】中读取出来设置到system,这个动作可以考虑加入到开机启动脚本。

 

结语:3个步骤就完成了【通过请求NTP服务器实现网络对时】,可以看出这件事情并不难,但是里面有几个需要注意的点,真正处理好这些方面才能更好的完成整个系统的构建。

 

posted @ 2021-05-28 15:40  J&YANG  阅读(1807)  评论(0编辑  收藏  举报