*浅解嵌入式中的BootLoader
本文只作为本人学习过程中的记录及时不时的突发奇想偶记。鄙人菜鸟一只,文中如有错误或疏漏,若读者肯不吝赐教,在下感激零涕。文章一直不断更新中
一、何为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的更多相关文章
- 浅解ARC中的 __bridge、__bridge_retained和__bridge_transfer
文章来源:http://www.outflush.com/2015/03/introduction-of-arc-bridge-type-transfer/ 在对 bridge 相关的修饰符解说前.首 ...
- 【嵌入式开发】 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42462795 转载请著名出处 相关资源下载 : -- u-boo ...
- Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理
Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理 转自:https://www.jianshu.com/p/2b71ea919d49 本系列文章首发于我的个人博 ...
- 浅谈Linux中的信号处理机制(二)
首先谢谢 @小尧弟 这位朋友对我昨天夜里写的一篇<浅谈Linux中的信号处理机制(一)>的指正,之前的题目我用的“浅析”一词,给人一种要剖析内核的感觉.本人自知功力不够,尚且不能对着Lin ...
- 浅谈C中的malloc和free
转自http://bbs.bccn.net/thread-82212-1-1.html非常感谢作者 浅谈C中的malloc和free 在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的 ...
- 第九章 C语言在嵌入式中的应用
上章回顾 编码的规范和程序版式 版权管理和申明 头文件结构和作用 程序命名 程序注释和代码布局规范 assert断言函数的应用 与0或NULL值的比较 内存的分配和释放细节,避免内存泄露 常量特性 g ...
- 从最大似然到EM算法浅解
从最大似然到EM算法浅解 zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习十大算法之中的一个:EM算法.能评得上十大之中的一个,让人听起来认为挺NB的. ...
- 详解Java中的clone方法
详解Java中的clone方法 参考:http://blog.csdn.net/zhangjg_blog/article/details/18369201/ 所谓的复制对象,首先要分配一个和源对象同样 ...
- 浅谈CSS3中display属性的Flex布局
浅谈CSS3中display属性的Flex布局 最近在学习微信小程序,在设计首页布局的时候,新认识了一种布局方式display:flex 1 .container { 2 display: fle ...
随机推荐
- scrapy框架整理
0.安装scrapy框架 pip install scrapy 注:找不到的库,或者安装部分库报错,去python第三方库中找,很详细 https://www.lfd.uci.edu/~gohlke/ ...
- SSH免密码登录教程
在一些受信任的环境中配置免密码登录,是比较方便的:而对于ansible等自动化工具配置免密码登录更是必要的. 免密码登录的要点就是,把想让服务器信任的客户机的公钥发送到服务器. 当客户机连接服务器时直 ...
- Mysql怎么判断繁忙 checkpoint机制 innodb的主要参数
Mysql怎么判断繁忙,innodb的主要参数,checkpoint机制,show engine innodb status 2018年07月13日 15:45:36 anzhen0429 阅读数 ...
- java 线程操作
停止线程 创建“停止标记”,thread.interrupt() 准确的说interrupt()方法只是“告知线程该停止了”,而线程检查到该“告知”后,再通过其他的办法停止线程. 线程调用了inter ...
- C语言与C++语言的强制类型转换格式区别
C语言:(类型)(表达式),其中类型的括号()必须带. C++语言:(类型)(表达式),其中类型的括号()跟进表达式选带.
- html/css杂题
1.css选择器:详细(http://www.ruanyifeng.com/blog/2009/03/css_selectors.html) 派生选择器:按标签 类别选择器:按class ID选择器: ...
- python 图像转矩阵,矩阵转图像
1.图像转换为矩阵 matrix = numpy.asarray(image) Help on function asarray in module numpy.core.numeric: asarr ...
- firstPage
自己写的科比的一个简单介绍的网页,画面,布局还是太垃圾了,图片放大缩小标签不知道,简直难受. <!DOCTYPE html><html> <head> <me ...
- 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 ...
- CSS旋转缩放
<style type="text/css"> figure{ float: left;}.test1{ border-radius: 0px; height: 200 ...