BootLoader的启动过程分析
2013-09-18 09:42
302 查看
在嵌入式系统中,内核映像与根文件系统映像可以直接在ROM或Flash等固态存储设备中直接运行,但该做法是以牺牲运行速度为代价的。本系统中内核映像与根文件系统映像都被加载到RAM中运行。
大多数BootLoader的启动分为stagel和stageZ两个阶段,依赖于CPU体系结构的代码(如设备初始化代码等),通常都放在stagel中,且常用汇编语言实现,以达到短小精悍的目的。而stageZ则用C语言实现更复杂的功能,且代码有更好的可读性和可移植性。
stagel完成的任务:
①初始化硬件设备、屏蔽所有的中断;
②设置CPU的速度和时钟频率;
③初始化RAM;
④初始化LED(Light一EmittingDiode,发光二极管),通过GpIO驱动LED,表明系统状态是OK或Error。若开发板未配备LED,则通过初始化UART向串口打印BootLoader的Logo字符信息来表明系统的状态;
⑤关闭CPU内部指令/数据cache;
⑥为加载BootLoaderstageZ准备RAM空间;
⑦拷贝BootLoaderstageZ到RAM空间;
⑧设置好堆栈指针,为执行C语言代码作准备;
⑨跳转到stageZ的c程序入口点。
StageZ完成的任务:
①初始化本阶段要使用的硬件设备,包括:至少初始化一个串口,以便向终端用户输出FO信息,初始化计时器等;
②检测系统内存映射;
③将内核映像和根文件系统映像从Flash中读到RAM空l司中;
④规划内存占用的布局,包括内核映像、根文件系统占用的内存范围,需要考虑基地址和映像的大小两方面。对于内核映像,一般将其拷贝到从(MEM_START+0x8000)基地址开始的大约1MB大小的内存范围内(因为嵌入式Linux内核一般不超过1MB)。在MEM_START到MEM_START+0x8000这段32KB的内存里,存放的是Linux内核的全局数据结构,如:启动参数、内核页表等。对于根文件系统映像,一般将其拷贝到(MEM_START+0x0010,0000)开始的地方。如果用Ramdisk作为根文件系统映像,则其解压后一般是1MB。从Flash上读取数据与从RAM单元中读取数据并没有什么不同,用一个简单的循环即可完成从Flash设备上拷贝映像;
⑤设置内核启动参数;
⑥调用内核。Boot Loader调用内核的方法是直接跳转到内核的第一条指令处,即直接跳转到MEM_START+0x8000地址处。
大多数BootLoader的启动分为stagel和stageZ两个阶段,依赖于CPU体系结构的代码(如设备初始化代码等),通常都放在stagel中,且常用汇编语言实现,以达到短小精悍的目的。而stageZ则用C语言实现更复杂的功能,且代码有更好的可读性和可移植性。
stagel完成的任务:
①初始化硬件设备、屏蔽所有的中断;
②设置CPU的速度和时钟频率;
③初始化RAM;
④初始化LED(Light一EmittingDiode,发光二极管),通过GpIO驱动LED,表明系统状态是OK或Error。若开发板未配备LED,则通过初始化UART向串口打印BootLoader的Logo字符信息来表明系统的状态;
⑤关闭CPU内部指令/数据cache;
⑥为加载BootLoaderstageZ准备RAM空间;
⑦拷贝BootLoaderstageZ到RAM空间;
⑧设置好堆栈指针,为执行C语言代码作准备;
⑨跳转到stageZ的c程序入口点。
StageZ完成的任务:
①初始化本阶段要使用的硬件设备,包括:至少初始化一个串口,以便向终端用户输出FO信息,初始化计时器等;
②检测系统内存映射;
③将内核映像和根文件系统映像从Flash中读到RAM空l司中;
④规划内存占用的布局,包括内核映像、根文件系统占用的内存范围,需要考虑基地址和映像的大小两方面。对于内核映像,一般将其拷贝到从(MEM_START+0x8000)基地址开始的大约1MB大小的内存范围内(因为嵌入式Linux内核一般不超过1MB)。在MEM_START到MEM_START+0x8000这段32KB的内存里,存放的是Linux内核的全局数据结构,如:启动参数、内核页表等。对于根文件系统映像,一般将其拷贝到(MEM_START+0x0010,0000)开始的地方。如果用Ramdisk作为根文件系统映像,则其解压后一般是1MB。从Flash上读取数据与从RAM单元中读取数据并没有什么不同,用一个简单的循环即可完成从Flash设备上拷贝映像;
⑤设置内核启动参数;
⑥调用内核。Boot Loader调用内核的方法是直接跳转到内核的第一条指令处,即直接跳转到MEM_START+0x8000地址处。
相关文章推荐
- BootLoader启动过程分析
- 【bootloader】bootloader启动过程分析
- Bootloader初始化启动过程分析【转】
- [转载] linux启动流程分析(1)---bootloader启动内核过程
- BootLoader启动过程分析
- 【Bootloader】bootloader启动过程分析
- BootLoader启动过程分析
- 嵌入式Linux启动过程分析3-bootloader
- BootLoader启动过程分析
- 【嵌入式】bootloader启动过程分析
- Linux中关于 -- Bootloader , Uboot的作用,和整个linux系统的启动过程分析
- 【嵌入式】bootloader启动过程分析
- 系统上电后 bootloader的执行流程及 ARM Linux的启动过程分析
- android启动过程分析--启动systemServer
- TQ2440 学习笔记—— 31、移植U-Boot【U-Boot 的启动过程第二阶段源码分析】
- Bootloader启动过程
- Android系统默认Home应用程序(Launcher)的启动过程源码分析
- 跟踪分析Linux内核的启动过程
- 跟踪分析Linux内核的启动过程
- Netty 4.0源码分析1:服务端启动过程中的Channel与EventLoopGroup的注册