1 Bootloader和BIOS

1.1 BIOS

  BIOS(Basic Input Output System):基本输入输出系统。它是一组固化到计算机内主板上一个ROM芯片上的程序 ,保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。 
  BIOS连接软件与硬件的一座“桥梁”,是计算机的开启时运行的第一个程序,主要功能是为计算机提供最底层的、最直接的硬件设置和控制。BIOS的三个主要功能:

  • 自检及初始化程序,分为三个部分
  1. 加电自检(POST):功能是检查计算机硬件是否良好,自检中如发现有错误,将按两种情况处理:对于严重故障(致命性故障)则停机,此时由于各种初始化操作还没完成,不能给出任何提示或信号;对于非严重故障则给出提示或声音报警信号,等待用户处理。

  2. 初始化:创建中断向量、设置寄存器、对一些外部设备进行初始化和检测等,其中很重要的一部分是BIOS设置,主要是对硬件设置的一些参数,当计算机启动时会读取这些参数,并和实际硬件设置进行比较,如果不符合,会影响系统的启动。

  3. 加载引导程序:功能是引导Dos或其他操作系统,此时会在硬盘读取引导记录,然后把计算机的控制权转交给引导记录,由引导记录(IPL与SPL)把操作系统装入电脑,在电脑启动成功后,BIOS的这部分任务就完成了。也就是说BIOS本身不能引导OS内核。

  • 程序服务处理;BIOS直接与计算机的I/O设备(Input/Output,即输入/输出设备)打交道,通过特定的数据端口发出命令,传送或者接受各种外部设备的数据,实现软件程序对硬件的直接操作。
  • 硬件中断处理;开机时BIOS会告诉CPU各硬件设备的中断号,当用户发出使用某个设备的指令后,CPU就根据中断号使用相对应的硬件完成工作,再根据中断号跳回原来的工作。

     BIOS分为:Legacy BIOS 和 UEFI BIOS

1.2 Bootloader

通俗说Bootloader就是用来加载操作系统的。在PC上是在BIOS之后运行。

在典型的嵌入式系统中引导加载程序(bootloader)具有如下特点:

  • 嵌入式系统中在操作系统内核运行前运行的程序
  • 可以分为单阶段的BootLoader多阶段的BootLoader,一般从从固态存储设备上启动的Bootloader大多都是 2 阶段的启动过程,如uboot是2阶段的grub就是单阶段的

一般而言,这两个阶段完成的功能可以如下分类,但这不是绝对的:

Bootloader第一阶段的功能: 

  • 硬件设备初始化。
  • 为加载Bootloader的第二阶段代码准备RAM空间。
  • 拷贝Bootloader的第二阶段代码到 RAM 空间中。
  • 设置好栈。
  • 跳转到第二阶段代码的C入口点。
  • 在第一阶段进行的硬件初始化一般包括:关闭WATCHDOG、关中断、设置CPU的速度和时钟频率、RAM初始化等。这些并不都是必需的,比如S3C2410/S3C2440的开发板所使用的U-Boot中,就将CPU的速度和时钟频率的设置放在第二阶段。甚至,将第二阶段的代码复制到RAM空间中也不是必需的,对于NORFlash等存储设备,完全可以在上面直接执行代码,只不过这相比在RAM中执行效率大为降低。

Bootloader第二阶段的功能: 

  • 初始化本阶段要使用到的硬件设备
  • 检测系统内存映射(memory map)。
  • 将内核映像和根文件系统映像从Flash上读到RAM空间中。
  • 为内核设置启动参数。
  • 调用内核。

1.3 关系

BIOS和Bootloader没啥大区别:就是两个底层程序片段。 为啥不耦合在一起?看场景吧,在PC系统上BIOS和Bootloader分开了,感觉还是PC端外设导致的,开机后需要先做做设备的检测。然后PC端系统版本多,适配也麻烦,就分两个功能出去了。 在嵌入式系统里,基本集成到一段,叫Bootloader了:检测硬件然后启动系统的一个小小的系统代码段就是Bootloader。在安卓系统一般也只说Bootloader了

2 不同平台的引导加载程序

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的引导程序

windows引导程序及其支持的体系结构见下表:

BootLoader

描述

x86

ARM

PowerPC

NTLOADER

Linux磁盘引导程序

NA

NA

Bootmgr

启动管理器

NA

NA

