国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

嵌入式Linux 下IEEE 1588 時間同步的實現(xiàn)

2012-03-18 08:09:54易勝藍
電訊技術(shù) 2012年5期
關(guān)鍵詞:以太網(wǎng)報文時鐘

易勝藍

(中國西南電子技術(shù)研究所, 成都610036)

1 引 言

目前,用于時間同步的協(xié)議中使用得較多的是網(wǎng)絡(luò)時間協(xié)議(Network Time Protocol,NTP),這是一種低成本的網(wǎng)絡(luò)對時協(xié)議。但是,由于網(wǎng)絡(luò)時間協(xié)議的時間標記(Time Stamp)是在協(xié)議的應用層中獲得的,無法滿足太高的時間精度要求,只能提供毫秒級別的對時精度[1]。與NTP 協(xié)議不同的是,IEEE 1588精確時鐘同步協(xié)議(Precision Time Synchronization Protocol,PTP)可以在不增加硬件成本的條件下,達到幾微秒到幾十微秒級別的時間同步精度[2],通過網(wǎng)絡(luò)接口在協(xié)議的底層獲取時間標記,達到時鐘同步的效果。如果需要更高的精度要求,可以使用專門的硬件模塊獲取時間標記,將時間戳的獲取點移至物理層,由硬件完成時間戳的獲取,則可以將時鐘同步精度提高到亞微秒級[3]。本文在對IEEE 1588 的同步原理詳細分析的基礎(chǔ)上,提出一種在嵌入式Linux 系統(tǒng)中以軟件方式實現(xiàn)精準時間協(xié)議(PTP)的方法,并給出了相應的應用平臺實現(xiàn)。

2 時鐘同步原理

IEEE 1588 通過時間報文交換的方法實現(xiàn)分布式系統(tǒng)中各節(jié)點的時間同步。在系統(tǒng)中往往會有一個主時鐘(master),它提供整個系統(tǒng)的時間基準,而系統(tǒng)中的其他時鐘則為從時鐘(或叫做子時鐘,slave)。在系統(tǒng)中,每個時鐘狀態(tài)的確定是通過最佳時鐘算法確定的。主時鐘和從時鐘通過交換報文的方式來確定主從時鐘之間的時間偏移以及報文傳輸?shù)木W(wǎng)絡(luò)延遲,PTP 協(xié)議通過兩次包含有時間戳的報文的發(fā)送,真正精確的發(fā)送時間被正確記錄了下來,用來最終計算出主時鐘和從時鐘之間的時間差。主時鐘每隔一段時間將本地時間發(fā)布到網(wǎng)絡(luò)上,從時鐘進行時間戳的接收并更新本地時鐘,同時從時鐘不斷地進行線路延時的計算,以保證時鐘的精確[4]。

如圖1 所示,主時鐘節(jié)點按照定義好的時間間隔,將時間同步報文(Sync)發(fā)送給網(wǎng)絡(luò)上所有的從時鐘節(jié)點,該時間同步報文發(fā)送的精確時間戳TM1被同時記錄了下來,該同步時間戳在隨后發(fā)送的跟進報文(Follow -up)中被發(fā)送給從時鐘節(jié)點。從時鐘節(jié)點在收到該時間同步報文后,接收時間戳TS1被記錄了下來, TM 1、TS1這兩者的時間偏差包括傳輸線路中的報文傳輸延遲和主從時鐘的偏差。由于分布式系統(tǒng)中各個節(jié)點的布線長度、布線方式和該節(jié)點在網(wǎng)絡(luò)中位置的不同,時鐘報文的傳輸延遲也將會變得不同。為了提高時鐘同步的精度,必須通過測量的方式消除該時鐘傳輸延遲。從時鐘節(jié)點以固定的時間間隔將延遲請求(Delay Request)報文發(fā)送給主時鐘節(jié)點,同時將該報文的發(fā)送時間戳TS2記錄下來,主時鐘節(jié)點在收到該延遲請求報文的同時,將接收時間戳TM2記錄下來,然后主時鐘節(jié)點在隨后的延遲響應(Delay Response)報文中將該時間戳發(fā)送給相應的從時鐘節(jié)點。

