Bootloader启动流程分析

来源:互联网 发布:网络黑客面具的来源史 编辑:程序博客网 时间:2024/04/30 03:20

Bootloader的启动流程一般分为两个阶段:stage1和stage2,下面分别对这两个阶段进行讲解:

1.stage1

(1)完成基本的硬件初始化。初始化的工作主要包括屏蔽所有的中断、设置CPU的速度和时钟频率、RAM初始化、初始化LED、关闭CPU内部指令和数据cache等。

(2)为加载stage2准备RAM空间。为了更快执行速度,通常把stage2加载到RAM空间中来执行,因此必须为加载Bootloader的stage2准备一段可用的RAM空间范围。

(3)拷贝stage2到RAM中。确定stage2的可执行映像在固态存储设备的存放起始地址和终止地址以及RAM空间的起始地址。

(4)设置堆栈指针sp。这是为执行stage2的C语言代码做好准备。

 

2.stage2

(1)用汇编语言跳转到main入口函数

(2)为了实现更复杂的功能和取得更好的代码可读性和可移植性,stage2的代码通常用C语言来实现。在编译和链接bootloader时,不能使用glibc库中的任何支持函数。

(3)初始化串口、初始化计时器等硬件设备。在初始化这些设备之前、可以输出一些打印信息。

(4)检测系统的内存映射,所谓内存映射就是指在整个4GB物理地址空间中有指出哪些地址范围被分配用来寻址系统的RAM单元。

(5)加载内核映像和根文件系统映像,这里包括规划内存占用的布局和从Flash上拷贝数据。

(6)设置内核的启动参数。

 

U-Boot的目录及存放原则

board

和一些已有开发板有关的文件,比如Makefile和U-Boot.lds等都和具体开发板的硬件和地址分配有关。

 

common

与体系结构无关的文件,实现各种命令的C文件

 

cpu

CPU相关的文件,其中的子目录都是以U-Boot所支持的CPU为名,比如有子目录arm926ejs、mips、mpc8260和nios等,每个特定的子目录都包括cpu.c和interrupt.c,start.S。其中cpu.c初始化CPU、设置指令Cache和数据Cache等;interrupt.c设置系统的各种中断和异常,比如开关中断、时钟中断、软件中断、预取中止和未定义指令等;start.S是U-Boot启动时执行的第一个文件,它主要设置系统堆栈和工作方式,为i进入C程序奠定基础。

 

disk

disk驱动的分区处理代码

 

doc

文档

 

drivers

通用设备驱动程序,比如各种网卡,支持CFI的Flash,串口和USB总线等

 

fs

支持文件系统的文件,U-Boot现在支持cramfs、fat、fdos、jffs2和registerfs

 

include

头文件、对各种硬件平台支持的汇编文件、系统的配置文件和对文件系统支持的文件

 

net

与网络有关的代码,如BOOTP协议,TFTP协议、RARP协议和NFS文件系统的实现

 

lib_arm

与ARM体系结构相关的代码

 

tools

创建S-Record格式文件和U-Boot images的工具

 

原创粉丝点击