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

一、何为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. scrapy框架整理

    0.安装scrapy框架 pip install scrapy 注:找不到的库,或者安装部分库报错,去python第三方库中找,很详细 https://www.lfd.uci.edu/~gohlke/ ...

  2. SSH免密码登录教程

    在一些受信任的环境中配置免密码登录,是比较方便的:而对于ansible等自动化工具配置免密码登录更是必要的. 免密码登录的要点就是,把想让服务器信任的客户机的公钥发送到服务器. 当客户机连接服务器时直 ...

  3. Mysql怎么判断繁忙 checkpoint机制 innodb的主要参数

    Mysql怎么判断繁忙,innodb的主要参数,checkpoint机制,show engine innodb status   2018年07月13日 15:45:36 anzhen0429 阅读数 ...

  4. java 线程操作

    停止线程 创建“停止标记”,thread.interrupt() 准确的说interrupt()方法只是“告知线程该停止了”,而线程检查到该“告知”后,再通过其他的办法停止线程. 线程调用了inter ...

  5. C语言与C++语言的强制类型转换格式区别

    C语言:(类型)(表达式),其中类型的括号()必须带. C++语言:(类型)(表达式),其中类型的括号()跟进表达式选带.

  6. html/css杂题

    1.css选择器:详细(http://www.ruanyifeng.com/blog/2009/03/css_selectors.html) 派生选择器:按标签 类别选择器:按class ID选择器: ...

  7. python 图像转矩阵,矩阵转图像

    1.图像转换为矩阵 matrix = numpy.asarray(image) Help on function asarray in module numpy.core.numeric: asarr ...

  8. firstPage

    自己写的科比的一个简单介绍的网页,画面,布局还是太垃圾了,图片放大缩小标签不知道,简直难受. <!DOCTYPE html><html> <head> <me ...

  9. My IELTS result has come out 我的雅思成绩出来了

    Thanks to god, I finally get a score of 6.5, although my socres of  listening  and writing are only ...

  10. CSS旋转缩放

    <style type="text/css"> figure{ float: left;}.test1{ border-radius: 0px; height: 200 ...