本文只作为本人学习过程中的记录及时不时的突发奇想偶记。鄙人菜鸟一只,文中如有错误或疏漏,若读者肯不吝赐教,在下感激零涕。文章一直不断更新中

一、何为Bootloader

  在嵌入式系统中,Bootloader是操作系统内核启动之前运行的一段程序。可以用来初始化软硬件设备,从而将系统的软件硬件带到一个合适的环境。BootLoader是设备上电后,

执行的第一行代码。

  以上为BootLoader的简短作用。从上得知,BootLoader(类似于PC机上的BIOS)是独立于OS(在无OS的设备上,一个跑在单片机上的main程序也有Bootloader)

的一小段程序。在嵌入式操作系统中,BootLoader程序可以有两部分组成。一部分由汇编语言组成,典型的例子如STM32单片机的启动文件(stmf10x__startup.s)。这部分程序的作

用有以下几个方面:设置寄存器指针,分配堆栈空间进行初始化,建立中断向量表,(进行空间内存映射),实现到C语言空间函数的跳转。汇编程序功能较少,实现对底层硬件的初始化操作。

  BootLoader的另一部分是由C语言组成,该部分的功能较丰富。(类比IAP程序)初始化将要用到的硬件,比如PC机屏幕的驱动、键盘驱动等。 程序将存放在flash上的程序加载到SRAM上。在有OS的设备上,该部分程序会设置内核启动参数,最终调用内核启动整个系统。

二、嵌入式上的双系统

  
  双系统简单理解就是两段放在存储介质上(flash)的程序,每段程序包含一个操作系统及与系统关联的应用软件。在BootLoader第二部分C语言中,有一部分的作用是将程序加载到SRAM上。根据程序所在的内存地址不同,在加载时选择不同的地址即可。例如,在STM32的BootLoader中,

              Bootloader -- 0x08000000  

      程序A   ------ 0x08010000

        程序B   -------0x08020000

  因为AB程序已经经过特殊处理,直接读取对应首地址上的内容,程序便可自动运行,所以在BootLoader中选择不同的地址来读取即可。当然,OS的操作‘

肯定需要做更多的处理,但想必启动原理都差不多。

 因为嵌入式设备硬件的差异性,CM3 /CM4内核架构外设不同,所以如果做BootLoader的移植,需要修改汇编文件和C文件。   

  

*浅解嵌入式中的BootLoader的更多相关文章

  1. 浅解ARC中的 __bridge、__bridge_retained和__bridge_transfer

    文章来源:http://www.outflush.com/2015/03/introduction-of-arc-bridge-type-transfer/ 在对 bridge 相关的修饰符解说前.首 ...

  2. 【嵌入式开发】 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42462795 转载请著名出处 相关资源下载 :  -- u-boo ...

  3. Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理

    Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理 转自:https://www.jianshu.com/p/2b71ea919d49 本系列文章首发于我的个人博 ...

  4. 浅谈Linux中的信号处理机制(二)

    首先谢谢 @小尧弟 这位朋友对我昨天夜里写的一篇<浅谈Linux中的信号处理机制(一)>的指正,之前的题目我用的“浅析”一词,给人一种要剖析内核的感觉.本人自知功力不够,尚且不能对着Lin ...

  5. 浅谈C中的malloc和free

    转自http://bbs.bccn.net/thread-82212-1-1.html非常感谢作者 浅谈C中的malloc和free 在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的 ...

  6. 第九章 C语言在嵌入式中的应用

    上章回顾 编码的规范和程序版式 版权管理和申明 头文件结构和作用 程序命名 程序注释和代码布局规范 assert断言函数的应用 与0或NULL值的比较 内存的分配和释放细节,避免内存泄露 常量特性 g ...

  7. 从最大似然到EM算法浅解

    从最大似然到EM算法浅解 zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习十大算法之中的一个:EM算法.能评得上十大之中的一个,让人听起来认为挺NB的. ...

  8. 详解Java中的clone方法

    详解Java中的clone方法 参考:http://blog.csdn.net/zhangjg_blog/article/details/18369201/ 所谓的复制对象,首先要分配一个和源对象同样 ...

  9. 浅谈CSS3中display属性的Flex布局

    浅谈CSS3中display属性的Flex布局   最近在学习微信小程序,在设计首页布局的时候,新认识了一种布局方式display:flex 1 .container { 2 display: fle ...

随机推荐

  1. BFS GPLT L2-016 愿天下有情人都是失散多年的兄妹

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805061769609216 分析:一开始以为是并查集..... ...

  2. 『Python』VS2015编译源码注意事项

    一.2.5.6版本源码编译 解压 Python-2.5.6.tgz 进入 Pcbuild8 文件夹,使用 vs 2013 打开 pybuild.sln (vs 解决方案),进入 vs2015IDE 环 ...

  3. Android测试(三)——APK文件反编译

    APK文件反编译: 在进行反编译操作前,先简单介绍下smali文件: smali是一种文件格式,语法和Jasmine的语言类似,这些smali文件包含开发应用程序时编写的java类的代码. 工具:ja ...

  4. 【C/C++】Rotate Array

    实现数组旋转(循环右移) 如数组 [1, 2, 3, 4, 5, 6, 7],右移 3 位则为 [5, 6, 7, 1, 2, 3, 4] 首先使用泛型函数 void Rotate(void *fro ...

  5. python3练习-查找文件

    题: 编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径 import os import os.path def find_file(root,pa ...

  6. 使用js实现思维导图

    使用js实现思维导图 demo:http://rockyren.github.io/mindmaptree/ 源码:http://github.com/RockyRen/mindmaptree/tre ...

  7. 禁用cookie后的方法

    保存session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给 服务器.一般这个cookie的名字都是类似于SEEESIONID.但cookie可以被人为 ...

  8. IE浏览器使用VLC实时显示视频(海康、大华)

    VLC2.X 下载地址: https://download.csdn.net/download/zhutouaizhuwxd/10692873 CSDN必须要加分,你们用分下载吧 使用方法: 只需要添 ...

  9. Scrapy爬虫框架中的两个流程

    下面对比了Scrapy爬虫框架中的两个流程—— ① Scrapy框架的基本运作流程:② Spider或其子类的几个方法的执行流程. 这两个流程是互相联系的,可对比学习. 1 ● Scrapy框架的基本 ...

  10. NPOI 操作excel之 将图片插入到指定位置;

    //新建类 重写Npoi流方法 public class NpoiMemoryStream : MemoryStream { public NpoiMemoryStream() { AllowClos ...