*浅解嵌入式中的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 ...
随机推荐
- vscode之快速生成vue模板
文件-首选项-用户代码片段-搜索“vue”点击进入vue.json 复制这个片段 { "Vue component": { "prefix": "vu ...
- js验证银行卡号 luhn校验规则
<script type="text/javascript"> //luhn校验规则:16位银行卡号(19位通用): // 1.将未带校验位的 15(或18)位卡号从右 ...
- [sgu P155] Cartesian Tree
155. Cartesian Tree time limit per test: 0.25 sec. memory limit per test: 65536 KB input: standard i ...
- window.localStorag使用
H5本地缓存: 删除: window.localStorage.removeItem("parentNode") 写入: window.localStorage.setItem(& ...
- babel,webpack-dev-server配置
github仓库:https://github.com/llcMite/webpack.git 1.什么是webpack? webpack可以看做是模块打包机:它做的事情是,将静态资源当成模块打包成一 ...
- nginx原理及使用
Nginx的特点: 方便 简单 灵活 比较具有发展潜力的服务软件 在性能上占用的系统资源更少 能支持更多的并发连接 , 特别是静态小文件场景下, 达到更的访问效率.Nginx是什么? Nginx是一个 ...
- Android开发 ---基本UI组件4:拖动事件、评分进度条、圆圈式进度条、进度条控制
Android开发 ---基本UI组件4 1.activity_main.xml 描述: 定义了一个按钮 <?xml version="1.0" encoding=" ...
- 带通滤波 matlab
巴特沃斯:1.带阻滤波器设计带阻滤波器指标:阻带上边界频率:5Kz:阻带下边界频率:7Kz:通带上边界频率:2Kz:通带下边界频率:9Kz:通带最大衰减:1dB:阻带最小衰减:20dB:设计程序如下: ...
- lvs三种模式的优缺点对比
电面只回答上来少部分,所以......恶补.总结
- ubuntu下安装php7
apt-cache pkgnames | grep php7.0 sudo apt-get install -y php7.0 libapache2-mod-php7.0 php7.0-cli php ...