<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 在Bootloader中實(shí)現嵌入式系統自動(dòng)升級

在Bootloader中實(shí)現嵌入式系統自動(dòng)升級

作者: 時(shí)間:2007-11-01 來(lái)源:網(wǎng)絡(luò ) 收藏
摘要 中,對內核或文件進(jìn)行,一般是將目標板連接到主機,通過(guò)JTAG口、串口或網(wǎng)口來(lái)完成過(guò)程。本文討論一種更為方便的方法,即在Boot1oader中通過(guò)CF存儲卡升級。系統中的通常用于引導操作系統,本文描述了如何通過(guò)增強的功能,系統的升級。
關(guān)鍵詞 Bootloadcr 嵌入式系統CF存儲卡 升級


嵌入式系統由硬件和軟件兩部分組成,軟件部分主要包括、內核和文件系統。Bootloader是硬件系統加電所運行的第l段軟件代碼,但在嵌入式系統中一般沒(méi)有像PC中的BIOS那樣的固件,因此整個(gè)系統的加載過(guò)程全部是由Bootloader來(lái)完成的。系統在上電l或復位時(shí)通常都從地址Ox00000000處開(kāi)始執行,而在這個(gè)地址處安排的通常就是系統的Bootloader。Bootloader的主要任務(wù)包括:初始化最基本的硬件;將Bootloader本身拷貝到RAM中運行;將內核拷貝到RAM中并調用內核等。
通常在嵌入式系統中,首先通過(guò)JTAG接口將Bootloader燒寫(xiě)到目標板的Flash中,然后在Bootloader中,將內核映像文件和文件系統映像文件通過(guò)串口和網(wǎng)絡(luò )下載并燒寫(xiě)到Flash中。若需對內核或文件系統升級,則按照上述方法重新燒寫(xiě)新的映像文件,直接覆蓋原來(lái)的映像文件。
上述方法中,一方面必須將目標板和主機通過(guò)串口線(xiàn)和網(wǎng)線(xiàn)相連接,另一方面通過(guò)串口或網(wǎng)絡(luò )下載映像文件,速度很慢。本實(shí)驗通過(guò)擴充Bootloader功能,了通過(guò)CF存儲卡對內核或文件系統映像文件的升級,對需要經(jīng)常為內核或文件系統升級的嵌入式系統來(lái)說(shuō),克服了傳統升級方法的局限,簡(jiǎn)化了升級方法,提高了升級速度。


1 基本原理
本實(shí)驗對傳統Bootloader的功能進(jìn)行了擴充,加入了升級系統的功能。例如,用戶(hù)需要對目標板上的內核或文件系統進(jìn)行升級,只需要將新的映像文件命名為指定的名稱(chēng)并拷貝到CF存儲卡中。然后,CF存儲卡插入目標板的CF存儲卡插槽,重新啟動(dòng)目標板即可完成升級過(guò)程。重啟時(shí),系統首先運行Bootloader,Bootloader將檢測CF存儲卡中是否有內核或文件系統的映像文件。若有,則讀取映像文件并燒寫(xiě)到目標板的F1ash中,升級;若無(wú),則直接啟動(dòng)目標板中的系統,如圖1所示。

實(shí)驗使用的開(kāi)發(fā)板基于Intel XScale處理器PXA255。PXA255具有16位的CF存儲卡控制器,用于連接CF存儲卡。開(kāi)發(fā)板上有32 MB的Flash和64 MB的SDRAM,且Flash的起始地址映射到Ox00000000,SDRAM的起始地址映射到OxA0000000。
實(shí)驗板上的InteI Strata Flash,容量為32 MB,分為Bootloader、reserved、kernel和root filesystem四個(gè)區。其中,Bootloader分區用于燒寫(xiě)Bootloader,其起始地址為Ox00000000,當系統加電啟動(dòng)或復位時(shí),CPU便跳轉到這個(gè)位置開(kāi)始執行指令;reserved分區為保留分區,主要用于傳遞內核啟動(dòng)參數以及其他系統設置;kernel分區和root filesystem分區分別用于燒寫(xiě)內核和文件系統。各分區的起始地址及大小如圖2所示。

2 實(shí)現
本文所討論的實(shí)現方法,主要是擴充Bootloader的功能,增加對CF存儲卡的支持,使系統啟動(dòng)時(shí),Bootloader能對CF存儲卡進(jìn)行文件讀取。首先,要將CF存儲卡格式化成特定的文件系統格式(本實(shí)驗主要支持FAT32、FATl6和EXT2三種文件系統)。然后,將待升級的映像文件(內核映像文件、文件系統映像文件或Bootloader本身的映像文件)通過(guò)主機拷貝到CF存儲卡。因此,Bootloader可以榆測到需要升級的映像文件并對目標板上的相應部分進(jìn)行更新。
2.1 Bootloader框架及工作流程
本實(shí)驗所編寫(xiě)的Bootloader僅實(shí)現了最基本的硬件初始化功能、系統引導功能和系統升級功能,靜態(tài)編譯的二進(jìn)制文件大小為38 KB。Bootloader用匯編語(yǔ)言和C語(yǔ)言實(shí)現,匯編語(yǔ)言?xún)H作了屏蔽所有中斷、初始化相關(guān)GPIO(General Purpose IO)、初始化SDRAM、拷貝Bootloader和內核到SDRAM等簡(jiǎn)單工作,便跳轉到C程序,在C程序中實(shí)現了后續的初始化工作及系統升級。詳細流程如圖3所示。