圖1 主從時鐘同步原理Fig.1 Time synchronization principle of master and slave

在計算延遲的過程中,假設(shè)網(wǎng)絡(luò)傳輸介質(zhì)是對稱均勻的,因此可以認為主時鐘到從時鐘的時間延遲跟從時鐘到主時鐘的時間延遲是對稱相等的。因此,可以得出以下兩個式子:

式中,T Δ為從時鐘相對主時鐘的偏差, Td為報文的網(wǎng)絡(luò)傳輸延遲。

由式(1)和式(2)可以求得:

根據(jù)計算出來的偏差TΔ,調(diào)節(jié)從時鐘,即可實現(xiàn)時間同步的功能。

3 最佳時鐘選擇算法設(shè)計

在IEEE 1588 精確時鐘同步協(xié)議中,首先要從眾多時鐘當中找出一個時鐘,作為系統(tǒng)的主時鐘,其余時鐘為從時鐘。這個功能需要使用最佳主時鐘算法來實現(xiàn),最佳主時鐘算法模塊主要用于選擇本地網(wǎng)絡(luò)中的最佳時鐘作為主時鐘,同時決定本地時鐘所應處的狀態(tài)。最佳主時鐘算法(Best Master Clock A lgorithm)由狀態(tài)定斷算法和數(shù)據(jù)集比較算法[1]這兩部分算法組成。

數(shù)據(jù)集比較算法首先在所有同步報文的不同數(shù)據(jù)集中挑選出合格的同步報文,然后對這些同步報文進行篩選,以選出可用的最佳報文。其實現(xiàn)的流程如圖2 所示:它的作用是根據(jù)同步報文的不同數(shù)據(jù)集,通過從合格的同步報文里篩選,獲得最佳的報文。在收到報文的時候,首先判斷該報文是否是同步報文,是的話則繼續(xù)運行;接著使用Identifier-Compare()函數(shù)對時鐘層和時鐘標志位進行比較,如果這兩種屬性不同,則可以由此得出較好的時鐘,如果這兩者屬性相同,則需要繼續(xù)往下運行;進行時鐘屬性比較,如果時鐘屬性不同,可以得到較好的時鐘,如果時鐘屬性也相同,則繼續(xù)往下運行,使用UUID-comparision()函數(shù)對不同的UUID 進行比較,這樣經(jīng)過層層比較,所有端口都運行該算法,最終可以選出最佳的時鐘。

圖2 數(shù)據(jù)集比較算法流程Fig.2 Data set comparation algorithm flow

狀態(tài)定斷算法主要進行狀態(tài)的判斷和數(shù)據(jù)集的更新,在確定最佳主時鐘后,狀態(tài)定斷算法根據(jù)不同數(shù)據(jù)集的信息計算出系統(tǒng)中每個時鐘的各個PTP 端口的推薦狀態(tài),具體共有8 種推薦狀態(tài):未校正、從時鐘、待機、主時鐘、監(jiān)聽、禁止、故障和初始化等狀態(tài),本地時鐘將根據(jù)結(jié)果相應地調(diào)整狀態(tài)。狀態(tài)定斷算法根據(jù)運算分析的結(jié)果,動態(tài)調(diào)整各個時鐘和端口的狀態(tài),所以當主時鐘出現(xiàn)性能下降或產(chǎn)生故障的時候,系統(tǒng)能夠自動選擇其他更合適的時鐘作為主時鐘。

4 嵌入式Linux 操作系統(tǒng)移植

