一些常见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

猜你喜欢

转载自blog.csdn.net/lwz15071387627/article/details/83114137