1、在加电复位之后,大多数处理器都会从一个默认的地址处获取代码。比如MIPS结构的CPU会从0xBFC00000处取第一条指令,而ARM结构的CPU则从地址0x00000000处取第一条指令。因此,在嵌入式开发板中,需要把存储器件ROM或Flash等映射到这个默认的地址处,Bootloader就存放在这个地址开始处,这样一上电就可以执行Bootloader。

2、当Bootloader完成基本的处理器和平台初始化之后,它的主要任务是获取并引导一个完整的操作系统。它负责定位、载入以及将控制权移交给主操作系统。当操作系统获得控制权之后,Bootloader就会被覆盖,不复存在了

3、在正确地初始化DRAM控制器和DRAM本身之前,嵌入式系统能做的事情很少。Bootloader首先必须要做的工作之一就是启用内存子系统。当内存初始化完成后,它就成为系统的可用资源。实际上,很多Bootloader在完成内存的初始化之后,所做的第一件事就是将它们自身复制到DRAM中,以加快执行速度。

4、在系统加电后,Bootloader获得控制权时,不存在程序运行的基础设施,Bootloader必须创造它自身的运行环境,并且在必要时将自身移动到RAM的合适位置。

5、当Bootloader获得控制权时,并不存在上下文或执行环境。在Bootloader初始化处理器和相关硬件之前,系统中没有任何DRAM可用。而在典型的C函数中,任何局部变量都保存在内存栈中。也就是说,在Bootloader初始化处理器和相关硬件之前,是不能调用C语言编写的代码的。那么,我们还可以推理出,Bootloader是不可能完全使用C代码编写的,其必须首先使用汇编代码初始化一个合适C代码运行的环境后才能跳转到C代码处执行。

6、在编译和链接生成Bootloader时,开发人员必须控制镜像的构造和链接。尤其是当Bootloader需要将其自身从闪存重新部署到RAM中时,更是如此。开发人员必须传递很多参数给编译器和连接器,用于定义最终可执行镜像的特征和布局。代码的组织结构需要符合处理器的引导要求(最初的可执行指令必须放在闪存中的一个预定位置,这个位置取决于使用的处理器和硬件架构)。那么,开发人员如何指定一个二进制镜像的内部结构呢?可以传递给连接器一个链接描述文件,也称为连接器命令脚本。

7、硬件设计保证了处理器可以从闪存中正确获取指令,并且保证了系统的时钟频率是某个默认值,除此之外,程序几乎不能做任何假定。实际上,大多数处理器在启动时都没有可使用的DRAM来暂时存储变量或是用作栈,然而,C程序的函数调用规范(calling convention)需要一个栈。

转载于:https://www.cnblogs.com/nufangrensheng/p/3659199.html

