茅正沖,葉臻,黃芳
(江南大學 物聯網學院,無錫214122)
茅正沖(副教授)、葉臻(碩士研究生),主要從事嵌入式軟件構件技術方向的研究;黃芳(講師),主要從事工業控制方向的研究。
引 言
為了確保氣象數據的準確可靠,需要每隔一定距離架設一個自動氣象站,與中心站形成一個自動氣象站網。因此,自動氣象站數量多、分布廣,而且很多是架設在無人值守地區。由于業務上的需求,采集器時常需要進行應用程序更新。目前的程序更新方式比較傳統:首先由開發人員修改源代碼,編譯生成單塊式的應用程序,然后由維護人員帶至現場進行更新。這樣的更新方式需要耗費大量的人力物力,而且在一些環境、氣候惡劣的情況下還難以進行。
本文提出的基于構件的遠程更新方案如圖1所示。
遠程更新系統的硬件結構如圖2所示。遠程更新系統由客戶端和服務器端兩部分組成??蛻舳擞刹杉骱虶PRS模塊兩部分組成,安裝在自動氣象站采集箱內;上位機作為遠程更新服務器,軟件維護人員可通過上位機上的遠程更新控制軟件與采集器連接,進行程序更新。

圖1 基于構件的遠程更新方案
采 集 器 采 用ARM 處理器和嵌入式 Linux 操 作 系統。/mnt/data1/和/mnt/data2/目 錄 采用的是yaffs文件系統,用于保存用戶數據;其他目錄采用的是ramdisk文件系統,用于保存系統文件,系統重啟后,保存的內容消失,數據重新加載,可以防止系統文件被篡改。GPRS模塊使用的是宏電公司的H7118GPRS DTU,用串行通信數據線將其與采集器的串行接口連接,即可使采集器通過其與上位機通信。上位機上的遠程更新控制軟件是基于宏電公司提供的數據中心開發包和微軟的MFC類庫開發的。

