曾海峰
(廣東科貿(mào)職業(yè)學院 廣東 510430)
在社會日益信息化的今天,嵌入式系統(tǒng)已涉及工業(yè)、軍事、通信、運輸、金融、醫(yī)療等眾多領(lǐng)域。在實際的工程應(yīng)用中,這些系統(tǒng)更新通常采用JTAG接口、RS232串口、USB接口或SD卡等聯(lián)機方式進行,但在投入運行后,系統(tǒng)會因為前期研發(fā)未能檢測到的 Bug,或者用戶對系統(tǒng)提出新的功能和性能需求而需要更新固件,此時如果嵌入式設(shè)備安裝數(shù)量較多且安裝位置分散而不易拆裝,采用人工方式更新系統(tǒng)將會花費較大的人力、物力和財力。因此,系統(tǒng)的遠程更新就顯得尤為重要,它的實現(xiàn)將大大節(jié)省產(chǎn)品維護成本,增強產(chǎn)品競爭力。
本系統(tǒng)基于以太網(wǎng)技術(shù),采用C/S通信架構(gòu)實現(xiàn)嵌入式系統(tǒng)固件的遠程更新。服務(wù)端使用Linux操作系統(tǒng),服務(wù)程序采用 C/C++編程技術(shù)進行設(shè)計,數(shù)據(jù)庫選用開源免費的 MySQL作為信息存儲倉庫,系統(tǒng)實現(xiàn)的主要功能在于收集在線客戶機信息、身份合法性認證以及系統(tǒng)固件傳輸。其中,客戶機信息包括客戶機網(wǎng)卡的MAC地址、客戶機系統(tǒng)版本、登錄狀態(tài)以及更新狀態(tài)??蛻舳讼到y(tǒng)則采用ARM+Linux,軟件系統(tǒng)由Bootloader、Kernel、File System 以及應(yīng)用程序組成。其中,Bootloader程序是實現(xiàn)遠程系統(tǒng)更新的核心部分;Kernel和File System部分是固件更新的主要內(nèi)容,當更新完成后將利用系統(tǒng)的守護進程來完成與服務(wù)端的版本同步。
客戶機選用三星的S5PV210芯片作為微處理核心,該芯片采用了ARM CortexTM-A8內(nèi)核,ARM V7指令集,主頻可達1GHZ,可以實現(xiàn)2000DMIPS的高性能運算能力,并且提供存儲控制器支持和豐富的外圍接口。
系統(tǒng)內(nèi)存采用4片128M大小的DDR2類型芯片,共計512M內(nèi)存空間,可操作地址為:0x20000000~0x3fffffff,14根地址總線。系統(tǒng)存儲采用SLC類型的NAND FLASH芯片,存儲容量為1G,主要用于存放Bootloader、Linux內(nèi)核、文件系統(tǒng)以及應(yīng)用程序。以太網(wǎng)適配器采用DM9000AEP芯片,工作在16bit 數(shù)據(jù)模式下,連接了nGCS1片選線,使得dm9000訪問空間映射至SROMC_BANK1區(qū)域,其資源訪問起始地址為0x88001000。
圖1 Bootloader啟動流程
Bootloader是嵌入式系統(tǒng)啟動的第一階段,主要完成硬件初始化和系統(tǒng)內(nèi)核引導(dǎo)工作。由S5PV210芯片的啟動過程可知,Bootloader包含BL0和BL1二個部分,其中BL0是由三星公司以固件形式提供,完成啟動設(shè)備的硬件初始化;BL1是由用戶自定義,完成系統(tǒng)引導(dǎo)等工作。
本方案結(jié)合Bootloader技術(shù),在BL0的基礎(chǔ)上完成外圍基礎(chǔ)設(shè)備的硬件初始化,利用網(wǎng)絡(luò)進而實現(xiàn)遠程的系統(tǒng)更新功能。BL1的設(shè)計流程如圖1所示,詳細設(shè)計步驟如下:
(1)首先,BL1對CPU運行模式和時鐘進行設(shè)置,初始化內(nèi)存管理器、NAND FLASH芯片以及DM9000網(wǎng)絡(luò)芯片,以保證硬件系統(tǒng)的正常運行;
(2)從NAND FLASH指定位置中讀取系統(tǒng)更新的標記位,如果標記位為0x0,表示系統(tǒng)固件需要更新,如果值為0xf則表示系統(tǒng)不需要升級,而后直接啟動內(nèi)核;
(3)如果系統(tǒng)固件需要更新,BL1將利用哈希算法對本機網(wǎng)卡的48bit MAC地址進行加密,形成的128bit密文與請求下載的文件名稱整合后再發(fā)送至服務(wù)器并等待其響應(yīng),如果在5秒內(nèi)無響應(yīng),則在FLASH中設(shè)置錯誤標記,隨后直接啟動原有內(nèi)核;
(4)如果服務(wù)器返回最新的系統(tǒng)固件,BL1會利用TFTP傳輸協(xié)議將其保存至內(nèi)存的0x21000000地址處,并進行文件檢驗,從而保證系統(tǒng)固件的完整性。如果校驗成功,則調(diào)用NAND芯片操作程序?qū)?nèi)存中的系統(tǒng)固件燒寫至FLASH的指定位置;如果校驗失敗,程序?qū)⒅匦孪蚍?wù)器發(fā)送下載請求,重新接收文件,如果超出三次檢驗失敗,則在FLASH中設(shè)置錯誤標記后啟動原有內(nèi)核。
圖2 Linux系統(tǒng)應(yīng)用設(shè)計
基于Linux系統(tǒng)的應(yīng)用層設(shè)計,本方案主要實現(xiàn)了系統(tǒng)更新成功后的確認操作以及定期版本查詢的功能。應(yīng)用設(shè)計流程如圖2所示,具體設(shè)計思路如下:
(1)首先,由Linux系統(tǒng)的INIT進程產(chǎn)生一個守護進程,隨后的功能實現(xiàn)均通過這個進程來設(shè)計;
(2)從NAND FLASH指定位置中讀取系統(tǒng)更新標記位和錯誤標記位,如果更新標記位為0x0且沒有錯誤標記,表示系統(tǒng)已經(jīng)完成更新,此時將清空更新標記位并設(shè)置為0xf,并將當前版本信息寫入 FLASH中相應(yīng)位置;如果更新標記位為 0x0且發(fā)現(xiàn)錯誤標記,則表示系統(tǒng)在更新過程出現(xiàn)了錯誤,立即向服務(wù)器發(fā)送錯誤報告;
(3)為了保證系統(tǒng)更新的同步性和實效性,系統(tǒng)專門設(shè)計了版本在線查詢功能,通過定期向服務(wù)器發(fā)送查詢請求來獲知系統(tǒng)固件最新的版本信息,從而判斷是否需要更新。如果發(fā)現(xiàn)新版本,程序?qū)贔LASH中設(shè)置更新標記位為0x0,保存當前的工作狀態(tài)后重啟Linux系統(tǒng),最終利用Bootloader完成系統(tǒng)更新。
圖3 服務(wù)端程序設(shè)計
如圖3所示,服務(wù)端程序的主要功能是監(jiān)聽和處理遠程客戶機請求。如果其接收到查詢請求,則會將客戶機信息和查詢時間登記至系統(tǒng)數(shù)據(jù)庫,然后返回系統(tǒng)固件的最新版本信息;如果接收到下載請求,則首先對客戶機提交的密文進行合法性檢測,認定合法后向客戶機發(fā)送系統(tǒng)更新文件,同時登記客戶機的版本信息。
本文結(jié)合實際應(yīng)用,經(jīng)橫向?qū)Ρ痊F(xiàn)有嵌入式系統(tǒng)的更新方式和安全性能后提出了基于以太網(wǎng)實現(xiàn)的嵌入式系統(tǒng)遠程更新設(shè)計方案。本方案利用Bootloader技術(shù)和網(wǎng)絡(luò)技術(shù)設(shè)計了一套基于C/S架構(gòu)的遠程系統(tǒng)更新體系,對無操作系統(tǒng)環(huán)境下的嵌入式應(yīng)用實現(xiàn)了遠程的固件更新;同時,當系統(tǒng)更新失敗或固件丟失之時也能夠自動進行系統(tǒng)復(fù)原,從而有效提高固件的傳輸速率,保障更新的可靠性和安全性。經(jīng)過一段時間實際項目的應(yīng)用測試,系統(tǒng)運行安全可靠且具實效性,有效提高了嵌入式系統(tǒng)遠程固件更新的便捷性。
[1]王恒,王颋,王泉,李勇.基于Bootloader的可靠嵌入式軟件遠程更新機制[J].微計算機信息.2007.
[2]王恒,王颋,李敏,羅洪平.一種高可靠的嵌入式軟件遠程自更新機制的研究與實現(xiàn)[J].工業(yè)控制計算機.2007.
[3]邵奇峰,楊天池,郭松輝.一種輕量級嵌入式設(shè)備遠程安全更新協(xié)議[J].計算機應(yīng)用與軟件.2014.