李彥儒, 申 萍
(北京交通大學 北京 100044)
隨著近年來我國交通運輸網絡的迅速發展,城市軌道交通建設取得了巨大的成就,然而城軌列車與地面控制中心的通信需求仍亟待滿足。 一方面,城軌列車需要向地面控制中心發送車輛狀態信息,以便地面控制中心能夠動態地監控車輛運行狀態,例如當前車速、輪軸溫度、蓄電池電壓、牽引單元狀態等;另一方面,城軌列車發生故障時需要及時向地面控制中心發送報告,以便地面控制中心能夠準確、實時地診斷故障問題[1-2]。 4G 移動技術的適時發展為城軌列車與地面控制中心的實時、大數據通信提供了理論基礎。本文在4G 移動網絡的基礎上,應用開源、安全且代碼風格良好的嵌入式Linux 操作系統,對實現實時、高速、可靠的通信所需解決的部分關鍵性技術難點進行了研究與分析,提供了相應的解決策略。 對實現城軌列車與地面控制中心實時、高速、可靠的通信需求具有重要的意義。
城軌列車與地面控制中心通信系統結構如圖1 所示,分為車載通信系統與地面維護中心兩部分。 車載通信系統包括列車數據采集設備、嵌入式控制器以及4G 路由器。嵌入式控制器運行Linux 操作系統,實時地通過RJ45 以太網接收列車數據采集設備發送的車輛常規及故障信息, 并通過4G 路由器將車輛信息發送到4G 移動網絡。 地面控制中心采用Windows 服務器版本, 從4G 移動網絡接收車輛信息并進行分析,判斷車輛的運行狀態,并對車輛信息進行顯示、存儲。如有需要則將分析結果反饋至城軌列車。

圖1 通信系統結構Fig. 1 Structure of communication system
當城軌列車發生故障時,嵌入式控制器必須快速地做出響應,將故障信息發送至4G 移動網絡,這就對操作系統的實時性有很高的要求。 然而常規Linux 是非實時操作系統[3],因此必須對其進行改進,使其成為實時操作系統,然后將改進后的實時Linux 操作系統移植到嵌入式Linux 控制器中。 同時,4G 移動網絡采用動態IP 地址分配策略,在規定的時間內沒有通信數據則自動解除已分配的IP 地址, 需要在通信是檢測網絡狀態。 在城軌列車高速運行過程中,還可能會因為通信信號質量問題導致數據發送中斷、 數據包錯誤等情況。為了滿足可靠的通信需求, 必須對利用4G 移動網絡通信時的通信策略進行優化,加入網絡連接狀態檢測機制、數據包校驗機制、網絡故障重傳機制等。
常規Linux 操作系統為非實時操作系統, 無法滿足本文中通信系統對實時性能的要求。 約束Linux 操作系統實時性能的因素主要包括以下3 個方面[4]:
1)內核的不完全可搶占特性
優先級高的進程中斷優先級低的進程被稱為內核搶占,Linux 系統沒有提供完整的搶占機制。
2)時鐘粒度粗糙
Linux 3.0 版本內核的時鐘頻率小于1 200 Hz,時鐘周期大于0.8 ms,無法滿足實時任務調度需求。
3)中斷關閉
Linux 操作系統經常為了保護系統關鍵數據而關閉系統中斷。 導致系統不能實時響應外部中斷。
基于以上3 方面的原因,Linux 為非實時操作系統。 為了滿足城軌列車與地面控制中心的實時通信, 必須對Linux 操作系統內核的實時性進行改進。
目前對Linux 操作系統的實時性能改進主要有兩類方法:
1)Linux 內核源代碼級修改
對Linux 系統內核中與調度方式、中斷處理、時鐘與定時等相關數據結構進行修改。 這種方式需要開發人員對內核代碼有深入的了解,且改造工作量巨大[5-6]。
1)雙內核法
將一個規模較小的實時內核插入到底層硬件與Linux 操作系統內核之間。 實時任務在實時內核中運行,當有非實時任務時,Linux 內核才會工作。 雙內核法改造工作量小,能夠保證兩個內核工作的穩定性,能夠提供更為豐富的功能。 目前采用雙內核法的實時內核有Xenomai、RTLinux、RTAI 等[7]。
對比兩種方法,可以發現雙內核法更容易實現,能夠提供的功能也更多。 故本文采用雙內核法對Linux 的實時性改進,最終選用Xenomai 實時內核。加入實時內核后的Linux 實時內核結構如圖2 所示:
本文選用Xenomai 2.4.4 穩定版,Linux 內核選用2.6.24版本。 對Linux 內核的實時性改進步驟如下:
1)增加ADEOS 可適應域環境資源虛擬層。
在獲取源代碼的基礎上, 為Linux 內核加載arm 平臺下ADEOS 補丁文件,命令如下:
# $xenomai_root/xenomai -2.4.4/scripts/prepare -kernel.sh╞arch=arm ╞adeos=$xenomai/
_root/ksrc/arch/arm/patches/adeos-ipipe-2.4.4 -arm-* --linux=$linux_tree
2)配置實時內核選項
成功加載ADEOS 補丁后,選擇以下Linux 內核選項保證Xenomai 實時內核正常使用:
Xenomai,實時內核的主程序;
Nucleus,開啟實時內核對多線程機制、線程搶占調度機制的支持;
Debug support,開啟實時內核調試模式,方便系統運行過程中出現錯誤時調試;
Interfaces 子選項, 選擇需要的編程接口, 勾選POSIX API、Native API、Real-Time Driver Model, 確保在編寫應用程序時能夠使用這些編程接口。

