什么是Boot loader?

Boot loader(系统引导程序),操作系统内核运行之前运行的一段程序。它首先完成系统硬件的初始化,包括时钟的设置、存储区的映射等,设置堆栈指针等;然后把操作系统内核从flash区拷贝带ram区,并跳转到内核的入口,将系统的控制权交给操作系统,从此系统的运行和Boot loader再无任何关系。

Boot loader的特点

  • 高度依赖于硬件,包括处理机的体系结构、具体型号、硬件电路板的设计。
  • 不存在通用的Boot Loader,但存在Boot Loader的通用概念和规则
  • 宿主主机和目标机之间一般通过串口连接

Boot loader的启动过程
单阶段和多阶段(更复杂、具有更好的移植性)

Boot loader的两个操作模式

  • 启动加载(正常使用):即Boot Loader从目标机上的某个固态存储器上将操作系统加载到ram中运行,整个过程没有用户的介入。
  • 下载模式(开发人员用):目标机上的Boot Loader将通过串口或网络连接从主机上下载文件,例如内核映像和根文件系统等。下载的文件首先放在ram中,然后被Boot Loader写到固态存储器中。这种模式通常在第一次安装内核与根文件系统时使用。

重点Boot Loader介绍

  • LILO:Linux草创时期提出的Boot loader,有详细的文档。
  • GRUB:GNU计划的主要Boot loader。
  • Blob:使用广泛
  • U-Boot:功能最多、最具弹性以及开发最积极的开放源码Boot loader。
  • vivi:由mizi公司为ARM处理器系列设计的一个Boot loader,目前只支持使用串口和主机通信,所以必须使用一条串口来连接目标板和主机。

下面是一段Boot loader的简单实现汇编代码,我简述一下各部分的功能。(看蓝色代码部分)

  • 对不同控制寄存器的地址重新命名,使用起来方便一点。

  • 程序开始,b是一条无条件跳转指令,程序一旦启动,直接跳转到reset处执行命令。

  • 中断向量表

  • 十三行的长整型数据是存放在标号为MEMORY_CONFIG之下的用于配置内存的13个配置字。对于arm处理器来说,我们要配置它的13个内存控制寄存器,且地址需连续,需要提前设计好每个寄存器的配置字。连续存放,以便后面统一地写到那13个寄存器中,避免一个一个进行赋值。

  • 最前面的reset部分。因为程序刚刚启动,需要做一些初始化等比较重要的操作,在做这些操作时,处理器不希望被打断,所以将看门狗定时器关闭掉。

  • 因为需要E口进行对串口的访问,所以这一段是对E口的配置

  • 设置系统时钟,需要查数据手册,看每一个寄存器,给它进行如何的配置。

  • 设置存储器,将MEMORY_CONFIG包含13个内存控制寄存器配置字的首地址给r0,然后给r1-r13,内存控制寄存器的首地址给r0,然后把13个配置字送到r0指向的空间,完成把用于控制内存的13个配置字整体写入配置寄存器当中。

  • 完成Boot Loader的主要功能:
    把flash源地址中的头送给r0
    把flash目的地址中的头送给r1
    加法指令,加的数是操作系统内核的大小,r2表示在flash中操作系统内核的终止地址
    内核的拷贝
    源地址拷了八个出来送给r3-r10,然后拷贝到目的地址,感叹号表示数据拷贝完后指针同步移动
    检查是否拷贝完毕,直到所有内核拷贝到ram中

  • 控制权交给ram中的操作系统的内核

Boot Loader相关推荐

  1. boot loader:Grub

    boot loader是载入内核的重要工具,没有boot loader的话,kernel根本没办法被内核加载的 MBR是整个硬盘的第一个sector内的一个块,大小只有446bytes.但loader ...

  2. 嵌入式系统 Boot Loader 技术内幕-目前看到介绍Boot loader最通俗明了的文章

    1. 引言 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行.一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序.包括固化在固件(firmware) ...

  3. 什么是Boot Loader

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://yunli.blog.51cto.com/831344/181630 在嵌入式系统 ...

  4. 嵌入式系统 Boot Loader 技术内幕

    转载:http://www.ibm.com/developerworks/cn/linux/l-btloader/index.html 1. 引言 在专用的嵌入式板子运行 GNU/Linux 系统已经 ...

  5. MIT JOS学习笔记01:环境配置、Boot Loader(2016.10.22)

    未经许可谢绝以任何形式对本文内容进行转载! 一.环境配置 关于MIT课程中使用的JOS的配置教程网上已经有很多了,在这里就不做介绍,个人使用的是Ubuntu 16.04 + qemu.另注,本文章中贴 ...

  6. boot loader能全部用C程序编写吗

    在<什么是boot loader>一文中我抛出了一个问题,这个问题如下: 我们说boot loader通常采用汇编和C语言相结合来编写的,那能不能全部用C语言来进行编写呢?为什么? 对于这 ...

  7. Boot loader: Grub入门(转)

    Boot Loader: Grub 在看完了前面的整个启动流程,以及核心模块的整理之后,你应该会发现到一件事情, 那就是『 boot loader 是加载核心的重要工具』啊!没有 boot loade ...

  8. 0.Boot Loader的概念和功能

    转载:http://blog.chinaunix.net/uid-20543672-id-94371.html 1.嵌入式Linux软件结构与分布 在一般情况下嵌入式Linux系统中的软件主要分为以下 ...

  9. Boot Loader的启动流程和开发经验总结

    Windows CE最大程度继承了桌面版Windows的丰富功能,但是Windows CE并不是一个通用的安装版操作系统.在形形色色的嵌入式设备世界里,一款CE系统通常只会针对某一种硬件平台生成.  ...

  10. 如何通过网络将文件传输到嵌入式设备_嵌入式系统 Boot Loader技术内幕,带你完全了解Boot Loader...

    一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次:1. 引导加载程序.包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分.2. Linu ...

最新文章

  1. 扩展LLVM:添加指令、内部函数、类型等
  2. 【python】向上取整 向下取整
  3. 新手探索NLP(五)
  4. 赛森机器人_对比评测3款最贵的扫地机器人,戴森性能太强了
  5. Button的使用(十四):控制音乐播放
  6. DeepID:Python基于Caffe的DeepID2实现人脸识别的简介、实现之详细攻略
  7. C指针原理(4)-ATT汇编
  8. 大数据分析的5个方面
  9. 数据自治开放的加密技术挑战
  10. 关于CDC在非控件类中的使用
  11. sha2 替换sha1 时间表
  12. Linux设备驱动--块设备(一)之概念和框架(转)
  13. visio画图复制粘贴到word_解决Visio画图复制到word中格式不正确的问题
  14. java软件汉化工具_6款程序员必备的开源中文处理工具
  15. TPU演进十年:Google的十大经验教训
  16. c++ 运算符重载(简单易懂)
  17. Nest.js模块机制的概念和实现原理
  18. putty下载(Putty下载中断)
  19. 关于smtp发信的收件人to cc和bcc
  20. carla学习笔记(三)

热门文章

  1. office2007保存操作当中的一些细节问题
  2. 信息轰炸 摇摆蹦迪 滑动关机 黑帝国代码雨
  3. wpa或者wpa2暴力破解WiFi
  4. 鼠来宝[Alvin and the Chipmunks]
  5. 次坞拉面、羊扒拉、张颂文点了4种“生僻美食”,没人尝过。
  6. FusionCharts Free (FCF) 概述
  7. Django中jwt的使用
  8. core nagios 中文版_Nagios core4.3.4 安装配置
  9. STM32新手入门-什么是寄存器
  10. JavaScript数组扁平化的实现