當(dāng)前位置:首頁 > 電源 > 數(shù)字電源
[導(dǎo)讀]一.簡介回憶一下PC的體系結(jié)構(gòu)我們可以知道,PC機(jī)中的引導(dǎo)加載程序由BIOS(其本質(zhì)就是一段固件程序)和位于硬盤MBR中的OSBootLoader(比如,LILO和GRUB等)一起組成。BIOS在完成硬件檢測和資源分配后,將硬盤MBR中的BootL

一.簡介

回憶一下PC的體系結(jié)構(gòu)我們可以知道,PC機(jī)中的引導(dǎo)加載程序由BIOS(其本質(zhì)就是一段固件程序)和位于硬盤MBR中的OSBootLoader(比如,LILO和GRUB等)一起組成。BIOS在完成硬件檢測和資源分配后,將硬盤MBR中的BootLoader讀到系統(tǒng)的RAM中,然后將控制權(quán)交給OSBootLoader。BootLoader的主要運(yùn)行任務(wù)就是將內(nèi)核映象從硬盤上讀到RAM中,然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)行,也即開始啟動(dòng)操作系統(tǒng)。而在嵌入式系統(tǒng)中,通常并沒有像BIOS那樣的固件程序(注,有的嵌入式CPU也會(huì)內(nèi)嵌一段短小的啟動(dòng)程序),因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由BootLoader來完成。比如在一個(gè)基于ARM7TDMIcore的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時(shí)通常都從地址0x00000000處開始執(zhí)行,而在這個(gè)地址處安排的通常就是系統(tǒng)的BootLoader程序。

引導(dǎo)加載程序。包括固化在固件(firmware)中的boot代碼(可選),和BootLoader兩大部分。

Linux內(nèi)核。特定于嵌入式板子的定制內(nèi)核以及內(nèi)核的啟動(dòng)參數(shù)。

引導(dǎo)加載程序是系統(tǒng)加電后運(yùn)行的第一段軟件代碼。

本文將從BootLoader的概念、BootLoader的主要任務(wù)、BootLoader的框架結(jié)構(gòu)以及BootLoader的安裝等四個(gè)方面來討論嵌入式系統(tǒng)的BootLoader。

二.BootLoader的概念

簡單地說,BootLoader就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。

1.BootLoader所支持的CPU和嵌入式板

每種不同的CPU體系結(jié)構(gòu)都有不同的BootLoader。有些BootLoader也支持多種體系結(jié)構(gòu)的CPU,比如U-Boot就同時(shí)支持ARM體系結(jié)構(gòu)和MIPS體系結(jié)構(gòu)。除了依賴于CPU的體系結(jié)構(gòu)外,BootLoader實(shí)際上也依賴于具體的嵌入式板級設(shè)備的配置。這也就是說,對于兩塊不同的嵌入式板而言,即使它們是基于同一種CPU而構(gòu)建的,要想讓運(yùn)行在一塊板子上的BootLoader程序也能運(yùn)行在另一塊板子上,通常也都需要修改BootLoader的源程序。

2.BootLoader的安裝媒介(InstallationMedium)

系統(tǒng)加電或復(fù)位后,所有的CPU通常都從某個(gè)由CPU制造商預(yù)先安排的地址上取指令。比如,基于ARM7TDMIcore的CPU在復(fù)位時(shí)通常都從地址0x00000000取它的第一條指令。而基于CPU構(gòu)建的嵌入式系統(tǒng)通常都有某種類型的固態(tài)存儲設(shè)備(比如:ROM、EEPROM或FLASH等)被映射到這個(gè)預(yù)先安排的地址上。因此在系統(tǒng)加電后,CPU將首先執(zhí)行BootLoader程序。

3.用來控制BootLoader的設(shè)備或機(jī)制

主機(jī)和目標(biāo)機(jī)之間一般通過串口建立連接,BootLoader軟件在執(zhí)行時(shí)通常會(huì)通過串口來進(jìn)行I/O,比如:輸出打印信息到串口,從串口讀取用戶控制字符等。

4.BootLoader的啟動(dòng)過程

BootLoader的啟動(dòng)過程是單階段(SingleStage)還是多階段(Multi-Stage)通常多階段的BootLoader能提供更為復(fù)雜的功能,以及更好的可移植性。從固態(tài)存儲設(shè)備上啟動(dòng)的BootLoader大多都是2階段的啟動(dòng)過程,也即啟動(dòng)過程可以分為stage1和stage2兩部分。而至于在stage1和stage2具體完成哪些任務(wù)將在下面討論。

5.BootLoader與主機(jī)之間進(jìn)行文件傳輸所用的通信設(shè)備及協(xié)議

最常見的情況就是,目標(biāo)機(jī)上的BootLoader通過串口與主機(jī)之間進(jìn)行文件傳輸,傳輸協(xié)議通常是xmodem/ymodem/zmodem協(xié)議中的一種。但是,串口傳輸?shù)乃俣仁怯邢薜?,因此通過以太網(wǎng)連接并借助TFTP協(xié)議來下載文件是個(gè)更好的選擇。在討論了BootLoader的上述概念后,下面我們來具體看看BootLoader的應(yīng)該完成哪些任務(wù)。

三.BootLoader的主要任務(wù)與典型結(jié)構(gòu)框架

