Bootloader概述

  • 对于嵌入式系统,Bootloader是基于特定硬件平台来实现的。因此,几乎不可能为所有的嵌入式系统建立一个通用的Bootloader,不同的处理器架构都有不同的Bootloader。Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。对于2块不同的嵌入式板而言,即使它们使用同一种处理器,要想让运行在一块板子上的Bootloader程序也能运行在另一块板子上,一般也都需要修改Bootloader的源程序。

      反过来,大部分Bootloader仍然具有很多共性,某些Bootloader也能够支持多种体系结构的嵌入式系统。例如,U-Boot就同时支持PowerPC、ARM、MIPS和X86等体系结构,支持的板子有上百种。通常,它们都能够自动从存储介质上启动,都能够引导操作系统启动,并且大部分都可以支持串口和以太网接口。

Bootloader的种类

  •   嵌入式系统世界已经有各种各样的Bootloader,种类划分也有多种方式。除了按照处理器体系结构不同划分以外,还有功能复杂程度的不同。

      首先区分一下“Bootloader”和“Monitor”的概念。严格来说,“Bootloader”只是引导设备并且执行主程序的固件;而“Monitor”还提供了更多的命令行接口,可以进行调试、读写内存、烧写Flash、配置环境变量等。“Monitor”在嵌入式系统开发过程中可以提供很好的调试功能,开发完成以后,就完全设置成了一个“Bootloader”。所以,习惯上大家把它们统称为Bootloader。

      表列出了Linux的开放源码引导程序及其支持的体系结构。表中给出了X86 ARM PowerPC体系结构的常用引导程序,并且注明了每一种引导程序是不是“Monitor”。

    开放源码的Linux 引导程序

      表 开放源码的Linux 引导程序

      对于每种体系结构,都有一系列开放源码Bootloader可以选用。

      (1)X86

      X86的工作站和服务器上一般使用LILO和GRUB。LILO是Linux发行版主流的Bootloader。不过Redhat Linux发行版已经使用了GRUB,GRUB比LILO有更有好的显示界面,使用配置也更加灵活方便。

      在某些X86嵌入式单板机或者特殊设备上,会采用其他Bootloader,例如:ROLO。这些Bootloader可以取代BIOS的功能,能够从FLASH中直接引导Linux启动。现在ROLO支持的开发板已经并入U-Boot,所以U-Boot也可以支持X86平台。

      (2)ARM

      ARM处理器的芯片商很多,所以每种芯片的开发板都有自己的Bootloader。结果ARM bootloader也变得多种多样。最早有为ARM720处理器的开发板的固件,又有了armboot,StrongARM平台的blob,还有S3C2410处理器开发板上的vivi等。现在armboot已经并入了U-Boot,所以U-Boot也支持ARM/XSCALE平台。U-Boot已经成为ARM平台事实上的标准Bootloader。

      (3)PowerPC

      PowerPC平台的处理器有标准的Bootloader,就是ppcboot。PPCBOOT在合并armboot等之后,创建了U-Boot,成为各种体系结构开发板的通用引导程序。U-Boot仍然是PowerPC平台的主要Bootloader。

      (4)MIPS

      MIPS公司开发的YAMON是标准的Bootloader,也有许多MIPS芯片商为自己的开发板写了Bootloader。现在,U-Boot也已经支持MIPS平台。

      (5)SH

      SH平台的标准Bootloader是sh-boot。Redboot在这种平台上也很好用。

      (6)M68K

      M68K平台没有标准的Bootloader。Redboot能够支持m68k系列的系统。

      值得说明的是Redboot,它几乎能够支持所有的体系结构,包括MIPS、SH、M68K等体系结构。Redboot是以eCos为基础,采用GPL许可的开源软件工程。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编写Bootloader是一项复杂的任务,需要深入了解计算机体系结构和操作系统的启动过程。下面是一个简单的Bootloader编写过程的概述: 1. 选择开发环境:你可以选择使用汇编语言或高级语言(如C或C++)来编写Bootloader。使用汇编语言可以更精确地控制硬件,而使用高级语言可以提供更高的可读性和易用性。 2. 编写引导扇区代码:Bootloader通常位于引导设备的第一个扇区(512字节)。你需要编写代码来加载更多的Bootloader和操作系统内核,并将控制权转交给它们。这段代码需要执行一系列操作,如设置中断向量、初始化硬件、加载其他代码等。 3. 选择加载方式:你可以选择使用LBA(Logical Block Addressing)或CHS(Cylinder-Head-Sector)方式来加载更多的Bootloader和操作系统内核。LBA方式更为常见和简单,可以通过读取硬盘扇区的物理地址来加载数据。 4. 加载和执行操作系统内核:Bootloader需要加载操作系统内核到内存中,并将控制权转交给它。这涉及读取操作系统内核文件,并将其加载到指定的内存位置。一旦内核加载完毕,Bootloader会跳转到内核的入口点,使操作系统开始执行。 5. 错误处理和恢复:在编写Bootloader时,需要考虑错误处理和恢复机制,以便在出现错误或异常情况时能够进行适当的处理和恢复操作。 请注意,编写Bootloader是一项具有挑战性的任务,需要有深入的计算机系统知识和编程技能。建议参考相关的文档、教程和示例代码,以便更好地理解和实践Bootloader的编写过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值