Bootloader介绍和启动
一、Bootloader的介绍
1.什么是Bootloader
Bootloader是硬件启动的引导程序,是运行操作系统的前提。在操作系统内核或用户应用程序运行之前运行的一段小代码。对硬件进行相应的初始化和设定,最终为操作系统准备好环境。
2.Bootloader的特点
Bootloader不属于操作系统,一般采用汇编语言和C语言开发。需要针对特定的硬件平台编写。在移植过程时,首先为开发板移植Bootloader。Bootloader不但依赖于CPU的体系架构,而且依赖于嵌入式系统板级设备的配置。
3.Bootloader的操作模式
自启动模式:在这种模式下,Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。
交互模式:在这种模式下,目标机上的Bootloader将通过串口或网络等通信手段从开发板上下载内核映射和根文件系统映像等待RAM中。可以被Bootloader写到目标机上的固态存储媒介质中,或者直接进入系统的引导。也可以通过串口接收用户的指令。
二、Bootloader的基本功能
初始化相关硬件 把Bootloader自搬移到内存中 执行用户指令 加载并执行内核
三、Bootloader的启动
Bootloader的启动一般分为两个阶段
下图是拿s5pc100 cortex a8的板子芯片图形做介绍
拿已经固化到nand flash中的Bootloader为例
第一步:当CPU启动后运行地址为0x00000000就是IROM的第一块代码处BL0,而Bootloader存放在nand flash中,其中开头的一块代码BL1(大小为16K)存放到IRAM(SRAM)中。而在BL0的代码会自动跳转到BL1处,执行BL1出的代码,进行一些相关硬件的初始化。BL1处还有一个拷贝指令,就是将nand flash中的Boot-
loader代码拷贝到DRAM中。当BL1中代码运行完之后将会自动跳转到DRAM中。
BL1代码中作用:
初始化基本硬件
把Bootloader搬到内存中
初始化异常 模式
设置堆栈指针并将bss段清零,为后续的C代码做准备
跳到第二段代码
第二步:执行BL1跳转到的代码BL2
BL2的作用:
初始化本阶段要使用的硬件
将坏境变量添加到内核中
读取环境变量
下载执行
转载自 http://blog.csdn.net/cxj582667366/article/details/42194273