當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]基于S3C44B0X的Bootloader設(shè)計(jì)與實(shí)現(xiàn)

1.引言

Bootloader(引[1]導(dǎo)加載) 程序[1]是系統(tǒng)加電后首先運(yùn)行的一段程序代碼,用來初始化硬件環(huán)境、改變處理器運(yùn)行模式和重組中斷向量,建立內(nèi)存空間的映射圖(有的CPU沒有內(nèi)存映射功能如 S3C44B0X ),將系統(tǒng)的軟、硬件環(huán)境帶到一個(gè)由用戶定制的特定狀態(tài),然后加載操作系統(tǒng)內(nèi)核。對于不使用操作系統(tǒng)的嵌入式系統(tǒng)而言,應(yīng)用程序的運(yùn)行同樣也需要依賴一個(gè)準(zhǔn)備好的軟、硬件環(huán)境,因此從這個(gè)意義上來講,BootLoader對于嵌入式系統(tǒng)是必需的。

Bootloader是依賴于目標(biāo)硬件實(shí)現(xiàn)的,主要包括以下兩方面[2]:

(1)每種嵌入式微處理器體系結(jié)構(gòu)都有不同的Bootloader.應(yīng)用比較廣泛的Bootloader有VIVI、U-Boot、Blob、RedBoot 等。有些BootLoader也可以支持多種體系結(jié)構(gòu)的嵌入式微處理器。如U-Boot同時(shí)支持ARM和MIPS體系結(jié)構(gòu)。

(2)Bootloader依賴于具體的嵌入式板級硬件設(shè)備的配置。比如板卡的硬件地址配置、微處理器的類型和其他外設(shè)的類型等。也就是說,即使是基于相同嵌入式微處理器構(gòu)建的不同嵌入式目標(biāo)板,要想讓運(yùn)行在一個(gè)板子上的Bootloader程序同樣運(yùn)行在另一個(gè)板子上,仍需要修改Bootloader的源程序。

作者在參與中國民用航空總局科技基金項(xiàng)目“機(jī)場噪聲自動監(jiān)測與數(shù)據(jù)傳輸?shù)难芯颗c實(shí)

現(xiàn)”的研發(fā)中,設(shè)計(jì)了一款基于S3C44B0X的ARM7核心板,并實(shí)現(xiàn)了其引導(dǎo)加載程序Bootloader.

2.ARM7核心板介紹

2.1ARM7核心板的構(gòu)成

作者設(shè)計(jì)的ARM7 核心板主要由CPU、電源管理、存儲單元、JTAG接口和串口五部分組成。圖1是其結(jié)構(gòu)圖。CPU這里用的是Samsung的S3C44BOX微處理器[3], 它是由Samsung Electronics Co.,Ltd為手持設(shè)備設(shè)計(jì)的低功耗、高度集成的基于ARM7TDMI核的微處理器,采用精簡指令系統(tǒng)(RISC)和三級流水線結(jié)構(gòu),且具有豐富的內(nèi)置部件。電源管理部分采用開關(guān)電源將AC220V轉(zhuǎn)換成DC5V,然后采用線性穩(wěn)壓電源LM1085將DC5V分別轉(zhuǎn)換成3.3V 的I/O口電源電壓和2.5V 的S3C44B0X內(nèi)核邏輯電壓。存儲單元由Flash存儲器和SDRAM存儲器構(gòu)成。Flash存儲器用的是SST公司的 39VF3201 CMOS FLASH,容量為4MB,16位數(shù)據(jù)寬度,可以重復(fù)擦寫。Flash存儲器主要用來存放已經(jīng)調(diào)試好的應(yīng)用程序、嵌入式操作系統(tǒng)和需要保存的用戶數(shù)據(jù)。 SDRAM存儲器選用的是SAMSUNG公司的8MB K4S641632H,16位數(shù)據(jù)寬度,工作電壓3.3V。由于SDRAM執(zhí)行速度比較快,其通常作為系統(tǒng)運(yùn)行時(shí)的主要區(qū)域,用來存放系統(tǒng)及用戶數(shù)據(jù)、堆棧等。另外,除了可用于下載和通信的串口,還包括用于調(diào)試的JTAG接口。

 

2.2S3C44B0X的存儲器映射

系統(tǒng)復(fù)位后,S3C44B0X的存儲空間映射圖[3]如圖2所示。ARM處理器S3C44B0X的系統(tǒng)存儲空間分為8段(Bank0-Bank7),因此可以配置8個(gè)存儲體,其中每個(gè)存儲體的大小為32MB,總共可達(dá)256MB的存儲空間??梢宰杂膳渲迷L問存儲體的數(shù)據(jù)總線寬度(8位/16位/32位),在本核心板中,F(xiàn)LASH和SDRAM存儲器的總線寬度設(shè)置為16位,在8個(gè)可配置存儲體中,Bank0-Bank5可支持ROM、SRAM類型的存儲器;Bank6和Bank7可支持ROM、SRAM以及FP/EDO/SDRAM等其他類型的存儲器,此處Bank0接 FLASH存儲器39VF3201(采用片選信號nGCS0),地址范圍為:0x00000000-0x003fffff.Bank6接8MB的 SDRAM存儲芯片K4S641632H(采用片選信號nGCS6),地址范圍為0x00000000-0x007fffff。其他存儲空間(Bank2、Bank3、Bank4、Bank5、Bank7)暫時(shí)保留。

 

