王錚 齊昕 陳旭東 王敬
摘要:介紹了一種使用北斗衛星導航系統(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.