資源描述:
《基于ARM的嵌入式系統(tǒng)Bootloader啟動(dòng)流程分析.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、基于ARM的嵌入式系統(tǒng)Bootloader啟動(dòng)流程分析2008-2-2622:33:000推薦摘要:講述了基于ARM處理器的嵌入式系統(tǒng)在上電啟動(dòng)后應(yīng)用程序或操作系統(tǒng)運(yùn)行前,對(duì)處理器及其內(nèi)部功能模塊進(jìn)行初始化的過程,并結(jié)合經(jīng)過實(shí)際驗(yàn)證的代碼詳細(xì)的分析了S3C44B0Bootloader的運(yùn)行過程。關(guān)鍵字:ARM嵌入式系統(tǒng)Bootloader一.?引言:???對(duì)于PC機(jī),其開機(jī)后的初始化處理器配置、硬件初始化等操作是由BIOS(BasicInput/OutputSystem)完成的,但對(duì)于嵌入式系統(tǒng)來說,出于經(jīng)濟(jì)性、價(jià)格方面的考慮一般不配置BIOS,因此我們
2、必須自行編寫完成這些工作的程序,這就是所需要的開機(jī)程序。而在嵌入式系統(tǒng)中,通常并沒有像BIOS那樣的固件程序,啟動(dòng)時(shí)用于完成初始化操作的這段代碼被稱為Bootloader程序,因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由Bootloader來完成。簡(jiǎn)單地說,通過這段程序,可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖(有的CPU沒有內(nèi)存映射功能如S3C44B0),從而將系統(tǒng)的軟硬件環(huán)境設(shè)定在一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核、運(yùn)行用戶應(yīng)用程序準(zhǔn)備好正確的環(huán)境。Bootloader依賴于實(shí)際的硬件和應(yīng)用環(huán)境,因此要為嵌入式系統(tǒng)建立一個(gè)通用、標(biāo)準(zhǔn)的Bootloade
3、r是非常困難的。Bootloader也依賴于具體的嵌入式板級(jí)設(shè)備的配置,這也就是說,對(duì)于兩塊不同的嵌入式主板而言,即使它們是基于同一CPU而構(gòu)建,要想讓運(yùn)行在一塊板子上的Bootloader程序也能運(yùn)行在另一塊板子上,通常都需要修改Bootloader的源程序。二.?啟動(dòng)流程???系統(tǒng)加電復(fù)位后,幾乎所有的CPU都從由復(fù)位地址上取指令。比如,基于ARM7TDMI內(nèi)核的CPU在復(fù)位時(shí)通常都從地址0x處取它的第一條指令。而以微處理器為核心的嵌入式系統(tǒng)通常都有某種類型的固態(tài)存儲(chǔ)設(shè)備(比如EEPROM、FLASH等)被映射到這個(gè)預(yù)先設(shè)置好的地址上。因此在系統(tǒng)加電
4、復(fù)位后,處理器將首先執(zhí)行存放在復(fù)位地址處的程序。通過集成開發(fā)環(huán)境可以將Bootloader定位在復(fù)位地址開始的存儲(chǔ)空間內(nèi),因此Bootloader是系統(tǒng)加電后、操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序運(yùn)行之前,首先必須運(yùn)行的一段程序代碼。對(duì)于嵌入式系統(tǒng)來說,有的使用操作系統(tǒng),也有的不使用操作系統(tǒng),比如功能簡(jiǎn)單僅包括應(yīng)用程序的系統(tǒng),但在系統(tǒng)啟動(dòng)時(shí)都必須執(zhí)行Bootloader,為系統(tǒng)運(yùn)行準(zhǔn)備好軟硬件運(yùn)行環(huán)境。????系統(tǒng)的啟動(dòng)通常有兩種方式,一種是可以直接從Flash啟動(dòng),另一種是可以將壓縮的內(nèi)存映像文件從Flash(為節(jié)省Flash資源、提高速度)中復(fù)制、解壓到RAM
5、,再?gòu)腞AM啟動(dòng)。當(dāng)電源打開時(shí),一般的系統(tǒng)會(huì)去執(zhí)行ROM(應(yīng)用較多的是Flash)里面的啟動(dòng)代碼。這些代碼是用匯編語(yǔ)言編寫的,其主要作用在于初始化CPU和板上的必備硬件如內(nèi)存、中斷控制器等。有時(shí)候用戶還必須根據(jù)自己板子的硬件資源情況做適當(dāng)?shù)恼{(diào)整與修改。???系統(tǒng)啟動(dòng)代碼完成基本軟硬件環(huán)境初始化后,對(duì)于有操作系統(tǒng)的情況下,啟動(dòng)操作系統(tǒng)、啟動(dòng)內(nèi)存管理、任務(wù)調(diào)度、加載驅(qū)動(dòng)程序等,最后執(zhí)行應(yīng)用程序或等待用戶命令;對(duì)于沒有操作系統(tǒng)的系統(tǒng)直接執(zhí)行應(yīng)用程序或等待用戶命令。???啟動(dòng)代碼是用來初始化電路以及用來為高級(jí)語(yǔ)言寫的軟件做好運(yùn)行前準(zhǔn)備的一小段匯編語(yǔ)言,在商業(yè)實(shí)時(shí)
6、操作系統(tǒng)中,啟動(dòng)代碼部分一般被稱為板級(jí)支持包,英文縮寫為BSP。它的主要功能就是:電路初始化和為高級(jí)語(yǔ)言編寫的軟件運(yùn)行做準(zhǔn)備。系統(tǒng)啟動(dòng)流程如圖1所示,主要的過程如下:???1.?啟動(dòng)代碼的第一步是設(shè)置中斷和異常向量。???2.?完成系統(tǒng)啟動(dòng)所必須的最小配置,某些處理器芯片包含一個(gè)或幾個(gè)全局寄存器,這些寄存器必須在系統(tǒng)啟動(dòng)的最初進(jìn)行配置。???3.?設(shè)置看門狗,用戶設(shè)計(jì)的部分外圍電路如果必須在系統(tǒng)啟動(dòng)時(shí)初始化,就可以放在這一步。???4.?配置系統(tǒng)所使用的存儲(chǔ)器,包括Flash,SRAM和DRAM等,并為他們分配地址空間。如果系統(tǒng)使用了DRAM或其它外設(shè),
7、就需要設(shè)置相關(guān)的寄存器,以確定其刷新頻率,數(shù)據(jù)總線寬度等信息,初始化存儲(chǔ)器系統(tǒng)。有些芯片可通過寄存器編程初始化存儲(chǔ)器系統(tǒng),而對(duì)于較復(fù)雜系統(tǒng)通常集成有MMU來管理內(nèi)存空間。???5.?為處理器的每個(gè)工作模式設(shè)置棧指針,ARM處理器有多種工作模式,每種工作模式都需要設(shè)置單獨(dú)的??臻g。???6.?變量初始化,這里的變量指的是在軟件中定義的已經(jīng)賦好初值的全局變量,啟動(dòng)過程中需要將這部分變量從只讀區(qū)域,也就是Flash拷貝到讀寫區(qū)域中,因?yàn)檫@部分變量的值在軟件運(yùn)行時(shí)有可能重新賦值。還有一種變量不需要處理,就是已經(jīng)賦好初值的靜態(tài)全局變量,這部分變量在軟件運(yùn)行過程中不
8、會(huì)改變,因此可以直接固化在只讀的Flash或EEPROM中。???7.?數(shù)據(jù)區(qū)準(zhǔn)