3.Bootloader 啟動流程設(shè)計(jì)

系統(tǒng)加電或復(fù)位后,CPU通常都從CPU制造商預(yù)先安排的地址上取指令。如基于ARM7TDMI

內(nèi)核的CPU在復(fù)位時(shí)都從地址0x00000000處取它的第一條指令。而嵌入式系統(tǒng)通常都有某種類型的固態(tài)存儲設(shè)備(比如:ROM、EEPROM 或FLASH等)被安排在這個(gè)起始地址上。因此在系統(tǒng)加電或復(fù)位后,處理器將首先執(zhí)行存放在起始地址處的程序。通過集成開發(fā)環(huán)境IDE可以將 BootLoader定位在起始地址開始的存儲空間內(nèi)。所以,BootLoader是系統(tǒng)加電后,操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序運(yùn)行之前,首先必須運(yùn)行的一段代碼。對于ARM S3C44B0X微處理器,BootLoader是從0x00000000地址開始存放的,此地址采用了可引導(dǎo)的固態(tài)存儲設(shè)備FLASH。

從操作系統(tǒng)的角度看,BootLoader的總目標(biāo)就是正確的調(diào)用內(nèi)核來執(zhí)行。另外由于BootLoader的實(shí)現(xiàn)依賴于CPU的體系結(jié)構(gòu),因此大多數(shù)BootLoader都分為stage1和stage2兩部分[4],依賴CPU體系結(jié)構(gòu)的代碼,比如設(shè)備初始化代碼等,通常都放在stage1中,而且通常都用匯編語言來實(shí)現(xiàn),以達(dá)到短小精悍的目的。而stage2通常用C語言來實(shí)現(xiàn),這樣可以實(shí)現(xiàn)復(fù)雜的功能,而且代碼會具有更好的可讀性和可移植性。

[!--empirenews.page--]

BootLoader的stage1通常包括以下步驟(以執(zhí)行的先后順序):

1)  硬件設(shè)備初始化。

2)  為加載BootLoader的stage2準(zhǔn)備RAM空間。

3)  拷貝BootLoader的stage2到RAM空間

4)  設(shè)置堆棧

5)  跳轉(zhuǎn)到stage2的C程序入口點(diǎn)

BootLoader的stage2通常包括以下步驟(以執(zhí)行的先后順序):

1)  初始化本階段要使用到的硬件設(shè)備

2)  檢測系統(tǒng)內(nèi)存映射

3)  將內(nèi)核映像和根文件系統(tǒng)映像從Flash讀到RAM

4)  為內(nèi)核設(shè)置啟動參數(shù)

5)  調(diào)用內(nèi)核

4.Bootloader的代碼實(shí)現(xiàn)

Bootloader的Stage1初始化流程圖如圖3所示. Stage1部分主要內(nèi)容及其代碼實(shí)現(xiàn):

 

/*中斷向量表用于處理異常情況,當(dāng)發(fā)生異常情況時(shí),首先要保存當(dāng)前程序的返回地址和CPSR寄存器的值,然后進(jìn)入到相應(yīng)的異常向量地址。一般來說,在異常向量地址處放置無條件跳轉(zhuǎn)指令,使程序進(jìn)入相應(yīng)的異常處理過程。*/
_ENTRY
B   ResetHandler        ;reset vector
    B   UndefinedHandler    ;Undefined instruction
B   SWIHandler          ;SWI
    B   PrefetchHandler     ;Prefetch abort
    B   AbortHandler        ;Data abort
    B.                     ;Address exception
    B   IRQHandler          ;IRQ
    B   FIQHandler          ;FIQ
    ……

/*復(fù)位入口,切換到超級模式并禁止中斷。在整個(gè)Boot Loader的初始化過程中我們都不必響應(yīng)中斷,因此首先禁止系統(tǒng)的中斷。*/
MRS     a1,CPSR            
    BIC     a1,a1,#MODE_MASK   
    ORR     a1,a1,#SUP_MODE    
    ORR     a1,a1,#LOCKOUT      ;關(guān)閉IRQ、FIQ中斷
    MSR     CPSR_cxsf,a1
    LDR     r0,=INTCON          ;設(shè)置中斷模式,非向量中斷模式
   LDR     r1,=0x07            ;IRQ、FIQ中斷禁止
   STR     r1,[r0]
    LDR     r0,=INTMSK          ;關(guān)閉所有中斷
   LDR     r1,=0x07ffffff
   STR     r1,[r0]
LDR     r0,=SYSCFG          ;使能回寫buffer和Cache
LDR     r1,=0xE
    STR     r1,[r0]