2.1 PC平台的Grub与 bootmgr

  GNU GRUB(GRand Unified Bootloader简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。可用来用来引导不同系统,如windows,linux,通常用于linux,毕竟是GNU的嘛。 

  Windows也有类似的工具NTLOADERBootmgr;比如我们在机器中安装了Windows 98后,我们再安装一个Windows XP ,在机器启动的会有一个菜单让我们选择进入是进入Windows 98 还是进入Windows XP。NTLOADER就是一个多系统启动引导管理器,NTLOADER 同样也能引导Linux,只是极为麻烦罢了。BootmgrBoot Manager的缩写,是在Windows Vista、Windows 7、windows 8/8.1和windows 10中使用的新的启动管理器,以代替Windows NT系列操作系统(Windows XP、Windows 2003)中的启动管理器——NTLOADER。

2.2 嵌入式平台的u-boot

  U-Boot,全称为Universal Boot Loader,即通用Bootloader,是遵循GPL条款的开放源代码项目。其前身是由德国DENX软件工程中心的Wolfgang Denk基于8xxROM的源码创建的PPCBOOT工程。后来整理代码结构使得非常容易增加其他类型的开发板、其他架构的CPU(原来只支持 PowerPC);增加更多的功能,比如启动Linux、下载S-Record格式的文件、通过网络启动、通过PCMCIA/CompactFLash /ATA disk/SCSI等方式启动。增加ARM架构CPU及其他更多CPU的支持后,改名为U-Boot。

  • 支持多种嵌入式操作系统内核,如Linux、NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS;
  • 支持多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale;

--------------------- 
作者:蓝月心语 
来源:CSDN 
原文:https://blog.csdn.net/liao20081228/article/details/81297143 
版权声明:本文为博主原创文章,转载请附上博文链接!

Bootloader和BIOS、uboot和grub和bootmgr的区别相关推荐

  1. Bootloader和BIOS、Grub、uboot概念

    近日写材料遇到了如上的几个名词,现对其概念进行总结如下: 1.Bootloader和BIOS 桌面电脑加电后BIOS会获取处理器控制权,是一个复杂的系统配置软件,它拥有硬件架构的底层信息.在典型的嵌入 ...

  2. 计算机组成原理 BootLoader/BIOS/U-Boot概念理解

    一.BIOS概述 BIOS是 Basic Input/Output System 的首字母缩写词.也称为 System BIOS.ROM BIOS 或 PC BIOS. 计算机的BIOS(基本输入/输 ...

  3. BootLoader 介绍 与 uboot 简介

    1 BootLoader 的介绍 1.1 BootLoader 的概念 BootLoader 的引入 如果它 能将噪作系统内核复制到内存中运行,无论从本地[比如Fh)还是从远端(比如通过网络), Bo ...

  4. Linux内核学习(三):Bootloader的特种兵-Uboot(一)

    Linux内核学习(三):Bootloader的特种兵-Uboot(一) 内容全部来自–><嵌入式应用开发完全手册> 1.什么是U-Boot U-Boot,全称为Universal ...

  5. UEFI启动与BIOS启动哪个好,有什么区别

    关于系统安装U盘安装一直没有怎么折腾忽然发现有UEFI的bios设置项花了一些时间.于是研究一下. 一键U盘装系统基本上大家都会了,在此操作之前有不少朋友问到,U盘启动那块的技术问题.其中就有UEFI ...

  6. Network 之十 BIOS + MBR、UEFI + GPT、GRUB、BOOTMGR、SYSLINUX、Option ROM

      最近,正在学习 iPXE 的源代码,于是开始各种 Google 查找 iPXE 的资料进行学习.学习中发现需要重点了解计算机的启动方式,现将学习过程中遇到的很多新的知识点整理为此文,作为后续的参考 ...

  7. BIOS,U-BOOT,BootLoader三者的对比

    如题,作为嵌入式学习新人,在学习期间,我常常有些混淆,故对上述三者进行对比,有助于理解和吸收. 一.BIOS 关于BIOS,第一次听说是大学期间安装系统,与Windows系统相关联.参考百科解释,概括 ...

  8. 什么是BIOS,VT-d,grub,iommu,VFIO

    什么是BIOS Basic Input Output System 基本输入输出系统. BIOS是个人电脑启动时加载的第一个软件. 其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计 ...

  9. 【Linux】嵌入式Linux系统的移植(下篇:BootLoader,以U-Boot为例)

    BootLoader BootLoader的概念 BootLoader就是在操作系统内核运行之前运行的一段小程序.通过这段小程序,可以初始化硬件设备.建立内存空间的映射图,从而将系统的软硬件环境带到一 ...

最新文章

  1. 工作中常用的linux命令梳理
  2. framework层和native层实现联网控制(iptable方式)
  3. python 双边滤波与高斯滤波
  4. python学习手册中文版免费下载-Python学习手册
  5. redux 和 react-redux 部分源码阅读
  6. Apache+tomcat+mod_jk+centos6.2负载均衡集群配置--转载
  7. 对话V神:权益证明POS新趋势
  8. pyqt5讲解2:QPushButton,QRadioButton,QCheckBox
  9. git使用log命令显示中文乱码
  10. rman学习笔记部分
  11. python观察日志(part3)--绘制科赫雪花图
  12. [导入]体验Asp.Net Mvc Preview5(3)-探索ModelBinder的工作原理
  13. Python 调试工具 PDB(Linux 环境下调试)
  14. 一下代码不符合php,各位帮我看看哪里错了一直提示错误,谢谢大家。可把代码复制一下...
  15. Django使用livereload自动刷新页面
  16. [java毕业设计]SSM+Mysql高校就业管理系统
  17. 基于Java实现大学生求职招聘信息网站系统
  18. e480win7显卡驱动_e480安装了windows7显卡驱动装不上
  19. Python————办公自动化
  20. ZAFU_2021_1_26_2021寒假个人赛第二场题解

热门文章

  1. Java中匿名子类 的 匿名对象、匿名子类 的 非匿名对象、非匿名类 的 匿名对象、非匿名类 的 非匿名对象
  2. 介绍一个产品的思维导图_什么叫产品思维导图(产品思维的定义)
  3. 学习打卡1-Matplotlib初相识
  4. jsp恩施州农业产业链农产品系统
  5. Halcon 第三章『Morphology形态学』◆第1节:腐蚀与膨胀
  6. meshlab比较模型误差
  7. Windows电脑上最好用的3个azw3阅读器
  8. 【OJ每日一练】1060 - 猴子分香蕉
  9. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.zyh.springboot.
  10. JZOJ 3823. 【NOIP2014模拟9.9】遇见