系統(tǒng)的應用平臺選用基于ARM9 的嵌入式系統(tǒng),處理器芯片為三星的ARM9 芯片S3C2440,應用平臺帶有一塊256MB 的Nand Flash 芯片用于存儲Bootloader、Linux 內(nèi)核和根文件系統(tǒng)。嵌入式Linux操作系統(tǒng)是文中IEEE 1588 協(xié)議實現(xiàn)的基礎(chǔ),為協(xié)議的運行提供運行的基礎(chǔ)。

首先,根據(jù)應用平臺的特性移植Bootloader,本系統(tǒng)使用的Bootloader 為u-boot 1.1.6,其完成的主要任務有:為Flash 分區(qū),分配好系統(tǒng)的存儲空間,分別為u-boot 區(qū)、Linux 內(nèi)核分區(qū)和根文件系統(tǒng)分區(qū);初始化處理器和外設(shè)的硬件資源配置;傳遞啟動參數(shù)給Linux 內(nèi)核,調(diào)用Linux 操作系統(tǒng)。U-boot 的實現(xiàn)非常依賴于具體硬件,需要根據(jù)硬件配置將U-boot 移植到嵌入式系統(tǒng)中。然后,根據(jù)應用平臺的硬件特性配置Linux 內(nèi)核,并將Linux 內(nèi)核編譯為zImage 格式,應用系統(tǒng)選用的內(nèi)核版本為2.6.30.4,可以提供最新的應用特性。最后,使用BusyBox 工具制作所需要的根文件系統(tǒng)。BusyBox 將系統(tǒng)中的許多功能模塊集成到一個名叫BusyBox 的可執(zhí)行文件中,并通過使用不同的命令名稱來調(diào)用相應的功能模塊,十分容易定制自己的根文件系統(tǒng)。

將Bootloader、Linux 內(nèi)核和根文件系統(tǒng)編譯完成后,即可通過JTAG 工具燒寫到Nand Flash 的對應分區(qū)中。

5 PTP 協(xié)議軟件實現(xiàn)

如圖3 所示為所設(shè)計網(wǎng)絡(luò)時間同步系統(tǒng)的結(jié)構(gòu)圖,主要包含PTP 協(xié)議處理模塊、PTP 發(fā)送模塊、PTP接收模塊和時間戳添加模塊。其中PTP 協(xié)議處理模塊位于應用層中,使用Linux 操作系統(tǒng)的網(wǎng)絡(luò)API 實現(xiàn)。PTP 發(fā)送模塊和PTP 接收模塊使用UDP 傳輸協(xié)議進行時間同步報文的發(fā)送和接收工作,時間戳的添加和讀取工作在驅(qū)動層完成。

圖3 網(wǎng)絡(luò)時間同步結(jié)構(gòu)圖Fig.3 Network time synchronization structure

5.1 PTP 協(xié)議處理模塊實現(xiàn)

PTP 協(xié)議處理模塊是實際的運行模塊,是整個精確時間同步協(xié)議實現(xiàn)部分的核心,它針對主從時鐘節(jié)點的運行狀態(tài)不同執(zhí)行不同的任務。PTP 協(xié)議的接收、發(fā)送控制部分運行于UDP 傳輸協(xié)議之上以實現(xiàn)PTP 報文的接收和發(fā)送,主程序模塊在應用層需要完成協(xié)議狀態(tài)機的轉(zhuǎn)化、報文計算、時鐘同步計算、幾個數(shù)據(jù)集和接收發(fā)送模塊的控制。

