利用SD卡實現嵌入式Linux系統的自動升級
摘要:提出了一種擴展Uboot實現嵌入式設備操作系統維護與升級的方法。該方法將待升級的內核和文件系統映像放入SD卡中,當系統重啟時,擴展后的Uboot會自動檢測并讀取SD卡中的映像文件,再燒寫到嵌入式設備實現自動升級。該方法較傳統的通過JTAG口、串口或者網口連接到主機,在主機上通過手動輸入控制命令完成內核或者文件系統的升級方式更為便捷高效。
關鍵詞:SD卡;Uboot;Linux;自動升級
引言
隨著現代工業社會逐步向智能化社會的過度,嵌入式在現代經濟生活中扮演著至關重要的角色。32位的高性能、低成本、低功耗的嵌入式RISC(Reduced InstructionSet Computer)微處理器——ARM(Advanced RISC Machines)已經成為應用最廣泛的嵌入式微處理器。
目前,基于ARM的嵌入式系統在各個領域都有著廣泛的應用,嵌入式系統的維護與升級也變的日益重要。由于新技術的不斷涌現和對系統功能、性能等要求的不斷提高,開發者必須能夠針對系統進行升級和維護,以延長系統的使用周期,改善系統性能,增強系統適應性。
傳統的嵌入式系統升級,首先通過JTAG接口將Bootloader燒寫到目標板的Flash中,然后在Bootloader中,將內核映像文件和文件系統映像文件通過串口或者網絡下載并燒寫到Flash。若需對內核或文件系統升級,則要按照上述方法重新燒寫新的映像文件,直接覆蓋原來的映像文件。這類方法,一方面必須將嵌入式設備和主機通過串口線或者網線相連接;另一方面需要人工手動輸入控制命令,而且通過串口或網絡下載映像文件速度非常慢。
本文針對嵌入式Linux操作系統提出了一種新的升級機制,即通過將映像文件拷貝到SD卡中,由擴展后的Uboot實現系統自動升級,這個方法可以有效克服傳統升級方法的局限,簡化系統升級步驟,提高升級速度。
1 工作原理
一個嵌入式Linux系統從軟件的角度看通常可以分為4個層次:Bootloader、Linux內核、文件系統和用戶應用程序。這4個層次中,Boot loader一般是按照嵌入式系統的硬件配置定制的,是嵌入式系統加電以后運行的第一段軟件代碼。要對Bootloader升級只能通過人工手動完成,不過一般嵌入式系統在硬件平臺沒有變化的情況下是不需要對Bootloader進行升級的。用戶應用程序只是運行在Linux操作系統上的一個程序,其升級方法簡單,一般可以通過網絡直接進行升級。Linux內核和文件系統的升級不像Bootloader那樣基本不需要升級,也不像應用程序那樣很容易完成升級。目前,對于Linux內核和文件系統的升級一般都是在Bootloader中實現的。
通過對Uboot的功能進行擴充,加入了系統升級的功能。例如,用戶需要對嵌入式設備上的Linux內核或文件系統進行升級,只需要將新的Linux內核或文件系統映像,命名為指定的名稱拷貝到SD卡中。如果此時系統處于非運行狀態,只需要重新啟動嵌入式設備即可進行升級
過程;如果系統處于運行狀態,Linux系統會自動檢測SD卡是否存在相應的升級文件,存在則自動reboot,這樣也完成了系統的升級。
不論系統是否處于運行狀態,真正的系統升級過程都是在Uboot中完成的。設備重啟時,首先運行Uboot,在這過程中Uboot完成系統初始化之后,在引導內核之前先檢查SD卡中是否有Linux內核或文件系統映像文件。若有,則讀取映像文件到SDRAM當中,然后通過Uboot中的Flas h命令將內核或者文件系統映像燒寫到相應的分區當中來完成升級;若無,則直接啟動系統,具體流程如圖1所示。
linux相關文章:linux教程
評論