圖2 遠程更新系統硬件結構
在自動氣象站嵌入式程序遠程更新系統中,需要傳輸的是由Linux共享庫文件、ARM 可執行文件、xml文件以及更新配置文件經壓縮形成的壓縮包文件,若傳輸的數據發生任何錯誤、丟包等現象,都有可能導致更新包失效,程序更新無法進行。由此可見,本應用對數據傳輸的可靠性要求很高,對傳輸速率的要求相對較低,因此應該選用TCP協議進行傳輸。
對TCP包的封包和解包都由DTU 和配套的數據中心開發包中的函數實現,所以只需設計基于串行接口的文件傳輸數據包格式,采集器和上位機根據約定的數據包格式進行文件的傳輸。
為了保證文件傳輸與數據采集可以同時進行,在此設計了一種與自動氣象站通信協議兼容的文件傳輸數據包格式。
服務器端發送的數據包的基本格式為:
PU[……]↙
那么,什么是“創造力”?德國學者海納特在《創造力》一書中指出:“創造力”一詞來源于拉丁語,大意是創造、創建、生產、造成。它與“成長”詞義相近。從詞源上看,“創造力”指在原先一無所有的情況下,創造出新東西。青年時代是質疑、求索和發現的時代,是一個發展創造力和實現創造的階段?!皠撛臁北緛砭桶俺砷L”的意思。每個青年在求學期間,既是在求知,也是在增強創造力,是知識和能力成長的時期。
“PU”為包頭,“↙”表示換行符,“[……]”為數據包的具體內容。下面對不同類型數據包的格式做詳細介紹。
文件名包:
PU[Nn……n[cc]]↙
“N”為文件名包的標識;“n……n”為文件名,長度不定,不超過64字節;“cc”為校驗和,占兩字節,計算方法是求出文件名中每個字符ASCII碼之和,保留最低字節,再轉換為十六進制數對應的兩字節ASCII碼。
校驗包:
PU[Cm……mcc]↙
“C”為校驗包的標識,“m……m”為md5信息摘要的字符串形式,占32字節;“cc”為校驗和,占兩字節,計算方法是求出32字節信息摘要之和,保留最低字節,再轉換為十六進制數對應的兩字節ASCII碼。校驗包的作用是保證文件內容的準確無誤,這對提高遠程更新的可靠性至關重要,會在后面的內容中詳細闡述。
PU[Dnnd……dcc]↙
“D”為文件內容包的標識;“nn”為包號,占兩字節,為一字節包號對應十六進制數的ASCII碼。“d……d”為文件內容,占512字節,為256字節二進制數據對應十六進制數的ASCII碼;“cc”為校驗和,占兩字節,計算方法是求出512字節數據之和,保留最低字節,再轉換為十六進制數對應的兩字節ASCII碼。更新包中的內容就是通過此類數據包發送的。其他內容包消息略——編者注。
客戶端在收到服務器端發送的其他消息后,會根據情況給服務器端回復ASCII碼表中定義的ACK、NAK 或者CAN 信號。
文件傳輸流程如圖3所示。上位機依次發送文件名包、校驗包、文件內容包、文件內容包結束消息、傳輸結束消息,根據采集器回復的信號決定重發、發送下一個包或者終止發送。若收到NAK 信號或者超過設置的超時時間后還未收到信號,則會進行重發。重發超過設置的次數之后,將會終止發送。這樣可以防止因為一些特殊情況導致不斷重發、浪費流量的情況。
更新包為壓縮文件,壓縮文件中至少應包含ARM 可執行文件、Linux共享庫文件、xml文件中的一種,更新配置文件必不可少。更新配置文件記錄更新包中的文件名稱以及對應的類型,采集器接收到更新包后,解壓更新包,然后根據更新配置文件中的配置信息進行相應的操作。
構件式的數據采集程序由框架構件、功能構件、解析器和配置構件4個部分組成,對應更新包中的ARM 可執行文件、Linux共享庫文件和xml文件。
為了防止GPRS信號不穩定造成通信鏈路中斷、更新包傳輸失敗,從而導致整個更新包重新傳輸、浪費通信流量、增加傳輸時間,設計了一種斷點續傳機制,下面詳細介紹其實現方法。
在采集器中創建一個更新包信息記錄文件來記錄未接收完畢的更新包信息,如文件名、信息摘要、接收時間、斷點位置等。在發送更新包之前,上位機會首先發送獲取待續傳文件信息消息給采集器,若采集器中有未接收完成的臨時文件,則會返回待續傳文件信息給上位機。上位機從接收到的斷點位置開始發送文件,采集器在接收過程中,每收到一個正確的數據包,就會把新的斷點位置同步到更新包信息記錄文件中。若更新包接收成功,則會從更新包信息記錄文件中刪除對應的信息。這樣,無論是什么原因導致的傳輸中斷,在下一次傳輸時,都能保證采集器從斷點處開始接收更新包。

圖3 文件傳輸流程
為了確保更新包的內容在傳輸過程中沒有發生改變,使用了md5算法來驗證服務器端發送的更新包與客戶端接收到的更新包的一致性。
md5算法是一種不可逆的字符串變換算法,經過它計算得到的md5信息摘要是唯一的,不管字符串發生了什么變化,計算得出的md5信息摘要都是不一樣的。通過這種機制,既保證了更新包內容的正確性,又大大提高了更新成功的幾率。
應用程序目錄結構如圖4 所 示。在/mnt/data1/目 錄 下 有data、info、program_a、program_b、program_download 幾 個子目錄以及采集程序、更新控制程序和啟動腳本。data目錄用于存放采集進程生成的氣象數據文件;info目錄用于存放應用程序的配置文件;program_a與program_b目錄用于存放兩個版本的應用采集程序,以確保更新的可靠性;program_download用于保存接收到的更新包;更新程序、采集程序和啟動腳本的作用將在下一節詳細介紹。

圖4 應用程序目錄結構
采集器啟動后首先會運行啟動腳本,啟動腳本根據加載位置配置文件,從program_a或program_b目錄加載采集程序,然后加載更新控制程序。啟動腳本執行完畢后,采集控制程序和更新進程就同時存在于內存之中了。
上位機發送更新包時,采集進程會根據2.2節規定的數據包格式解析數據包,進行數據包的校驗、文件信息的存儲、文件內容的存儲以及應答信號的發送。更新包接收完畢并確保正確后,若用戶發送“更新程序消息”,采集進程則會通過消息隊列發送消息給更新進程,通知更新控制進程進行采集程序的更新。
更新控制程序流程圖如圖5所示。采集進程啟動后,會進入阻塞狀態,直至被消息隊列傳來更新控制程序請求喚醒。接著更新進程會終止當前正在運行的采集進程,解壓更新包,根據更新配置文件中的配置信息將可執行程序、共享庫文件或xml文件移動到相應的目錄,覆蓋舊版的文件。
然后更新控制進程清空消息隊列,啟動新版采集程序。若新版采集程序運行成功,則會向消息隊列發送新版采集進程信息,在一定時間內,若更新進程從消息隊列中接收到新版采集進程信息,則更新成功,否則更新失敗。若更新成功,則修改加載位置配置文件,使加載位置指向新版采集程序的目錄;若更新失敗,則啟動舊版采集程序。
通過此種機制,提高了更新的可靠性,即使更新包存在問題、導致新版采集程序運行失敗,也可以運行舊版采集程序,保證數據采集的連續性。由于自動氣象站需要不間斷地進行數據采集,因此這種保證是至關重要的。