為了在不使用專門硬件的情況下,能夠達到最高的時間記錄精度,記錄時間戳的功能被添加在網(wǎng)絡(luò)接口的驅(qū)動程序中,在網(wǎng)絡(luò)接口的驅(qū)動程序中實現(xiàn)時間戳的精確添加。其中,主時鐘節(jié)點按照定義好的時間間隔將同步時間報文(Sync)和Follow-Up報文發(fā)送給網(wǎng)絡(luò)上所有的從時鐘節(jié)點,并且對從時鐘節(jié)點的延遲請求做出響應。同樣,從時鐘節(jié)點需要按照固定時間間隔將延遲請求報文發(fā)送給主時鐘節(jié)點并接收來自主時鐘節(jié)點的響應報文,根據(jù)該響應報文中的時間戳計算主從時鐘的時間偏移和主從時鐘節(jié)點間網(wǎng)絡(luò)傳輸延遲,并根據(jù)時間偏移和傳輸延遲更新本地時鐘。其中時間同步報文(Sync)和延遲請求報文(Delay-Request)采用組播方式發(fā)送,跟進報文(Follow -Up)和延遲相應報文(Delay -Response)采用廣播方式發(fā)送。

5.2 時間戳獲取

PTP 協(xié)議處理模塊實現(xiàn)的精度主要受到時間戳精度的影響,而報文時間戳的精確程度又主要是受同步算法、系統(tǒng)硬件等因素的影響。在與硬件特性相關(guān)的方面,網(wǎng)卡芯片的效率、晶振穩(wěn)定程度、內(nèi)存訪問速度和CPU 主頻等都會對時間戳精度造成影響。在特定的硬件平臺基礎(chǔ)上,時間戳獲取的位置又很大程度上影響了時間戳的準確性,時間戳可以在應用層、驅(qū)動層或者Mac 與PHY 之間獲取。通過前面的報文傳輸過程分析可以看出,時間戳的獲取越接近硬件底層, 時間戳獲取的時間誤差就越小。因此,在精確時間協(xié)議實現(xiàn)的時候,時間戳的標記應該做到盡量接近硬件底層。

本文通過添加Linux 操作系統(tǒng)的網(wǎng)絡(luò)驅(qū)動層函數(shù)的方法來獲取和添加時間戳。在同步報文發(fā)送的出口幀交給MAC 控制器的時刻加上出口時間戳并保存起來,在同步報文接收的入口幀到達網(wǎng)絡(luò)接口中斷服務子程序的入口處加上時間戳并保存起來。

圖4 以太網(wǎng)幀結(jié)構(gòu)Fig.4 Ethernet frame structure

以太網(wǎng)幀的典型結(jié)構(gòu)如圖4 所示,包括源地址、目的地址、類型、數(shù)據(jù)、校驗碼和前導碼。以太網(wǎng)幀是OSI 參考模型數(shù)據(jù)鏈路層的封裝,網(wǎng)絡(luò)層的數(shù)據(jù)包加上以太網(wǎng)幀頭和幀尾,構(gòu)成可由數(shù)據(jù)鏈路層識別的數(shù)據(jù)幀。因此可以在收到本機網(wǎng)絡(luò)層傳遞過來的數(shù)據(jù)后,在網(wǎng)絡(luò)數(shù)據(jù)報頭部加上時間戳的標記,在收到對方的以太網(wǎng)幀的時候,獲取對方發(fā)送的時間戳參數(shù)。接收和發(fā)送時間戳任務的實現(xiàn)主要通過add-stamp 和get-stamp 這兩個函數(shù)完成。add-stamp為添加時間戳的函數(shù),用于在發(fā)送同步報文的時候添加時間戳;add-stamp 的關(guān)鍵實現(xiàn)部分如下所示:

a=get-utime();

add-to-frame(time-t a,frame);

其中,get-utime 函數(shù)用于從系統(tǒng)中獲得以μs 為單位的時間,add-to-frame 函數(shù)將獲得的時間參數(shù)以時間戳的方式添加到以太網(wǎng)幀中。

get-stamp 為獲取時間戳的函數(shù),在網(wǎng)絡(luò)驅(qū)動層接收到同步報文的時候,用于從同步報文中獲取對方發(fā)來的時間戳。其關(guān)鍵實現(xiàn)的函數(shù)為utimefrom-frame,該函數(shù)用于將從收到的以太網(wǎng)幀中獲得的時間參數(shù)提取出來。

