BootLoader 详解(1)
1. Boot Loader的概念
BootLoader就是在操作系统内核运行前之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件带到一个合适的状态,以便为最终
调用操作系统内核准备好正确的环境。
1.BootLoader 的安装媒介
系统加电或者复位后,所有的CPU通常都从某个由CPU制造商预先安排的地址取指令。比如,基于ARM7TDMI core 的CPU在复位时通常从地址0x00000000取它的第一条指令。而基于CPU构建的嵌入式系统通常都在某种类型的固态设备(比如ROM、EEPROM、FLASH)被映射到这个预先安排的地址上。因此在系统加电后,CPU将首先执行BootLoader程序。
下图就是一个同时装有BootLoader、内核启动参数、内核映像和根文件系统映像的固态设备的典型空间分配结构图

2.用来控制BootLoader的设备和机制
主机和目标机之间一般通过串口来建立连接,BootLoader执行时通过串口进行I/O,比如:输出打印信息、从串口读取控制字符
3.BootLoader的启动过程是单阶段还是多阶段
通常多阶段的BootLoader能提供更复杂的功能和更好的移植性能。从固态设备上启动的BootLoader大多数是2阶段的。
4.BootLoader的操作模式
包含2中操作模式:启动加载模式和下载模式
启动加载模式(boot loading):BootLoader从目标机上的某个固态设备上将操作系统加载到RAM中运行
下载模式(downloading):目标机上的BootLoader将通过串口连接或者网络连接等通信手段从主机上下载文件,比如:下载内核映像和根文件系统映像。从主机下 载的文件通常先被BootLoader保存到RAM中再写到固态设备中。
5.BootLoader与主机之间进行文件传输所用的通信设备以及协议
最通常的情况是,目标机上的BootLoader通过串口和主机进行文件传输,传输协议通常是 xmodem/ymodem/zmodem中的一种。
通过以太网体积TFTP协议来下载,主机方必须也需要软件来提供TFTP服务。
2.BootLoader主要任务和典型框架
从操作系统的角度看,BootLoader的目的就是正确调用内核来执行。另外,由于BootLoader的实现依赖于CPU的体系结构,因此大多数BootLoader都分为 stage1和stage2两部分。依赖于CPU的体系结构的代码,比如设备初始化代码等,通常都放在stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而stage2通常用C语言来实现,这样可以实现复杂的功能,而且代码具有更好的可读性和可移植性。
1.BootLoader的stage1通常包括以下执行步骤
.硬件初始化
。为BootLoader的stage2准备RAM空间
。拷贝BootLoader的stage2到RAM空间中
。设置好堆栈
。跳转到stage2的C入口点
2.BootLoader的stage2通常包括以下执行步骤
。初始化本阶段需要使用到的设备硬件
。检测系统内存映射(memory map)
。将kernel 映像和根文件系统映像从flash上读到RAM
。为内核设置启动参数
。调用内核
结:关于Bootloader的stage1和stage2,下回合详讲

BootLoader 详解(1)的更多相关文章
- 【嵌入式开发】 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42462795 转载请著名出处 相关资源下载 : -- u-boo ...
- BootLoader 详解(3)
BootLoader的stage2 stage2的代码是C语言来实现的,以便于实现更复杂的功能和取得更好的代码可读性和移植性.它与普通C语言程序不同的是,在编译和链接BootLoader这样的程序时, ...
- BootLoader 详解(2)
BootLoader的stage1 1.基本的硬件初始化 这是BootLoader一开始就执行的操作,其目的是为stage2的执行以及随后的kernel的执行准备好一些基本的硬件环境.它通 常包括以下 ...
- CFE Bootloader详解 — 引导过程
CFE命令 CFE引导过程 系统加电后,CFE从boot.S (src/shared/boot.S)开始执行,完成判断芯片类型.设置时钟.初始化缓存.把自身加载进RAM等任务后,跳转到c_main() ...
- 【转载】 硬盘主引导记录(MBR)及其结构详解
硬盘的0柱面.0磁头.1扇区称为主引导扇区,FDISK程序写到该扇区的内容称为主引导记录(MBR).该记录占用512个字节,它用于硬盘启动时将系统控制权交给用户指定的,并在分区表中登记了的某个操作系统 ...
- uboot mkimage使用详解
mkimage使用详解uboot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件. mkimage在制作映象文件的时候,是在原来的可执行映象文件的 ...
- 引用 mkimage使用详解
引用 鱼 的 mkimage使用详解 uboot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件. mkimage在制作映象文件的时候,是在原来 ...
- Android的init过程详解(一)
Android的init过程详解(一) Android的init过程(二):初始化语言(init.rc)解析 本文使用的软件版本 Android:4.2.2 Linux内核:3.1.10 本文及后续几 ...
- 黑苹果引导工具 Clover 配置详解及Clover Configurator使用
黑苹果引导工具 Clover 配置详解及Clover Configurator使用 2017-03-11 14:01:40 by SemiconductorKING 转自:@三个表哥 简介: 可 ...
随机推荐
- 类似于C# using() java 语法
From : https://www.infoq.com/news/2010/08/arm-blocks try(Jedis jedis = jedisPool.getResource()){ S ...
- [轉]Android Libraries 介紹 - Butter knife
原文地址 Butter Knife 簡介 Butter Knife - Field and method binding for Android views.助你簡化程式碼,方便閱讀. 使用方法 開發 ...
- 泛型、Linq 查询使用
查询类对象数组中符合条件的一个实例对象 泛型自带查询方法: EntityErpFldMx ms = aryFldMx.Where(i => i.Jhd == "4900120121&q ...
- WebApi:自定义筛选器
最近在项目中有这样一个需求,记录每次Api访问的调用时间,运行时间,传入数据,返回数据等信息. 第一反应就是添加一个类,用来实现相应的功能,然后在方法的代码中添加,但是这样的话,需要修改所有的方法的代 ...
- 【uTenux实验】邮箱
邮箱是一个通过在系统(共享)内存空间传递消息来实现同步和通信的对象.uTenux中每个邮箱都包含一个用来发送消息的消息队列和一个用于等待接收消息的任务队列,其使用邮箱功能的消息内容放置在发送方和接收方 ...
- 黄聪:WordPress: 使用 wp_insert_attachment 上传附件
我们来研究一下如何在主题或者插件的开发中上传附件: 主要参考这个函数:https://codex.wordpress.org/Function_Reference/wp_insert_attachme ...
- (C#) 求两个数组的交集
基本上在面试的时候,会具体到两个int数组,或string数组.具体也就是讨论算法. 首先需要的是和面试的人确认题目的含义,并非直接答题. 然后,可以提出自己的想法,首先最快的是用linq { Lis ...
- Android广播机制简介
为什么说Android中的广播机制更加灵活呢?这是因为Android中的每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会接收到自己所关心的广播内容,这些广播可能是来自于系统的,也可能是来 ...
- [VB.NET]取消按钮按下的默认事件响应
大家应该有过这样的经历:有两个文本框a,b.通过编程,当我们在A中回车后,光标会移动到B文本框. 但是,不可避免的会听到一声“铛”的声音. 解决办法: 在Keydown或者KeyUp事件中,设置e.S ...
- 洛谷P3371 【模板】单源最短路径
P3371 [模板]单源最短路径 282通过 1.1K提交 题目提供者HansBug 标签 难度普及/提高- 提交 讨论 题解 最新讨论 不萌也是新,老司机求带 求看,spfa跑模板40分 为什么 ...