2.2 對CF存儲卡的支持及數據讀取過(guò)程
由于是從CF存儲卡上讀取新的映像文件并實(shí)現系統更新,故在Bootloader中必須首先支持CF卡。CF卡本身提供了兩個(gè)探測引腳(即Card Detect Pins),用于判斷CF卡是否存在。這兩個(gè)引腳成為CDl和CD2,在CF卡內部被硬件設計為直接與地相連。當CF卡插入時(shí),CDl和CD2應全為低電平,因此,在Bootloader中通過(guò)檢測CDl和CD2的電平高低,可以判斷CF卡是否存在。
CF卡主要由3部分組成:控制器、存儲器陣列和緩沖區。其中,內置的智能存儲器可以使外圍電路設計大大簡(jiǎn)化,且完全符合內存卡的PCMCIA(Personal Computer Memory Card Intemational Association)和AIA (AdvanccdTechnology Attachment)接口規范。因此,對CF卡的訪(fǎng)問(wèn)有基于PCMCIA規范的Memory Map模式、I/O方式以及基于A(yíng)TA規范的True IDE方式。這里所實(shí)現的Bootloader中,CF卡工作在Truc IDE模式下,將CF卡的0E(Output Enable)引腳設置為低電平(反之,若為高電平,則CF卡將工作在PCMCIA規范的Memory Map模式或I/O模式下)。
對CF卡的True IDE工作模式設置完成后,通過(guò)向CF卡的寄存器寫(xiě)入必要的信息實(shí)現對CF卡的控制及讀寫(xiě)。CF卡主要包含以下寄存器:
◆數據寄存器(R/W),用于對扇區的讀/寫(xiě)操作,主機通過(guò)該寄存器向CF卡控制器寫(xiě)入或從CF卡控制寄存器讀出扇區緩沖區的數據;
◆錯誤寄存器(R),控制寄存器在診斷方式或操作方式下的錯誤原因;
◆扇區數寄存器(R/W)。記錄讀、寫(xiě)命令的扇區數目;
◆扇區號寄存器(R/W),記錄讀、寫(xiě)和校驗命令指定的起始扇區號;
◆柱面號寄存器(R/W),記錄讀、寫(xiě)、校驗和尋址命令指定的柱面號;
◆驅動(dòng)器/寄存器(R/W),記錄讀、寫(xiě)、校驗和尋道命令指定的驅動(dòng)器號、磁頭號和尋址方式;
◆狀態(tài)寄存器(R),反映CF卡驅動(dòng)器執行命令后的狀態(tài),讀浚寄存器要清除中斷請求信號;
◆命令寄存器(W),命令寄存器接收主機發(fā)送的CF卡工作的控制命令。
從CF卡讀取數據的過(guò)程如圖4所示。

2.3 文件系統支持
要對CF卡進(jìn)行文件存取,必須將CF卡格式化成某種文件系統。本實(shí)驗所編寫(xiě)的Bootloader主要支持3種文件系統:FATl6、FAT32和EXT2。當需要對嵌入式系統的內核映像(映像文件名為zlmage)或根文件系統映像(映像文件名為tootfs.img)進(jìn)行升級時(shí),將待更新的映像文件按照指定的文件名拷貝到CF存儲卡中。系統啟動(dòng)時(shí),Bootloader首先檢測CF存儲卡的文件系統類(lèi)型,然后按照相應的文件系統格式查詢(xún)CF卡中的所有文件。若發(fā)現待更新的映像文件,則調用CF卡底層操作(詳見(jiàn)2.2節),將映像文件讀出到SDRAM中,再從SDRAM燒寫(xiě)到嵌入式開(kāi)發(fā)板的Flash中,實(shí)現升級。有關(guān)文件系統的實(shí)現細節,詳見(jiàn)參考文獻。


3 結論
通過(guò)CF存儲卡對嵌入式系統的自動(dòng)升級,一方面可以簡(jiǎn)化升級過(guò)程,無(wú)需通過(guò)串口或網(wǎng)絡(luò )將目標板與主機相連,將文件下載升級,而只需插入CF卡,啟動(dòng)系統便可以完成升級過(guò)程;另一方面,升級速度也大大提高,因為系統對CF卡的存取速度遠遠高于串口或網(wǎng)絡(luò )。但是,要通過(guò)CF卡實(shí)現系統升級,嵌入式板必須具有CF卡接口,因此,它并不適合所有的嵌入式系統。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>