引言:
Bootloader是在操作系統(tǒng)運行之前執(zhí)行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射表,從而建立適當?shù)南到y(tǒng)軟硬件環(huán)境,為最終調(diào)用操作系統(tǒng)內(nèi)核做好準備。
對于嵌入式系統(tǒng),Bootloader是基于特定硬件平臺來實現(xiàn)的。因此,幾乎不可能為所有的嵌入式系統(tǒng)建立一個通用的Bootloader,不同的處理器架構(gòu)都有不同的Bootloader。Bootloader不但依賴于CPU的體系結(jié)構(gòu),而且依賴于嵌入式系統(tǒng)板級設(shè)備的配置。對于2塊不同的嵌入式板而言,即使它們使用同一種處理器,要想讓運行在一塊板子上的Bootloader程序也能運行在另一塊板子上,一般也都需要修改Bootloader的源程序。
反過來,大部分Bootloader仍然具有很多共性,某些Bootloader也能夠支持多種體系結(jié)構(gòu)的嵌入式系統(tǒng)。例如,U-Boot就同時支持PowerPC、ARM、MIPS和X86等體系結(jié)構(gòu),支持的板子有上百種。通常,它們都能夠自動從存儲介質(zhì)上啟動,都能夠引導操作系統(tǒng)啟動,并且大部分都可以支持串口和以太網(wǎng)接口。本文將對各種Bootloader總結(jié)分類,分析它們的各自特點??梢钥吹奖?就是我的匯總表
正文:
表1 開放源碼的Linux引導程序【1】
Bootloader | 描述 | x86 | ARM | PowerPC |
LILO | Linux磁盤引導程序 | 是 | 否 | 否 |
GRUB | GNU的LILO替代程序 | 是 | 否 | 否 |
Loadlin | 從DOS引導Linux | 是 | 否 | 否 |
ROLO | 從ROM引導Linux而不需要BIOS | 是 | 否 | 否 |
Etherboot | 通過以太網(wǎng)卡啟動的Linux系統(tǒng)的固件 | 是 | 否 | 否 |
LinuxBIOS | 完全替代BUIS的Linux引導程序 | 是 | 否 | 否 |
BLOB | LART等的硬件平臺的引導程序 | 否 | 是 | 否 |
U-boot | 通用引導程序 | 是 | 是 | 是 |
RedBoot | 基于eCos的引導程序 | 是 | 是 | 是 |
vivi | 專為ARM處理器系列設(shè)計 | 否 | 是 | 否 |
Bios-lt | 專為S3C4510B開發(fā)的引導程序 | 否 | 是 | 否 |
Bootldr | 康柏的支持SA1100芯片引導程序 | 否 | 否 | 否 |
Linux傳統(tǒng)上是通過LILO(LInux LOader)引導的,后來又出現(xiàn)了GNU的軟件GRUB(GRand Unified Bootloader)。這2種Bootloader廣泛應用在X86的Linux系統(tǒng)上。你的開發(fā)主機可能就使用了其中一種,熟悉它們有助于配置多種系統(tǒng)引導功能。
LILO軟件工程是由Werner Almesberger創(chuàng)建,專門為引導Linux開發(fā)的。現(xiàn)在LILO的維護者是John Coffman,最新版本下載站點:http://lilo.go.dyndns.org。LILO有詳細的文檔,例如LILO套件中附帶使用手冊和參考手冊。此外,還可以在LDP的“LILO mini-HOWTO”中找到LILO的使用指南。
GRUB是GNU計劃的主要bootloader。GRUB最初是由Erich Boleyn為GNU Mach操作系統(tǒng)撰寫的引導程序。后來有Gordon Matzigkeit和Okuji Yoshinori接替Erich的工作,繼續(xù)維護和開發(fā)GRUB。GRUB的網(wǎng)站http://www.gnu.org/software/grub/上有對套件使用的說明文件,叫作《GRUB manual》。GRUB能夠使用TFTP和BOOTP或者DHCP通過網(wǎng)絡(luò)啟動,這種功能對于系統(tǒng)開發(fā)過程很有用。
“Loadlin不用安裝,可以存在任何DOS可以訪問的介質(zhì)(比如磁盤,甚至是網(wǎng)絡(luò)存儲)。當系統(tǒng)崩潰的時候,甚至LILO也不能起來,Loadlin是一項極佳的工具來啟動系統(tǒng)或恢復文件系統(tǒng)?,F(xiàn)在許多cdrom就是通過Loadlin來安裝Linux,因為它不需要硬盤,用DOS來裝載Linux。Loadlin可以適合幾乎所有的DOS系統(tǒng),啟動限制也比較少。它使用擴展內(nèi)存,可以驅(qū)動大內(nèi)核和ramdisk鏡像”【4】。
ROLO ROLO: A Developer's Guide,它討論了在不利用 BIOS 的情況下引導 Linux(Embedded Linux Works,2001 年 6 月)。
Etherboot是用來制作X86計算機無盤啟動BOOTROM的工具,它理論上可以支持廣播的TCP/IP網(wǎng)絡(luò)。etherboot對于現(xiàn)在非常流行的CLUSTER應用和低成本X終端非常有用。“無盤啟動可以由netboot,etherboot及pxe實現(xiàn)。現(xiàn)在一般選用的是etherboot,而pxe方式是未來的方向,只是在目前條件尚未成熟”【3】。
“LinuxBIOS目標是以能在冷啟動狀態(tài)下啟動Linux的Linux內(nèi)核來替代PC、Alpha和其它機器上的常規(guī)BIOS。LinuxBIOS根本上就是Linux,在通用的Linux內(nèi)核打上大約10行的補丁。再加上啟動代碼,大約500行的匯編和5000行的C代碼,在Linux接管前運行16個指令來進入32位方式并完成DRAM和其它硬件的初始化。他們項目原來的動機是維護龐大的cluster集群”【5】。
Blob(Boot Loader Object)是由Jan-Derk Bakker and Erik Mouw發(fā)布的,是專門為StrongARM 構(gòu)架下的LART設(shè)計的Boot Loader。Blob的最后版本是blob-2.0.5,其發(fā)布網(wǎng)址為:http://www.lart.tudelft.nl/lartware/blob/。Blob支持SA1100的LART主板,但用戶也可以自行修改移植。 Blob也提供兩種工作模式,在啟動時處于正常的啟動加載模式,但是它會延時 10 秒等待終端用戶按下任意鍵而將 Blob 切換到下載模式。如果在 10 秒內(nèi)沒有用戶按鍵,則 Blob 繼續(xù)啟動 Linux 內(nèi)核。其基本功能為:
- 初始化硬件(CPU速度,存儲器,中斷,RS232串口)
- 引導Linux內(nèi)核并提供ramdisk
- 給LART下載一個內(nèi)核或者ramdisk
- 給FLASH片更新內(nèi)核或者ramdisk
- 測定存儲配置并通知內(nèi)核
- 給內(nèi)核提供一個命令行
Blob功能比較齊全,代碼較少,比較適合做修改移植,用來引導Liunx,目前大部分S3C44B0板都用Blob修改移植后來加載uClinux。
U-Boot是由開源項目PPCBoot發(fā)展起來的,ARMboot并入了PPCBoot,和其他一些arch的Loader合稱U-Boot。2002年12月17日第一個版本U-Boot-0.2.0發(fā)布,同時PPCBoot和ARMboot停止維護。U-Boot自發(fā)布以后已更新6次,最新版本為U-Boot-1.1.1,U-Boot的支持是持續(xù)性的。其發(fā)布網(wǎng)址為:http://sourceforge.net/projects/u-boot/。U-Boot支持的處理器構(gòu)架包括PowerPC (MPC5xx,MPC8xx,MPC82xx,MPC7xx,MPC74xx,4xx), ARM (ARM7,ARM9,StrongARM,Xscale),MIPS (4Kc,5Kc),x86等等, U-Boot(Universal Bootloader)從名字就可以看出,它是在GPL下資源代碼最完整的一個通用Boot Loader。 U-Boot提供兩種操作模式:啟動加載(Boot loading)模式和下載(Downloading)模式,并具有大型Boot Loader的全部功能。主要特性為:
- SCC/FEC以太網(wǎng)支持
- BOOTP/TFTP引導
- IP,MAC預置功能
- 在線讀寫FLASH,DOC, IDE,IIC,EEROM,RTC
- 支持串行口kermit,S-record下載代碼
- 識別二進制、ELF32、pImage格式的Image,對Linux引導有特別的支持
- 監(jiān)控(minitor)命令集:讀寫I/O,內(nèi)存,寄存器、內(nèi)存、外設(shè)測試功能等
- 腳本語言支持(類似BASH腳本)
- 支持WatchDog,LCD logo,狀態(tài)指示功能等
U-Boot的功能是如此之強大,涵蓋了絕大部分處理器構(gòu)架,提供大量外設(shè)驅(qū)動,支持多個文件系統(tǒng),附帶調(diào)試、腳本、引導等工具,特別支持Linux,為板級移植做了大量的工作。U-Boot1.1.1版本特別包含了對SA1100和44B0芯片的移植,所以44B0移植主要是針對Board 的移植,包括FLASH、內(nèi)存配置以及串口波特率等等。U-Boot的完整功能性和后續(xù)不斷的支持,使系統(tǒng)的升級維護變得十分方便。Redboot是Redhat公司隨eCos發(fā)布的一個BOOT方案,是一個開源項目。當前Redboot的最新版本是Redboot-2.0.1,Redhat公司將會繼續(xù)支持該項目,其官方發(fā)布網(wǎng)址為:http://sources.redhat.com/redboot/。Redboot支持的處理器構(gòu)架有ARM,MIPS,MN10300,PowerPC, Renesas SHx,v850,x86等,是一個完善的嵌入式系統(tǒng)Boot Loader。
Redboot是在ECOS的基礎(chǔ)上剝離出來的,繼承了ECOS的簡潔、輕巧、可靈活配置、穩(wěn)定可靠等品質(zhì)優(yōu)點。它可以使用X-modem或Y-modem協(xié)議經(jīng)由串口下載,也可以經(jīng)由以太網(wǎng)口通過BOOTP/DHCP服務(wù)獲得IP參數(shù),使用TFTP方式下載程序映像文件,常用于調(diào)試支持和系統(tǒng)初始化(Flash下載更新和網(wǎng)絡(luò)啟動)。Redboot可以通過串口和以太網(wǎng)口與GDB進行通信,調(diào)試應用程序,甚至能中斷被GDB運行的應用程序。Redboot為管理FLASH映像,映像下載,Redboot配置以及其他如串口、以太網(wǎng)口提供了一個交互式命令行接口,自動啟動后,REDBOOT用來從TFTP服務(wù)器或者從Flash下載映像文件加載系統(tǒng)的引導腳本文件保存在Flash上。當前支持單板機的移植版特性有:
- 支持ECOS,Linux操作系統(tǒng)引導
- 在線讀寫Flash
- 支持串行口kermit,S-record下載代碼
- 監(jiān)控(minitor)命令集:讀寫I/O,內(nèi)存,寄存器、 內(nèi)存、外設(shè)測試功能等
Redboot是標準的嵌入式調(diào)試和引導解決方案,支持幾乎所有的處理器構(gòu)架以及大量的外圍硬件接口,并且還在不斷地完善過程中。
vivi是由mizi公司設(shè)計為ARM處理器系列設(shè)計的一個bootloader,因為vivi目前只支持使用串口和主機通信,所以您必須使用一條串口電纜來連接目標板和主機。它的主要特性有:
- 把內(nèi)核(kernel)從flash復制到RAM,然后啟動它
- 初始化硬件
- 下載程序并寫入flash(一般通過串口或者網(wǎng)口先把內(nèi)核下載到RAM中,然后寫入到flash)
- 檢測目標板(bootloader會有一些簡單的代碼用以測試目標板硬件的好壞)
Bios-lt是專門支持三星(Samsung)公司ARM構(gòu)架處理器S3C4510B的Loader,可以設(shè)置CPU/ROM/SDRAM/EXTIO,管理并燒寫FLASH,裝載引導uClinux內(nèi)核。這是國內(nèi)工程師申請GNU通用公共許可發(fā)布的。Bios-lt的最新版本是Bios-lt-0.74,另外還提供了S3C4510B的一些外圍驅(qū)動,其發(fā)布網(wǎng)址為:http://sourceforge.net/projects/bios-lt。
Bootldr是康柏(Compaq)公司發(fā)布的,類似于compaq iPAQ Pocket PC,支持SA1100芯片。它被推薦用來引導Llinux,支持串口Y-modem協(xié)議以及jffs文件系統(tǒng)。Bootldr的最后版本為Bootldr-2.19,其發(fā)布網(wǎng)址為:http://www.wearablegroup.org/software/bootldr/。
總結(jié)及展望:由于時間有限,本文只是對于網(wǎng)絡(luò)資源的總結(jié),只想盡可能多得列出現(xiàn)有一些流行的Bootloader一些特性,如果想進一步的研究,可以閱讀各個Bootloader的源代碼,相信對各類硬件及操作系統(tǒng)的啟動有更加清晰的了解。
參考文獻:
【1】、孫紀坤 張小全,《嵌入式Linux系統(tǒng)開發(fā)技術(shù)詳解-基于ARM》
【2】、《幾種Bootloader簡介》,http://www.ednchina.com/blog/peter8888/3300/message.aspx
【3】、吳峰光,《etherboot無盤啟動》,http://micro.ustc.edu.cn/Linux/text/wfg-etherboot.txt
【4】、《loadlin manual》,http://www.0wei.com/blog.php?tid=13560
【5】、《LinuxBIOS的簡介》,http://blog.chinaunix.net/u/3577/showart.php?id=61761
上一篇:如何學習基于ARM平臺的嵌入式系統(tǒng)
下一篇:Linux Bootloader
推薦閱讀最新更新時間:2025-04-25 21:19