圖2 Xenomai/Linux 實時內核結構Fig. 2 Xenomai/Linux real-time kernel structure
嵌入式Linux 移植的關鍵在于內核的配置與編譯, 并將配置好的內核下載到嵌入式控制器中[8]。
1)設置目標處理器
修改內核源碼目錄頂層Makefile 文件的ARCH 及CROSS_COMPILE 字段,確保編譯后的內核可以在ARM 架構的處理器上運行。
2)配置內核
使用圖形化配置工具menuconfig 對內核選項進行配置,裁剪不需要的內核功能及驅動程序來盡量縮小內核體積使其適應嵌入式處理器。
3)配置開發板晶振頻率
本文應用于嵌入式控制器上的三星S3C2440 處理器晶振頻率為12 MHz, 為了使內核與之匹配, 對內核文件arch/arm/mach-s3c2440/mach-smdk2440.c 進行相應配置:
s3c24xx_init_clocks(12000000);
4)修改NAND Flash 分區表
NAND Flash 是程序運行的內存空間,嵌入式控制器配備64MB NAND Flash,通過修改內核文件arch/arm/plat-s3c24xx/common-smdk.c 文件, 可以將NAND Flash 劃分為如表1 的3 個分區:

表1 NAND Flash 分區Tab. 1 The NAND Flash partition
5)內核編譯及下載
對配置好的內核進行編譯, 生成名為uImage 的內核文件,之后通過JTAG 及tftp 軟件將uImage 下載至嵌入式控制器中。
常規網絡通信采用客戶端—服務器方式,服務器運行并等待客戶端連接。 客戶端有數據傳輸請求時與服務器建立連接并發送數據。 根據4G 移動網絡IP 自動分配的機制特點,并考慮到城軌列車在運行過程中通信信號質量的變化,必須對城軌列車在運行時與地面控制中心的通信策略進行優化。優化后的通信策略如圖3 所示。

圖3 優化后的通信策略Fig. 3 Communication strategies after optimization
本文優化策略的實現基于Linux 操作系統下的Internet domain socket 網 絡 通 信 庫,遵 循POSIX 標 準[9]。 采 用 流 式socket 通信模型。
1)網絡狀態檢測
為了確保車載通信系統與地面維護中心通信時已建立連接,在嵌入式控制器調用write()函數將信息發送到4G 網絡后,如果函數返回錯誤值-1,且錯誤代碼為EAGAIN,則表示本次數據傳送不成功,刪除當前建立的socket,重新調用connect()函數建立與地面控制中心的連接,之后再次發送信息。
2)數據包校驗
流式socket 的特點是不存在信息邊界。 在傳送常規/故障信息時, 必須顯式地在信息前加入信息總長度以及校驗值信息。 為了盡量減少對嵌入式控制器的資源占用,同時最大情況地保證數據的可靠性,本文采用CRC 校驗算法。地面控制中心在接收到信息后,需要對信息再次進行校驗計算,并與信息中的校驗值相比較,如果不同則向車載通信系統反饋錯誤。
3)網絡故障重傳
車載通信系統通過write()函數向地面控制中心發送常規/故障信息后, 如果地面控制中心反饋信息顯示發送成功,則立即調用read()函數接收地面控制中心的反饋信息;如果反饋信息顯示發送不成功,則重新調用write()函數發送信息。 本文規定重新傳送的次數為5 次,如果最終傳輸仍不成功,表示當前通信信號質量太差,程序返回錯誤值,并等待一段時間后再次發送信息。
本文采用用運行服務器版Windows 的工控機平臺作為地面控制中心, 采用運行Linux 的嵌入式控制器及4G 路由器作為車載通信系統。 通信配置如表2:

