1. 程式人生 > >一些常見BootLoader介紹

一些常見BootLoader介紹

         首先區分一下BootLoader和Monitor的概念。嚴格來說,BootLoader只是引導裝置並且執行主程式的韌體;而Monitor還提供了更多的命令列介面,可以進行除錯、讀寫記憶體、燒寫Flash、配置環境變數等。Monitor在嵌入式系統開發過程中可以提供很好的除錯功能,開發完成以後,就完全設定成了一個BootLoader。所以,習慣上大家把它們統稱為BootLoader。

         目前,嵌入式系統中廣泛應用的BootLoader有U-Boot、vivi、blob、armboot等。嵌入式系統中硬體的種類繁多,差距較大,而BootLoader是嚴重依賴於硬體而實現的。不同的CPU體系需要不同的BootLoader,即便是同一種體系結構,由於其它硬體裝置配置的不同,如板卡硬體地址的分配、RAM晶片的型號等,也需要對BootLoader作一定的修改才能使用。因此,開發人員需針對不同的處理器和開發板,對BootLoader進行定製,來實現不同的功能。

Linux的開放原始碼載入程式及其支援的體系結構見表4.1。

表4.1 開放原始碼的Linux載入程式

BootLoader

描述

x86

ARM

PowerPC

LILO

Linux磁碟載入程式

GRUB

GNU的LILO替代程式

Loadlin

從DOS引導Linux

ROLO

從ROM引導Linux而不需要BIOS

Etherboot

通過乙太網卡啟動Linux系統的韌體

LinuxBIOS

完全替代BUIS的Linux載入程式

BLOB

LART等硬體平臺的載入程式

U-boot

通用載入程式

RedBoot

基於eCos的載入程式

 

下面,對嵌入式世界裡幾種常見的BootLoader做一簡單介紹。

4.2.1  U-Boot介紹

U-Boot(Universal BootLoader)是遵循GPL條款的開放原始碼專案,是在PPCBoot以及ARMBoot的基礎上逐步發展和演化而來,現在U-Boot已經能夠支援PowerPC、ARM、X86、MIPS等體系結構的上百種開發板,已經成為功能最多、靈活性最強,並且開發最積極的開放原始碼的BootLoader。

U-Boot提供大量外設驅動,支援多個檔案系統,附帶除錯、指令碼、引導等工具,特別支援Linux,為板級移植做了大量的工作。

U-Boot原始碼目錄、編譯形式與Linux核心很相似,事實上,不少U-Boot原始碼就是相應的Linux核心源程式的簡化,尤其是一些裝置的驅動程式,這從U-Boot原始碼的註釋中能體現這一點。但是U-Boot不僅支援嵌入式Linux系統的引導,而且還支援NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS等嵌入式作業系統。

U-Boot可支援的主要功能如下:

· 系統引導:從FLASH中引導壓縮或非壓縮系統核心、支援NFS掛載、RAMDISK(壓縮或非壓縮)形式的根檔案系統。

· 基本輔助功能:可靈活設定、傳遞多個關鍵引數給作業系統核心,適合系統在不同開發階段的除錯要求與產品釋出,尤其對Linux支援最為強勁;支援開發板環境引數多種儲存方式,如FLASH、NVRAM、EEPROM;CRC32校驗,可校驗FLASH中核心、RAMDISK映象檔案是否完好。

· 裝置驅動:驅動的支援包括串列埠、SDRAM、FLASH、乙太網、LCD、NVRAM、EEPROM、鍵盤、USB、PCMCIA、PCI、RTC等。

· 上電自檢功能:SDRAM、FLASH大小自動檢測、SDRAM故障檢測、CPU型號。

· 特殊功能:XIP(eXecute In Place,晶片內執行)核心引導,這樣程式可以直接在Flash快閃記憶體內執行,不必再把程式碼讀到RAM中。

U-Boot原始碼包的下載網站:http://sourceforge.net/project/u-boot。

4.2.2  vivi介紹

vivi是由韓國Mizi公司開發的一種BootLoader,專門針對ARM9處理器而設計,支援S3C2410x處理器。和所有的BootLoader一樣,vivi有兩種工作模式,即啟動載入模式和下載模式。當vivi處於下載模式時,它為使用者提供一個命令列介面,通過該介面可以使用vivi提供的一些命令。

vivi作為一種BootLoader,其執行過程分成兩個階段。

第一階段的程式碼在vivi/arch/s3c2410/head.s中定義,大小不超過10 KB,它包括從系統上電後在0x00000000地址開始執行的部分。這部分程式碼執行在Flash中,它包括對S3C2410的一些暫存器、時鐘等的初始化並跳轉到第二階段執行。

第二階段的程式碼在vivi\init\main.c中,主要進行一些開發板初始化、記憶體對映和記憶體管理單元初始化等工作,最後會跳轉到boot_or_vivi()函式中,接收命令並進行處理。

4.2.3  Blob介紹

Blob(BootLoader Object)是由Jan-Derk Bakker和Erik Mouw釋出,專為StrongARM構架下的LART設計的BootLoader。

Blob支援SA1100的LART主機板,但使用者也可以自行修改移植。Blob也提供兩種工作模式,在啟動時處於正常的啟動載入模式,但是它會延時10秒等待終端使用者按下任意鍵而將Blob 切換到下載模式。如果在10秒內沒有使用者按鍵,則Blob繼續啟動Linux核心。

Blob功能比較齊全,程式碼較少,比較適合做修改移植,用來引導Liunx,目前大部分S3C44B0板都用Blob修改移植後來載入uCLinux。

4.2.4  ARMboot介紹

ARMboot是一個ARM平臺的開源韌體專案,它嚴重依賴於PPCBoot。ARMboot支援的處理器構架有StrongARM,ARM720T,PXA250等,是為基於ARM或者StrongARM CPU的嵌入式系統所設計的。ARMboot的目標是成為通用的、容易使用和移植的載入程式,非常輕便地運用於新的平臺上。總得來說,ARMboot介於大、小型BootLoader之間,相對輕便,基本功能完備,缺點是缺乏後續支援。ARMboot釋出的最後版本為ARMboot–1.1.0,2002年終止了ARMboot的維護,其釋出網址為:http://sourceforge.net/projects/armboot。

4.2.5  RedBoot介紹

RedBoot是標準的嵌入式除錯和引導解決方案,是一個專門為嵌入式系統定製的引導工具,最初由Redhat開發,是嵌入式作業系統eCos的一個最小版本,是隨eCos釋出的一個BOOT方案,是一個開源專案。現在交由自由軟體組織FSF管理,遵循GPL。集BootLoader、除錯、Flash燒寫於一體。支援串列埠、網路下載、執行嵌入式應用程式。既可以用在產品的開發階段(除錯功能),也可以用在最終的產品上(Flash更新、網路啟動)。

RedBoot支援的處理器構架有ARM、MIPS、PowerPC、x86等,是一個完善的嵌入式系統BootLoader。

 

轉載自https://wenku.baidu.com/view/a767215e43323968001c9204.html