关于Bootloader的作用,老师教我们把它当作PC的BIOS来理解,但其实不完全是这么回事。文章参考:

http://www.cnblogs.com/yashi88/archive/2010/02/11/1667548.html

http://hi.baidu.com/shaohua312/item/2284a71e318c1512e3f98636

 

BootLoader 是系统加电后运行的第一段代码。一般它只在系统启动时非常短的时间内运行。

在PC中,整个BootLoader由BIOS(主板上固化的一段程序)、位于硬盘MBR区的OS Loader一起组成。BIOS完成第一级引导加载工作,OS Loader完成第二级引导加载工作(可能有些系统不只两级加载)。上电后,系统开始执行BIOS中的代码,这段代码负责进行硬件检测和资源分配,完成这步工作后,将按照CMOS中设定的顺序检索硬盘。BIOS将第一个检索到的硬盘上MBR中的内容读到系统RAM中,然后将系统控制权交给相应的OS Loader。最后由OS Loader负责将所要引导的操作系统的内核映象从硬盘上读到系统RAM中,然后跳转到内核的入口点上。

而在嵌入式中,通常不存在BIOS那样的一段固定内容的固化的程序。原因是PC平台尽管品牌等有差异,但通常都有相近甚至是相同的体系结构,遵循一个共同的工业标准,因而可以使用同一个BIOS代码来引导。而通常对嵌入式系统来说,即使是使用相同的架构,甚至是同一个CPU来构建,但因为并不能遵循的一个共同的工业标准。因而在嵌入式系统上除非两者的各方面与引导过程相关设计完成一致,否则不能使用同一个BootLoader。

其实Bootloader主要的必须的作用只有一个:就是把操作系统映像文件拷贝到RAM中去,然后跳转到它的入口处去执行,我们称之为启动加载模式,该过程没有用户的介入,是它正常工作的模式。它的步骤如下:

Stage1:

1. 硬件设备初始化。为stage2的执行及随后内核的执行准备好基本的硬件环境

2. 为加载stage2 准备ram空间。为了获得更好的执行速度,通常吧stage2加载到ram中执行

3. 复制stage2的代码到ram中

4. 设置好堆栈

5. 跳转到stage2的c程序入口

Stage2:

1. 初始化本阶段要使用的硬件设备

2. 检测系统内存映射

3. 将内核映像和根文件系统映像从flash读到ram中

4. 为内核设置启动参数

5. 调用内核

然而,在嵌入式开发中,经常需要为一个嵌入式的硬件系统下载新的Bootloader,操作系统(内核,根文件系统系统)等,此时用到的是Bootloader的下载功能,我们称之为下载模式,该过程有用户的介入。我在使用uboot的过程中,发现它提供了基于usb的下载(pc端的dnf),也有基于网络的下载(我的开发板uboot启动的时候开发板就已经有局域网的ip地址了,网卡已经被驱动了,uboot提供了基于tftp协议的下载,还有其它查看内存,格式化存储器等功能)。

关于串口终端显示的信息是不是由Bootloader提供的,我搜索了一下,没找到相关信息。但我个人认为串口终端的信息也是Bootloader提供的,用于与用户交互。

 

所以说,Bootloader并不是可以完全简单的理解为pc的BIOS。它完成了BIOS+OSLoader的功能,同时向开发人员提供系统运行的信息及调试信息,提供了下载功能,及其它辅助功能。

下面这段纯粹copy过来的

bootloader是不是必须的:

Bootloader并不是必须的,如果我们的硬件有足够大的norflash,并且实现了XIP技术,那么WinCE 操作系统可以直接在norflash里面运行起来,不需要将它复制到RAM中去,所以Bootloader就失去了作用。

但是考虑到成本因素,现在的硬件一般都不会配置这么大的norflash,image文件都存储在nand flash里面,所以都会用到Bootloader。

附加说明一下PC上Linux的启动过程:

1.BIOS启动,初始化硬件,系统自检,假设BIOS设定为从硬盘启动(这里不考虑光盘,及其它可移动存储设备)

2.每个磁盘的首部都有一个MBR,记录了分区信息,还有引导程序,新的硬盘没有MBR,格式化之后就有了。系统找到硬盘的MBR,根据MBR里面的引导程序找到要启动的分区。附图一张,我常用的引导备份工具,:

3.根据MBR里面的引导程序,找到要启动的分区,每个分区首部都要一个PBR,PBR里边可能也有启动信息,根据MBR里边的程序来定。附两张图:

4.在指定的分区中加载Linux内核,启动操作系统。

 

附件:

U-Boot的常用命令详解.pdf

下载地址:

http://pan.baidu.com/share/link?shareid=135850&uk=3238766853