……
/*當(dāng)必要的硬件初始化設(shè)置完畢后,接下來為核心代碼貯備RAM空間,包括RO、RW、ZI這3個(gè)段設(shè)置相應(yīng)的內(nèi)存映射向量,Bootloader先將ZI段請零,然后將RO段復(fù)制到RW段中。由于在我們采用的S3C44B0X微處理器里對于FLASH和RAM地址空間是使用的統(tǒng)一編址的,因此我們可以直接使用一個(gè)簡單循環(huán)來完成拷貝。*/
move_data :                                                                  
LDR     a1,=Image_RW_Base       ;RW段運(yùn)行時(shí)的起始地址
LDR     a2,=Image_RO_Limit      ;RO段運(yùn)行時(shí)的存儲區(qū)域界限
LDR     a3,=Image_ZI_Base       ;ZI段運(yùn)行時(shí)的起始地址                                                                        
CMP     a1,a3                                                          
BEQ     goto_main               ;跳轉(zhuǎn)到C入口函數(shù)                                                                                                      
move_loop :                             ;將RO段復(fù)制到RW段                                   
LDR     a4,[a2],#4                                                     
STR     a4,[a1],#4 
CMP     a1,a3
BNE     move_loop

[!--empirenews.page--]

在Bootloader stage1部分的最后是堆棧的設(shè)置,由于ARM有5種異常模式,每一種模式的堆棧指針寄存器(SP)都是獨(dú)立的,因此,對程序中需要用到的每一種模式都要給SP定義一個(gè)堆棧地址。以中止模式SP堆棧地址的定義為例:
        ORR     r1,r0,#ABORTMODE|NOINT
        MSR     cpsr_cxsf,r1
        LDR     sp,=AbortStack

至此,匯編語言程序段的任務(wù)基本完成,執(zhí)行命令BL  Main 轉(zhuǎn)到由C語言編寫的核心程序,操作系統(tǒng)的內(nèi)核就可通過該C程序加載到RAM,獲得對系統(tǒng)的控制權(quán)。

Bootloader的Stage2部分主要用于導(dǎo)入操作系統(tǒng)內(nèi)核,一般通過串口建立連接,以獲取命令、打印與用戶的交流信息等,這里限于篇幅不再加以詳述。

5.結(jié)束語

作為嵌入式系統(tǒng)軟件的最底層,Bootloader是系統(tǒng)上電后啟動運(yùn)行的第一個(gè)程序,類似于PC機(jī)上的BIOS,主要負(fù)責(zé)整個(gè)硬件系統(tǒng)的初始化和軟件系統(tǒng)啟動的準(zhǔn)備工作。Bootloader是嵌入式系統(tǒng)開發(fā)的重點(diǎn)和難點(diǎn),也是系統(tǒng)運(yùn)行的一個(gè)基本前提條件。設(shè)計(jì)和實(shí)現(xiàn)一個(gè)好的Bootloader,可以大大增強(qiáng)系統(tǒng)的穩(wěn)定性,提高系統(tǒng)的實(shí)時(shí)性。

本論文創(chuàng)新觀點(diǎn)是:設(shè)計(jì)了具有較高性價(jià)比的ARM7核心板,結(jié)合實(shí)際應(yīng)用詳細(xì)分析了S3C44B0X的存儲空間映射,設(shè)計(jì)實(shí)現(xiàn)的基于S3C44B0X的 Bootloader具有典型代表性、良好的健壯性和可移植性,只須有針對性的稍加修改,就可應(yīng)用到各種類似的嵌入式平臺中,對進(jìn)一步開發(fā)復(fù)雜系統(tǒng)的 Bootloader具有很好的借鑒和啟發(fā)作用。

本項(xiàng)目經(jīng)濟(jì)效益(30萬元),包括Internet接入設(shè)備研制、GPRS網(wǎng)絡(luò)接入設(shè)備研制和GPRS-Internet網(wǎng)關(guān)軟件研制三部分。 Internet接入設(shè)備由數(shù)據(jù)前端采集盒和嵌入式ARM系統(tǒng)構(gòu)成,嵌入式ARM系統(tǒng)通過串口接收單片機(jī)發(fā)來的數(shù)據(jù)并將這些數(shù)據(jù)利用TCP/IP協(xié)議通過網(wǎng)線發(fā)送到噪聲數(shù)據(jù)中心。

參考文獻(xiàn):
[1]白偉平等.基于ARM的嵌入式Bootloader淺析[J].微計(jì)算機(jī)信息,2006,4-2:99-100
[2]夏靖波等.嵌入式系統(tǒng)原理與開發(fā)[M].西安電子科技大學(xué)出版社.2006
[3]Samsung Limited. S3C44BOX RISC Microprocessor Datasheet[EB/OL]. 2001
[4]孫天澤等.嵌入式設(shè)計(jì)與Linux驅(qū)動開發(fā)指南-基于ARM9處理器[M].電子工業(yè)出版社.2006
 

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