在繼續(xù)本節(jié)的討論之前,首先我們做一個(gè)假定,那就是:假定內(nèi)核映像與根文件系統(tǒng)映像都被加載到RAM中運(yùn)行。之所以提出這樣一個(gè)假設(shè)前提是因?yàn)?,在嵌入式系統(tǒng)中內(nèi)核映像與根文件系統(tǒng)映像也可以直接在ROM或Flash這樣的固態(tài)存儲設(shè)備中直接運(yùn)行。但這種做法無疑是以運(yùn)行速度的犧牲為代價(jià)的。

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

而stage2則通常用C語言來實(shí)現(xiàn),這樣可以實(shí)現(xiàn)給復(fù)雜的功能,而且代碼會(huì)具有更好的可讀性和可移植性。

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

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

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

拷貝BootLoader的stage2到RAM空間中。

設(shè)置好堆棧。

跳轉(zhuǎn)到stage2的C入口點(diǎn)。

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

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

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

將kernel映像和根文件系統(tǒng)映像從flash上讀到RAM空間中。

為內(nèi)核設(shè)置啟動(dòng)參數(shù)。

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

3.1BootLoader的stage1

3.1.1基本的硬件初始化

這是BootLoader一開始就執(zhí)行的操作,其目的是為stage2的執(zhí)行以及隨后的kernel的執(zhí)行準(zhǔn)備好一些基本的硬件環(huán)境。它通常包括以下步驟(以執(zhí)行的先后順序):

屏蔽所有的中斷。為中斷提供服務(wù)通常是OS設(shè)備驅(qū)動(dòng)程序的責(zé)任,因此在BootLoader的執(zhí)行全過程中可以不必響應(yīng)任何中斷。中斷屏蔽可以通過寫CPU的中斷屏蔽寄存器或狀態(tài)寄存器(比如ARM的CPSR寄存器)來完成。

設(shè)置CPU的速度和時(shí)鐘頻率。

RAM初始化。包括正確地設(shè)置系統(tǒng)的內(nèi)存控制器的功能寄存器以及各內(nèi)存庫控制寄存器等。

初始化LED。典型地,通過GPIO來驅(qū)動(dòng)LED,其目的是表明系統(tǒng)的狀態(tài)是OK還是Error。如果板子上沒有LED,那么也可以通過初始化UART向串口打印BootLoader的Logo字符信息來完成這一點(diǎn)。

關(guān)閉CPU內(nèi)部指令/數(shù)據(jù)cache。

3.1.2為加載stage2準(zhǔn)備RAM空間

為了獲得更快的執(zhí)行速度,通常把stage2加載到RAM空間中來執(zhí)行,因此必須為加載BootLoader的stage2準(zhǔn)備好一段可用的RAM空間范圍。由于stage2通常是C語言執(zhí)行代碼,因此在考慮空間大小時(shí),除了stage2可執(zhí)行映象的大小外,還必須把堆??臻g也考慮進(jìn)來。此外,空間大小最好是memorypage大小(通常是4KB)的倍數(shù)。一般而言,1M的RAM空間已經(jīng)足夠了。具體的地址范圍可以任意安排,比如blob就將它的stage2可執(zhí)行映像安排到從系統(tǒng)RAM起始地址0xc0200000開始的1M空間內(nèi)執(zhí)行。

但是,將stage2安排到整個(gè)RAM空間的最頂1MB(也即(RamEnd-1MB)-RamEnd)是一種值得推薦的方法。

為了后面的敘述方便,這里把所安排的RAM空間范圍的大小記為:stage2_size(字節(jié)),把起始地址和終止地址分別記為:stage2_start和stage2_end(這兩個(gè)地址均以4字節(jié)邊界對齊)。因此:stage2_end=stage2_start+stage2_size

另外,還必須確保所安排的地址范圍的的確確是可讀寫的RAM空間,因此,必須對你所安排的地址范圍進(jìn)行測試。

具體的測試方法可以采用類似于blob的方法,也即:以memorypage為被測試單位,測試每個(gè)memorypage開始的兩個(gè)字是否是可讀寫的。為了后面敘述的方便,我們記這個(gè)檢測算法為:test_mempage,其具體步驟如下:

先保存memorypage一開始兩個(gè)字的內(nèi)容。

向這兩個(gè)字中寫入任意的數(shù)字。比如:向第一個(gè)字寫入0x55,第2個(gè)字寫入0xaa。

然后,立即將這兩個(gè)字的內(nèi)容讀回。顯然,我們讀到的內(nèi)容應(yīng)該分別是0x55和0xaa。如果不是,則說明這個(gè)memorypage所占據(jù)的地址范圍不是一段有效的RAM空間。

再向這兩個(gè)字中寫入任意的數(shù)字。比如:向第一個(gè)字寫入0xaa,第2個(gè)字中寫入0x55。

然后,立即將這兩個(gè)字的內(nèi)容立即讀回。顯然,我們讀到的內(nèi)容應(yīng)該分別是0xaa和0x55。如果不是,則說明這個(gè)memorypage所占據(jù)的地址范圍不是一段有效的RAM空間。

恢復(fù)這兩個(gè)字的原始內(nèi)容。測試完畢。

為了得到一段干凈的RAM空間范圍,我們也可以將所安排的RAM空間范圍進(jìn)行清零操作。

更多資訊請關(guān)注:21ic模擬頻道

本站聲明: 本文章由作者或相關(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ū)動(dòng) 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è)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

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

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(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é)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(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)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

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