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

一、何为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. 『PyTorch』第十五弹_torch.nn.Module的属性设置&查询

    一.背景知识 python中两个属相相关方法 result = obj.name 会调用builtin函数getattr(obj,'name')查找对应属性,如果没有name属性则调用obj.__ge ...

  2. js中的object

    JavaScript is an object-based language based on prototypes, rather than being class-based. this引用对象 ...

  3. 关于window 图片系统功能

    直接选择文件悬浮  分辨率 大小 修改时间 文件选择较少的 可以选择反选  找到自己想要的 大小排序 找到最大的压缩  名称排序 同一类的图片  按时间排序找自己刚修改的图片 文档类预览

  4. js 数组的pop(),push(),shift(),unshift()方法小结

    关于数组的一些操作方法小结: pop(),push(),shift(),unshift()四个方法都可改变数组的内容以及长度: 1.pop() :删除数组的最后一个元素,并返回被删除的这个元素的值: ...

  5. js parseInt()与Number()区别

    说到转换成数字类型,我首先想到的是parseInt()方法,后来接触多了才发现还有一个Number()方法,同样是转换成数字类型,这两种方法有什么不同的呢? 1.parseInt():      pa ...

  6. 小程序都报wxss编译错误

    解决方法: 在控制台输入openVendor() ,清除里面的wcc.exe  wcsc.exe  然后重启工具

  7. java虚拟机之虚拟机类加载机制

    此处主要需要知道什么是java虚拟机?java虚拟机如何进行类加载的? java语言本身是编译型和解释型的语言,先对本地的java文件进行编译,编译后会在本地生成一个class文件,而这个生成的cla ...

  8. BFC清除浮动

    BFC 就是清除浮动 用来处理文档脱离文档流的问题 清除浮动的方法: a.父元素也添加一个浮动 产生弊端就是:margin 不能使用 b.给父元素添加一个:display:inline-block 弊 ...

  9. Sql语句内功心法

    CREATE SCHEMA <模式名> AUTHORIZATION <用户名> 定义模式实际上定义了一个命名空间,在这个空间可以进一步定义该模式包含的数据库对象,例如基本表,视 ...

  10. wpf 控件简单介绍