计算机操作系统的引导装载程序是系统必不可少的一部分,引导装载程序是系统加电后运行的一段代码。在嵌入式系统中,通常并没有像BIOS那样的固件程序,因此整个系统的加载启动任务完全由引导程序Bootloader来完成。简单地说,Bootloader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,Bootloader是完全依赖于硬件而实现的,特别是在嵌入式系统,嵌入式产品型号众多,硬件环境复杂,建立一个通用的Bootloader几乎是不可能的。尽管如此,仍然可以对Bootloader归纳出一些通用的概念,以指导特定的Bootloader设计与实现。
针对不同的处理器体系结构通常有不同的Bootloader程序,但是有些Bootloader也可以同时支持多种体系结构的处理器,例如,U-Boot就同时支持多种体系结构。另外,除了依赖于CPU的体系结构,Bootloader也依赖于具体的嵌入式板级设备的配置,如板卡的硬件地址分配、RAM芯片的类型等。针对ARM处理器,常见的Bootloader有U-Boot、RedBoot和ARMBoot等。
(1)U-Boot
它是sourceforge上的一个开放源代码的项目,可对PowerPC、ARM、MIPS、x86等处理器提供支持,它支持的嵌入式操作系统有Linux、VxWorks、NetBSD、QNX、RTEMS等,是目前支持最广泛、使用最多的Bootloader。
(2)RedBoot
RedBoot是Redhat公司随eCOS(embedded Configurable Operating System)发布的一个Boot方案,是一个开源项目。RedBoot可以通过串口和以太网口与GDB进行通信,调试应用程序,甚至能中断被GDB运行的应用程序。RedBoot是在eCOS的基础上剥离出来的,继承了eCOS的简洁、轻巧、可灵活配置、稳定可靠等品质优点。它可以使用X-modem或Y-modem协议经由串口下载,也可以经由以太网口通过BOOTP/DHCP服务获得IP参数,使用TFTP方式下载程序映像文件,常用于调试支持和系统初始化(Flash下载更新和网络启动)。
(3)ARMBoot(www.xing528.com)
ARMBoot是sourceforge上的一个开放源代码的项目,它最初的设计只是针对ARM处理器体系结构,所以它可以很容易地被移植到各种以ARM为核心的平台上。
每种不同的CPU体系结构都有不同的Bootloader。有些Bootloader也支持多种体系结构的CPU,如U-Boot就同时支持ARM体系结构和MIPS体系结构。除了依赖于CPU的体系结构外,Bootloader实际上也依赖于具体的嵌入式板级设备的配置。也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,要想让运行在一块板子上的Bootloader程序也能运行在另一块板子上,通常也都需要修改Bootloader的源程序。
系统加电或复位后,所有的CPU通常都从某个由CPU制造商预先安排的地址上取指令。而基于CPU构建的嵌入式系统通常都有某种类型的固态存储设备(如ROM、EEPROM或Flash等)被映射到这个预先安排的地址上。因此,在系统加电后,CPU将首先执行Bootloader程序。
图3-1所示是一个同时装有Bootloader、内核的启动参数、内核映像和根文件系统映像的固态存储设备的典型空间分配结构。
图3-1 固态存储设备的典型空间分配结构
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。