設(shè)計資源 培訓 開發(fā)板 精華推薦
- 使用 Analog Devices 的 LT1072HVCT 的參考設(shè)計
- ST1L05BPUR 極低靜態(tài) BiCMOS 穩(wěn)壓器的典型 ST1L05B 應用原理圖
- 使用 Analog Devices 的 LTC2411-1IMS 的參考設(shè)計
- LTC4367IMS8-1 用于限制浪涌電流的過壓電源保護控制器的典型應用
- MC33074DR2G 交流/直流接地電流監(jiān)測器的典型應用
- 【CW32】自律定時器
- NCV33074DR2G橋式電流放大器的典型應用
- AD5326 四路電壓輸出、12 位數(shù)模轉(zhuǎn)換器的典型應用
- L7805A 具有溫度補償?shù)目烧{(diào)輸出電壓的典型應用
- 用于維恩橋振蕩器的 LMV821SQ3T2G 單路低電壓運算放大器的典型應用電路
- 高性能電動滑板車 BLDC 電機驅(qū)動器:技術(shù)解析與應用展望
- 5G工業(yè)網(wǎng)關(guān)的“邊緣計算+AI推理”一體化設(shè)計,PLC協(xié)議解析與缺陷檢測的實時聯(lián)動
- AR眼鏡的“工業(yè)指令投射”系統(tǒng),SLAM的空間定位、PLC數(shù)據(jù)實時疊加顯示
- 多光譜氣體傳感器的抗交叉干擾設(shè)計
- 多模態(tài)融合感知的“語義-幾何”聯(lián)合建模
- 工業(yè)觸摸屏的“壓感-手勢”多模態(tài)交互設(shè)計
- 工業(yè)機器人高精度力控的“雙模融合”傳感器設(shè)計
- 工業(yè)機器人集群的“數(shù)字孿生-物理實體”閉環(huán)優(yōu)化
- 工業(yè)以太網(wǎng)交換機的“時間敏感網(wǎng)絡(luò)(TSN)”改造
- 工業(yè)現(xiàn)場信號測試:耦合方式選擇實戰(zhàn)案例