嵌入式北斗网络时间服务器设计
2020-07-29王铮齐昕陈旭东王敬
王铮 齐昕 陈旭东 王敬
摘要:介绍了一种使用北斗卫星导航系统(BDS)作为时间源的NTP网络时间服务器,给出了软、硬件设计方案和测试结果。设备采用AM3352处理器作为CPU,运行嵌入式Linux操作系统,使用ntpd软件实现了NTP授时服务。为验证NTP服务器的性能,进行了测试验证。测试结果表明,基于嵌入式系统设计的北斗网络时间服务器授时精度优于50μs,可满足工程应用需求。
关键词:卫星导航系统;网络时间服务;授时精度
中图分类号:TP391文献标志码:A文章编号:1008-1739(2020)09-60-4
0引言
北斗卫星导航系统是中国自主建设、独立运行的全球卫星导航系统,是我国国家重大战略基础设施,在北斗卫星导航系统日渐完善和市场逐步建立的情况下,推广北斗授时以提高网络安全性迫在眉睫[1]。网络时间协议(NTP)是用于网络时间同步的标准协议,广泛应用于通信、遥控、遥测等大型地面系统中,由于各系统配备时间和服务器时间源不统一,导致系统协同操作时产生较大时间误差,难以满足应用需求。为实现各应用系统时间统一及推广北斗时应用,研发基于北斗卫星导航系统的北斗网络时间服务器的需求愈发强烈。
1 NTP授时原理
NTP是一种广泛应用的网络时间同步协议,目前最新版本为NTPv4,替代并向下兼容NTPv3协议和SNTPv4协议。NTPv4协议引入了全新的时钟驯服算法,可在新型工作站和快速以太网环境中实现几十微秒的同步精度[2]。NTP协议具有3种工作模式,分别是对等模式、客户端/服务器模式和广播模式。本文以客户端/服务器模式为例,说明NTP授时服务的工作原理。
NTP客户端向NTP服务器发送NTP对时请求,并依据客户端时钟记录发出时间戳t1c,服务器依据服务器时钟记录接收到对时报文的时间戳t2s,并回复一条应答报文,记录报文发出时间戳t3s,并将t2s,t3s填入应答报文;客户端依据自身时间记录收到回复的时间戳t4c。对时通信过程如图1所示。
通过一次对时报文交互,NTP客户端获得了4个时间戳信息,t1c,t4c依据客户端时钟记录,t2s,t3s依据服务器时钟记录。offset是客户端与服务器间的时间偏差(offset为正代表客户端时间落后于服务器,c=s-offset),cs是客户端请求报文发送至服务器的路径时延,sc是服务器发送的响应报文的路径延迟。因此可组成如下方程组:
客户端可依据计算得出的offset,依据时钟调整算法调整自身时间。
2硬件架构设计
2.1硬件架构设计
嵌入式北斗网络授时服务器组主要由北斗接收天线、北斗OEM板卡、主板、电源、液晶屏、按键板及电源模块组成。选择德州仪器公司的Cortex-A8系列AM3352处理器,配备256 MB DDR3 SDRAM芯片和512 MB NAND-Flash,以太网物理层芯片使用AR8035,支持10/100/1 000 Mbit/s自适应以太网接口,组成框图如图2所示。
时间接口方面,北斗OEM板卡输出1 pps信号至AM3352芯片通用GPIO,北斗OEM板卡串口输出至AM3352芯片UART1,通过获取1 pps和串口报文作为主板时间源。液晶屏通过SPI接口连接至AM3352芯片,按键板通过USB接口连接至AM3352以实现时间显示和设备设置。
2.2操作系统选择
操作系统是Linux-3.2,为了提高Linux系统时间精度,在Linux内核中增加PPS驱动,具体操作是在内核板级文件中增加GPIO-PPS的初始化,指定连接1 pps信号的GPIO为PPS来源,并使能PPS上升沿触发,在内核编译配置过程中使能PPS驱动。
正确加载PPS驱动后,可在Linux系统/dev文件夹下发现pps0设备,正确连接北斗OEM板后,使用watch-n1/ sys/class/pps/pps0/assert指令后,可每秒刷新打印PPS时间戳信息,即代表PPS驱动正常工作,运行结果如图3所示。
2.3 ntpd修改與编译
NTP服务软件使用开源ntpd软件包,支持NMEA格式的GPS接收机作为时间参考源,并可使用Linux系统PPS驱动,高精度同步时间至外部参考源。需要注意的是,由于北斗接收机输出接口协议与NMEA协议有所不同,直接使用ntpd无法正确解析北斗接收机时间信息。对比NMEA和BD2.1协议中的ZDA语句如下:
BDZDA:$BDZDA,2,071657.00,13,02,2020,-08,00, 000000.00,,0,Y*09
GPZDA:$GDZDA, 104011.00,10,01,2019,00,00*68
BDZDA相对于GPZDA语句增加了定位模式、时区及时间有效位等信息,秒信息、年、月和日信息位置格式与NMEA相同,但向右移动了一个字段,导致无法正确解析$BDZDA语句,因此,需要针对ntpd源码包内refclock_nmea.c中的ZDA解析部分代码进行更改,将秒信息和日期信息的解析字段加1,即秒信息为第2字段,更改情况如下:
case NMEA_GPZDA:
pp->leap = LEAP_NOWARNING;
rc_time = parse_time(&date, &tofs.tv_nsec, &rdata, 2);
rc_date = parse_date(&date, &rdata, 3, DATE_3_DDMMYYYY);
更改完成后,为了编译ntpd可在嵌入式Linux环境下运行,需对ntpd源码包进行交叉编译,产生ntpd的执行文件,将其拷贝至主板根目录下,完成ntpd的编译。
2.4 ntpd配置
ntpd运行配置文件为/etc/ntp.conf,修改文件内容如下:
server 127.127.20.1 mode 88 minpoll 4 iburst prefer true maxpoll 4
fudge 127.127.20.1 stratum 1 flag1 1 flag2 0 flag3 0 flag4 0 time1 0.001 refid GPS
server 127.127.22.0 minpoll 5 maxpoll 4 iburst true
fudge 127.127.22.0 flag2 0 flag3 0 flag4 1 time1 0.001 refid PPS
其含義为使用NMEA设备/dev/gps1作为时间参考源,并使用$XXZDA信息解析时间,同时使用/dev/pps0,作为PPS源,使用上升沿作为秒沿,并通过time1指令设置1 ms的零值。接收机连接至主板CPU的串口1上对应设备/dev/ttyS1,然后在/dev文件夹下建立软连接,将/dev/ttyS1连接至/dev/gps1,供ntpd读取时间信息。并将ntpd增加至主板Linux系统init.d文件夹内自动运行脚本增加即可实现ntpd的自动启动,其中-g选型是使能超过1 000 s的初次调整。启动脚本增加内容如下:
ln -s /dev/ttyS1 /dev/gps1//建立软连接
/root/ARMNTP/bin/ntpd -g//启动ntpd服务
ntpd启动后,可使用ntpq -p指令查询ntpd参考源工作状态,正常显示结果如下:
其中GPS_NMEA(1)代表时间参考,PPS(0)代表pps0为当前时间参考,offset为参考偏差,单位为ms。若PPS(0) offset值可正常调整到1 ms以下,则ntpd已正常跟踪接收机,并具备NTP服务能力。
3实验测试
3.1测试设备
设备是嵌入式北斗网络时间服务器,测试使用仪器是网络时间综合分析仪。该测试仪内置铷原子钟及北斗接收机,可跟踪北斗卫星导航系统作为参考源,进行NTP授时精度测量。
3.2试验方法
嵌入式北斗网络时间服务器采用直接测量法进行测试,试验原理基于NTP网络时间服务原理。嵌入式北斗网络时间服务器正常开机,连接北斗卫星导航天线、综合时间分析仪开机,并正常跟踪北斗,待测试仪锁定参考源后开始测试、测试时长≥24 h,并分析测试数据波动范围、平均值及标准方差,测试设备连接如图4所示。
3.3测试结果
测试试验时间为2020年3月3日—4日,使用网络时间分析仪连续测试嵌入式北斗网络时间服务器24 h以上,测试频率为1 Hz,测试结果如图5所示。
试验统计结果如表1所示。
4结束语
本文介绍了一种嵌入式北斗网络时间服务器的设计方法,说明了其硬件架构,描述了ntpd软件适应北斗接收机的修改、交叉编译和配置,并通过实验测试验证了嵌入式北斗网络时间服务器的NTP时间服务精度,由试验数据可得,网络时间服务器时间服务精度较高,可满足工程应用的需求。
参考文献
[1]胡昌军,李信,刘佳,等.北斗授时在通信领域应用现状及推广建议[J].电信网技术,2015(3):36-39.
[2]王明,候雷,王昕.便携式NTP测试仪的设计与实现[J].时间频率学报,2017,40(1):27-35.
[3]李贞妮,张军,罗喜伶,等.基于VxWorks的NTP服务器的设计与实现[J].计算机工程与设计,2006(23):4404-4407.
[4]陈希,滕玲,高强,等.NTP和PTP协议的时间同步误差分析[J].宇航计测技术,2016,36(3):35-40.
[5] NAKASHIMA T, OSHIMA S,NAKASHIMA A.Implementation of the Performance Evaluation System for the NTP Server[C]// Communications, Computers and Signal Processing, 2003, PACRIM, 2003 IEEE Pacific Rim Conference on 2003,28-30 Aug,2003:828.
[6] RIECK,C.An Approach to Primary NTP by Using the LINUX Kernel[C]//Frequency Control Symposium, 2007 Joint with the 21st European Frequency and Time Forum,IEEE International, May 29 2007,2007:873-876.