
大家好,我是兔子。
是一个嵌入式软硬件工程师。
正在从单片机开发转岗Linux开发。
由于我的开发板上没有RTC时钟。这时,兔子我突然有了一个大胆而神奇的想法。
使用网络。来获取最新的时间。

我们可以通过date命令,查看当前开发板时间。

1.修改开发板时区
开发板默认的时区为+0区。我们可以使用date –R命令中看到。

首先和兔子一起,将开发板的时区修改为+8区。即北京时间。
改动的文件为开发板的/etc/profile
由于开发板的关键文件写保护了。
需要临时解除保护。
输入命令mount –o remount rw / 表示将根目录文件重新挂载一下。

然后输入vi /etc/profile,修改内容。

在最后一行,添加export TZ=CST-8后,保存文件。然后重启开发板。

这个操作,表示添加时区为+8区的环境变量。
重启开发板后,输入date –R指令。可以看到时区已经被调整为+8区。即北京时区。

2. 开发板连接外网
为了从网络获取最新时间。我们的开发板就必须连接互联网。
兔子我用网线,将开发板和家里的路由器连接起来。
设置开发板的IP为DHCP模式。
即输入udhcpc命令。

可以看到开发板根据路由器自动调整了自己的IP地址。
和百度握个手试试。

可以看到,连接成功。至此,开发板已正确连接互联网。
3.NTP简介
NTP是网络时间协议(Network Time Protocol)的简称,它是用来同步网络中各个计算机设备的时间的协议。目前有第三方的代码可以支持NTP。这里,兔子我使用的是ntpclient。
ntpclient的下载地址为http://doolittle.icarus.com/ntpclient/

兔子我下载的是最近的这个。
虽然是.gz格式的压缩包。但是可以在windows下直接解压。也可以将整个压缩包拷贝到虚拟机里,然后虚拟机里解压。

进入该文件夹下的Makefile文件。
将交叉编译工具调整为如图所示。
即CC = arm-fsl-linux-gnueabi-gcc

后将整个文件夹一起复制到虚拟机里并编译。

可以看到,编译通过。并生产了ntpclient可执行程序。

将可执行文件通过NFS拷贝到开发板中。
(NFS不清楚,可移步教程3)
兔子MCU:从51单片机到Linux 开发板传文件利器-NFS(教程3)zhuanlan.zhihu.com
兔子我将ntp程序拷贝到开发板的/opt目录下。

运行程序。
./ntpclient –s –d –c 1 –i 5 –h 202.108.6.95
即可从提供NTP服务器202.108.6.95上获取时间。

可以看到,程序运行成功。
这时,我们再查询一下系统时间。
date –R

这下时间就正确同步了。

这个小技巧,和兔子一起学会了么?
后续兔子还会和大家一起使用网络socket编程。通过网络获取并解析天气预报。
