www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]BootLoader_BootLoader是什么

一.簡介

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

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

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

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

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

二.BootLoader的概念

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

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

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

2.BootLoader的安裝媒介(InstallationMedium)

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

3.用來控制BootLoader的設備或機制

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

4.BootLoader的啟動過程

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

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

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

三.BootLoader的主要任務與典型結構框架

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

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

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

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

硬件設備初始化。

為加載BootLoader的stage2準備RAM空間。

拷貝BootLoader的stage2到RAM空間中。

設置好堆棧。

跳轉到stage2的C入口點。

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

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

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

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

為內核設置啟動參數(shù)。

調用內核。

3.1BootLoader的stage1

3.1.1基本的硬件初始化

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

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

設置CPU的速度和時鐘頻率。

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

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

關閉CPU內部指令/數(shù)據(jù)cache。

3.1.2為加載stage2準備RAM空間

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

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

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

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

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

先保存memorypage一開始兩個字的內容。

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

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

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

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

恢復這兩個字的原始內容。測試完畢。

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

更多資訊請關注:21ic模擬頻道

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

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據(jù)LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