对Bootloader(引导加载程序)的几点理解相关推荐

  1. BootLoader——嵌入式系统的引导加载程序

    BootLoader--嵌入式系统的引导加载程序 一.BootLoader的简介 1.1 BootLoader在固态存储设备中的位置 1.2 BootLoader的启动过程 1.3 BootLoade ...

  2. cwyw不是有效的加载项_ADAS/AD开发09 - UDS与引导加载程序

    本文属于ADAS控制器开发系列.以智能前视摄像头模块为基础. 前言 引导加载程序,即Bootloader(简称BL),是ECU的基本模块,实现方式也很多. 本文介绍的Bootloader刷写功能的下载 ...

  3. 如何配置Ubuntu 16.04 GRUB 2引导加载程序

    正如你所知,GRUB 2 是大多数 Linux 操作系统的默认引导加载程序.GRUB 是 GRand Unified Bootloader 的缩写,它是 Linux 启动时首先要加载的一个程序,此后它 ...

  4. 搞一下TDA4 | 03 TDA4 辅助引导加载程序SBL

    前言 本系列请点击:<搞一下TDA4> 所有系列请点击:<汽车电子系列分享> 本文档将介绍如何在处理器SDK TDA4(RTOS/Linux) 中理解辅助引导加载程序SBL 全 ...

  5. Z-Wave 700应用程序框架第七章 - 固件更新和引导加载程序

    本节的目的是描述如何生成和管理固件更新映像. ZW700 SDK附带三个引导加载程序映像. 一个是FG14模块的OTW图像. 这个引导加载程序只适用于运行SerialAPI的FG14设备. 另外两个引 ...

  6. 一加3t运行linux,【漏洞分析】获取已锁定的OnePlus 3/3T:引导加载程序漏洞

    翻译:胖胖秦 预估稿费:120RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 前言 在这篇博文中,我公开了OnePlus 3/3T引导加载程序中的两个漏洞.第一个CVE- ...

  7. 引导加载程序之争: LILO 和 GRUB

    在不考虑他们的工作或专业情况下,所有 Linux 用户都会使用的是哪个工具?引导加载程序.通过本文了解引导加载程序的工作原理,认识两个流行的引导加载程序 LILO(LInux LOader)和 GNU ...

  8. 【技术分享】如何解锁高通骁龙660上的安卓引导加载程序

    本文是我们在DEF CON 29大会上的演示视频的配套文章,视频的链接地址为https://www.youtube.com/watch?v=z4gIxdFfJDg. 要想在安卓手机上获得root权限, ...

  9. Linux加载Linux的引导程序,Linux的引导-引导加载程序:LILO和GRUB

    打开计算机时,计算机执行存储在ROM中的引导代码,这些代码接下来尝试确定如何加载并启动内核.内核检测系统的硬件,然后产生系统的init进程,这个进程总是PID 1. 在出现登录提示符以前,要完成几项工 ...

  10. 备份linux分区到usb,将Linux引导加载程序备份到USB的方法

    本文介绍如何将Linux引导加载程序备份到USB以应对紧急情况.大多数Linux操作系统使用的引导加载程序称为Grub,这是一个简单的工具,可以配置为在PC启动时从菜单启动Linux发行版以及其他操作 ...

最新文章

  1. 东芝再曝财务造假丑闻 日企百年老店怎么了?
  2. 实例讲解js中的预编译
  3. 降低http请求次数
  4. 0 win10重装partition_修复Win10系统无法安装系统保留分区方法
  5. 暑期训练狂刷系列——Foj 1894 志愿者选拔 (单调队列)
  6. mac maven安装位置_Maven的安装以及仓库的作用
  7. amd860k能装黑苹果吗_想用黑苹果?这些硬件不要买(内附支持列表)
  8. 甲骨文中国确认裁员 900 余人;网易回应邮箱账号遭公开叫卖;我国网民达 8.29 亿 | 极客头条...
  9. springboot 整合 邮件发送
  10. 【大二下复习】新视野大学英语(第三版)第四册读写教程答案 + 期末复习翻译的部分题目
  11. Excel中使用名称定义常数
  12. 《PHASEN:A Phase and Harmonics-Aware Speech Enhancement Network》Pytorch代码学习
  13. [转载]坐标系统与投影变换
  14. MBA-day13 逻辑学 模态推理(可能与必然的推理)
  15. kss admin index.php,XCTF Final 2018 Web Writeup (Bestphp与PUBG详解)
  16. 《移动游戏开发精要》读书笔记
  17. 软件工程之面向对象的设计原则
  18. Google Calendar 跨平台同步方案(随时同步手机与电脑的日程安排)
  19. 不可思议!乌克兰国防军队的系统账号和密码分别是 admin 和 123456!
  20. 成像系统类毕业论文文献有哪些?

热门文章

  1. [Qt教程] 第35篇 网络(五)获取本机网络信息
  2. opencv求两张图像光流_光流(optical flow)和openCV中实现
  3. opencv图像清晰度计算_Python中的十大图像处理工具
  4. 微信小程序 下拉刷新页面时的加载状态
  5. 每天一道LeetCode-----生成由[1 : n]这n个数组成的所有二叉搜索树
  6. arm汇编解析—tengine winograd_nhwc卷积实现
  7. K近邻法(KNN)原理小结
  8. HDU Problem - 3763 CD(二分)
  9. linux终端vim底行模式点冒号,Vim基本使用方法
  10. matlab 系统辨识工具箱,MATLAB系统辨识工具箱的应用.ppt