圖5 更新控制程序流程圖
圖6為根據此套方案開發的自動氣象站嵌入式程序遠程更新系統服務器,使用此程序與配套的客戶端程序進行了多次遠程更新測試。測試結果表明,此套方案可以成功地實現采集程序的遠程更新。采集程序維護人員首先通過服務器設置配置IP地址和端口號,DTU 模塊會自動進行連接。連接成功后即可選擇更新包發送,發送成功后單擊“更新程序”按鈕即可控制采集器自動進行程序更新。

圖6 自動氣象站嵌入式程序遠程更新服務器
本方案最大的優點是基于構件,更新時,只需發送由若干構件組成的更新包,與傳統的單塊式嵌入式應用程序相比,大大節省了傳輸的流量,提高了更新的效率。構件化前后的文件大小表略——編者注。
構件化之后,雖然文件的總大小191.4KB略大于構件化之前的大小175.6KB,但是最大構件只有31.8KB,遠小于單塊式采集程序的大小171.1KB。而在更新時,更新包中往往只有一個或幾個構件,因此絕大多數情況下,構件化采集程序更新時需要耗費的流量遠小于單塊式采集程序,更新成本更低,效率更高。
結 語
本文基于嵌入式Linux操作系統以及嵌入式文件系統,設計了自動氣象站采集程序遠程更新方案,創新點是以構件的形式進行更新,更加節省流量。實驗表明,該方案取得了良好的效果。下一步的工作目標是優化文件傳輸協議和壓縮算法,進一步提高更新包傳輸的效率、減少流量的消耗。
編者注:本文為期刊縮略版,全文見本刊網站www.mesnet.com.cn。
[1]朱偉斌,張濤,顧海濤,等.基于網絡的嵌入式設備遠程升級系統[J].電子技術與應用,2014(2):135-138.
[2]李鐵男.基于嵌入式Linux的無線文件傳輸系統的實現[J].計算機工程與設計,2011,32(6):1979-1986.
[3]劉明,方嬌莉,尹業華,等.嵌入式監控系統中斷點續傳的設計與實現,[J].計算機技術與發展,2012,22(2):192-197.
[4]朱孟江,聶云杰.嵌入式終端IAP 斷點續傳的研究與實現,[J].單片機與嵌入式系統應用,2014,14(1):7-9.
[5]趙炯,賈培源,李中山,林旺城.嵌入式設備遠程在線升級技術[J].計算機工程,2012,36(12):262-264.
[6]李俊,王金海.基于TFTP 協議的ARM 軟件遠程更新系統[J].工礦自動化,2010,36(7):22-25.
[7]王江波,楊仁剛.基于GPRS的配變監控終端遠程更新和管理維護的研究[J].電測與儀表,2009,46(11):9-12.
[8]李桂新,蔣敏玉,黃軍.基于現場總線實現遠程在線更新程序的技術[J].信息化研究,2009,35(6):11-14.
[9]徐立松,郭曉金.嵌入式Linux中安全文件傳輸系統的設計與實現[J].數字通信,2009,36(6):78-81.
[10]劉生華,何鵬舉,鄢化彪.基于TCP/IP 的單片機軟件遠程升級[J].單片機與嵌入式系統應用,2007(12):21-23.
[11]王恒,王颋,王泉,等.基于Bootloader的可靠嵌入式軟件遠程更新機制[J].微計算機信息,2007(20):57-59.
[12]王恒,王颋,李敏,等.一種高可靠的嵌入式軟件遠程自更新機制的研究與實現[J].工業控制計算機,2007,20(9):39-40.