實際的測試表明,通過在網(wǎng)絡(luò)驅(qū)動層添加時間戳的方法能夠達到10 μs量級的同步精度。

6 結(jié)束語

本文從IEEE 1588 協(xié)議出發(fā),在嵌入式Linux 操作系統(tǒng)中,對時鐘同步協(xié)議進行詳細分析,設(shè)計實現(xiàn)了最佳時鐘選擇算法和PTP 協(xié)議處理模塊,并對如何在網(wǎng)絡(luò)驅(qū)動層添加時間戳進行了介紹。實驗結(jié)果表明,通過該方法能夠達到10 μs量級的同步精度,較好地實現(xiàn)了時鐘同步的效果。

[1] 王曉冬, 闞德濤, 張志武.以太網(wǎng)的時鐘同步技術(shù)[ J] .電子工程師,2008,34(9):47-50.

WANG Xiao -dong, KAN De -tao, ZHANG Zhi-wu.Clock synchronization technology for ethernet[ J] .Electronics Engineer, 2008, 34(9):47-50.(in Chinese)

[2] 魯駿, 張向利,范曉峰.嵌入式Linux 下時鐘同步系統(tǒng)的分析與實現(xiàn)[ J] .儀表技術(shù)與傳感器,2009(3):64-66.

LU Jun, ZHANG Xiang-li, FAN Xiao-feng.Analysis and realize of clock synchronization under embedded Linux[J] .Instrument Technology and Sensor,2009(3):64-66.(in Chinese)

[3] IEEE 1588-2002, IEEE standard for a precision clock synchronization protocol for networked measurement and control systems[S] .

[4] 李聰,高麗.基于IEEE 1588 的時鐘同步技術(shù)在分布式系統(tǒng)中的應用[J] .電子設(shè)計工程,2009,17(12):54-56.

LI Cong, GAO Li.Application of time synchronization technology based on IEEE1588 in distributed system[J] .Electronic Design Engineering,2009,17(12)54-56.(in Chinese)

[5] 戴寶峰, 崔少輝, 常健.IEEE 1588 最佳主時鐘算法的分析與實現(xiàn)[ J] .儀表技術(shù),2008(2):29-31.

DAI Bao-feng, CUI Shao-hui, CHANG Jian.Analysis and realize of IEEE 1588 best main clock algorithm[ J] .Instrument Technology, 2008(2):29-31.(in Chinese)

猜你喜歡
以太網(wǎng)報文時鐘
基于J1939 協(xié)議多包報文的時序研究及應用
汽車電器(2022年9期)2022-11-07 02:16:24
別樣的“時鐘”
基于1500以太網(wǎng)養(yǎng)豬場的智能飼喂控制系統(tǒng)的設(shè)計與實現(xiàn)
古代的時鐘
CTCS-2級報文數(shù)據(jù)管理需求分析和實現(xiàn)
淺析反駁類報文要點
中國外匯(2019年11期)2019-08-27 02:06:30
有趣的時鐘
談實時以太網(wǎng)EtherCAT技術(shù)在變電站自動化中的應用
電子制作(2017年24期)2017-02-02 07:14:44
ATS與列車通信報文分析
時鐘會開“花”
亳州市| 桦甸市| 神池县| 申扎县| 郑州市| 北海市| 苍梧县| 洪泽县| 依安县| 玉田县| 那坡县| 泗阳县| 定安县| 台南县| 江城| 即墨市| 通渭县| 台北县| 龙南县| 汨罗市| 阳山县| 桐梓县| 福泉市| 光山县| 东阿县| 乡城县| 云阳县| 隆昌县| 南澳县| 玉山县| 体育| 怀化市| 林州市| 长海县| 游戏| 汶川县| 汪清县| 浦城县| 旺苍县| 西充县| 漳州市|