表2 實驗通信配置Tab. 2 Experimental configuration for communication
通信實驗平臺如圖4,圖中框1 代表地面維護中心,框2代表嵌入式控制器,框3 為4G 路由器。

圖4 實驗平臺Fig. 4 Experimental platform
本實驗分如下情況進行測試:
1) 網絡傳輸速率測試
車載通信系統分5 次向地面控制中心傳送300 MB 的單個 文 件, 測得 傳 輸 時 間 分 別 為112 s、121 s、131 s、125 s 及122 s。 平均傳輸速率為2.45 MB/s, 經校驗傳輸前后文件的MD5 值相同。
2)實時Linux 內核性能測試
在車載通信系統上分別采用常規Linux 內核及改進后的實時Linux 內核, 以512 ms 為時間間隔, 周期性的發送100 Byte 數據進行50 次本地回環測試。 測試結果如圖5所示。
3)常規/故障信息發送測試

圖5 本地回環測試Fig. 5 Local loopback test
車載通信系統采用實時Linux 內核及優化后的通信策略,與采用常規Linux 內核及常規通信策略進行對比測試,以5 min 為最大時間間隔隨機向地面控制中心發送4096Byte數據,所傳送的數據大小足以表示常規/故障信息。 測試結果如圖6 所示。 圖6 曲線中的斷點代表本次發送失敗。

圖6 信息發送測試Fig. 6 Information transmission test
本文對Linux 操作系統進行了實時性,優化了城軌列車與地面控制中心的通信策略,并進行實驗驗證,得出如下結論:
1)采用4G 移動通信網絡完全能夠滿足高速通信的需求。
2)改進后的實時Linux 操作系統在實時性能方面有了很大的提升,能夠實時響應采集車輛數據采集設備的信息發送請求。
3)采用改進后的實時Linux 操作系統與優化的通信策略,明顯的縮短了信息發送時間,同時有效地保證了通信的可靠性。 完全能夠滿足城軌列車與地面控制中心實時、高速、可靠的通信需求。
[1] 劉永超. 基于Web的高速列車故障診斷專家系統關鍵技術研究[D]. 大連:大連交通大學,2012.
[2] 邵位. 列車故障診斷專家系統智能技術研究[D]. 大連:大連交通大學,2014.
[3] 韓守謙, 裴海龍,王清陽. 基于Xenomai的實時嵌入式Linux操作系統的構建[J].計算機工程與設計,2011,32(1):98-102.
[4] BI Chun-yue,LIU Yun-peng,WANG Ren-fang. Research of key technologies for embedded Linux based on ARM[C].International Conference on Computer Application and System Modeling,2011:1231-1240.
[5] 劉勝,王麗芳. 基于多核PC的Linux系統實時性改造[J]. 微電子學與計算機,2013,30(8):120-123.
[6] 嚴麗萍,宋凱,鄧胡濱. 基于嵌入式應用的Linux內核實時性改進研究[J]. 計算機工程與設計,2011,32(1):121-124.
[7] 王濤. 基于交換式以太網的列車通信網絡實時性研究[D].北京交通大學,2014.
[8] 李文,張建澤. 基于S3C2440的嵌入式Linux系統移植[J]. 化工自動化及儀表,2010,37(9):88-92.
[9] Michael Kerrisk. The Linux Programming Interface [M].Beijing:Post & Telecom Press,2014.