Linux之bootloader
最近完成了项目bootloader的uboot移植,感慨还有些的,在此写下一些记录,对这几个星期所学来个记录之。
Bootloader介绍
简单地说,Bootloader就是在操作系统内核运行之前运行的的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间映射关系,从而将系统的软硬件环境带到一个合适的状态,为最终加载系统内核做好准备。在嵌入式系统中,通常并没有像BIOS那样的固件程序,因此整个系统的加载启动任务就完全由Bootloader来完成。通常bootloader比较依赖于硬件平台,特别市嵌入式系统中,因此,在嵌入式世界建立一个通用的Bootloader是一件比较困难的事情。
Bootloader的存储位置
系统加电或复位后,所有的cpu通常都从某个由cpu制造商预先安排的地址上取指令,而基于cpu构建的嵌入式系统通常都有某种类型的固态存储设备被映射到这个预先安排的地址上,以确保开机cpu首先执行bootloader程序。
Bootloader的操作模式
(1)启动加载模式
在这种模式下,bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程是自动,这种模式用于产品发布。
(2)下载模式
在这种模式下,目标机上的bootloader将通过串口连接和网络连接等通信手段从主机下载内核镜像文件和文件系统镜像(如TFTP协议)到RAM中运行,避免了对flash和nandflash的烧写,使开发更加方便,用于测试。
Bootloader启动流程
Bootloader的stage1
一:屏蔽所有的中断。
二:设置CPU的速度和时钟频率。(内部寄存器)
三:RAM初始化。
四:初始化LED(表明系统的状态)。
五:关闭CPU内部指令和数据cache.
六:为加载stage2准备RAM空间。
七:复制stage2到RAM。
八:设置堆栈指针SP。
九:跳转到stage2的C入口点。
Bootloader的stage2
一:初始化本阶段要用到的硬件设备。(如串口,计时器等)。
二:检测系统内存映射。(检测固态存储器连接的总线地址)
三:将kernel映像和根文件系统映像从Flash上读到RAM空间。
四:为内核设置启动参数。
五:调用内核。
原文地址http://blog.youkuaiyun.com/zc081604/article/details/6845594