转载于:https://www.cnblogs.com/cateats2016/archive/2012/12/06/2804387.html

[嵌入式]Bootloader的作用相关推荐

  1. 嵌入式BootLoader技术内幕

    嵌入式BootLoader技术内幕(一) 本文详细地介绍了基于嵌入式系统中的 OS 启动加载程序 ―― Boot Loader 的概念.软 件设计的主要任务以及结构框架等内容. 一.引言 在专用的嵌入 ...

  2. bootloader的作用

    一.bootloader的作用 其实bootloader主要的必须的作用只有一个:就是把操作系统映像文件拷贝到RAM中去,然后跳转到它的入口处去执行. 而操作系统文件的来源,可以是flash,sd c ...

  3. Bootloader 的作用

    https://blog.csdn.net/feihuxiaozi/article/details/6963654 一.bootloader的作用 其实bootloader主要的必须的作用只有一个:就 ...

  4. 基于ARM的嵌入式Bootloader实现自动升级

    摘要:本文阐述了ARM7嵌入式系统Bootloader的基本流程,重点分析了在Bootloader中通过CF存储卡或硬盘实现对内核或文件系统进行升级.并通过EM8624L在ARM+uClinux下实验 ...

  5. Linux嵌入式 -- Bootloader , Uboot

    1. Bootloader作用 PC机中的引导加载程序由BIOS(其本质是一段固件程序)和GRUB或LILO一起组成.BIOS在完成硬件检测和资源分配后,将硬盘中的引导程序读到系统内存中然后将控制权交 ...

  6. 嵌入式BootLoader技术内幕(一)

    作者:詹荣开 (zhanrk@sohu.com) 本文选自:IBM DW 2003年12月30日 本文详细地介绍了基于嵌入式系统中的 OS 启动加载程序 ―― Boot Loader 的概念.软 件设 ...

  7. 嵌入式BootLoader技术内幕(二)

    三.Boot Loader 的主要任务与典型结构框架 在继续本节的讨论之前,首先我们做一个假定,那就是:假定内核映像与根文件系统映像 都被加载到 RAM 中运行.之所以提出这样一个假设前提是因为,在嵌 ...

  8. Bootloader的作用与实现

    一.为什么要用Bootloader? 1.对于不同的CPU体系结构都有不同的Bootloader,例如ARM.MIPS都有自己的Bootloader.除了依赖于CPU的体系结构外,Bootloader ...

  9. 嵌入式计算机平台作用,嵌入式系统在机器人系统中的作用

    嵌入式系统在机器人系统中的作用 几十年前,机器人的应用主要限于工业和研究环境,甚至限于科幻小说领域.如今,机器人技术已渗透到几乎每个领域.它们是日常生活的一部分,通常人类没有意识到它们的影响. 随着技 ...

最新文章

  1. python 调用 tensorflow.dll_解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题...
  2. 【MPI程序】向量乘法,向量点积(高性能计算)
  3. JZOJ 5987. 【WC2019模拟2019.1.4】仙人掌毒题
  4. 学破解 一 PE格式之MS-DOS MZ header
  5. python 队列与栈的实现
  6. bzoj 1042 HAOI2008 硬币购物
  7. 不想一直做码农的请进~
  8. 《Python数据分析实战》3 NumPy库
  9. ckplayer快速入门
  10. cl_long.py
  11. 改(微微微微微小说)
  12. 74-内存和外存的知识点
  13. 函数的定义以及关键字参数
  14. jcifs报错,jcifs.util.transport.TransportException: Transport1 timedout waiting for response to SmbComR
  15. 华为云618年中钜惠,服务器免费领三个月
  16. 海尔计算机无法装win7系统,海尔自带Win10系统如何改成Win7系统?海尔台式机装win7详细步骤...
  17. 大学计算机专业可以用台式电脑吗,大学带台式机的人多吗 方便吗
  18. 老菜鸟学PYthon - 高考志愿填报数据的实时采集
  19. 数据库课程大作业:课程管理系统——java实现、图形化,我写了MySQL和SQL两个版本
  20. 三星oneui主屏幕费电_三星OneUI 3.0升级时间表:电池问题似乎已经修复

热门文章

  1. Spring Boot 如何自定义Starter,你知道吗?
  2. 我是如何在面试别人Spring事务时“套路”对方的
  3. Java对象的序列化与反序列化
  4. 微信中两大典型微服务案例
  5. Spring boot 集成工作流flowable去掉xml配置
  6. Flowable基础二十一 Flowable springboot 集成
  7. JVM:类加载机制之类加载过程
  8. 夏季机房空调预警,出现故障了怎么办?
  9. 数据中心如何减少人为故障发生率
  10. android程序退出 语句,android开发中continue,break、return的区别与使用