分类: LINUX
2011-07-10 22:02:07
一、BootLoader的概念
BootLoader是 系统加电启运行的第一段软件代码.回忆一下PC的体系结构我们可以知道,PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中 的引导程序一起组成。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的引导程序读到系统的RAM中,然后将控制权交给引导程序。引导程序的主要运行 任务就是将内核映象从硬盘上读到RAM中 然后跳转到内核的入口点去运行,也即开始启动操作系统。
而 在嵌入式系统中,通常并没有像BIOS那样的固件程序(有的嵌入式系统也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由 BootLoader来完成.比如在一个基于 ARM7TDMI core的嵌入式系统中,系统在上电或复位时都从地址 0x00000000开始执行.而在这个地址处安排的通常就是系统的BootLoader程序。
简 单地说BootLoader就是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射 图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。对于一个嵌入式系统来说,可能有的包括操作 系统,有的小型系统也可以只包括应用程序,但是在这之前都需要BootLoader为它准备一个正确的环境。通常,BootLoader是依赖于硬件而实 现的,特别是在嵌入式领域,为嵌入式系统建立一个通用的BootLoader是很困难的。
二、Boot Loader的操作模式
大多数BootLoader都包含两种不同的操作模式。“启动加载”模式和“下载”模式,这种区别仅对于开发人员才有意义。但从最终用户的角度看,BootLoader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。
启 动加载(Boot loading)模式:这种模式也称为“自主”(Autonomous)模式,也即BootLoader从目标机上的某个固态存储设备上将操作系统加载到 RAM中运行,整个过程并没有用户的介入。这种模式是BootLoader的正常工作模式。因此在嵌入式产品发布的时候,BootLoader显然必须工 作在这种模式下.
下 载(Down loading)模式:在这种模式下 目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机下载文件,比如:下载应用程序、数据文件、内核映像等.从主机下载的文件通常首 先被BootLoader保存到目标机的RAM中然后再被BootLoader写到目标机上的固态存储设备中。BootLoader的这种模式通常在系统 更新时使用。工作于这种模式下的BootLoader通常都会向它的终端用户提供一个简单的命令行接口。
三、BootLoader的工作
总体上Bootloader需要完成以下工作。
n 初始化CPU速度;
n 初始化内存,包括启用内存库,初始化内存配置寄存器等;
n 初始化中断控制器,在系统启动时,关闭中断,关闭看门狗;
n 初始化串行端口(如果在目标上有的话);
n 启用指令/数据高速缓存;
n 设置堆栈指针;
n 设置参数区域并构造参数结构和标记(这是重要的一步,因为内核在标识根设备、页面大小、内存大小以及更多内容时要使用引导参数);
n 执行POST(加电自检)来标识存在的设备并报告有何问题;
n 为电源管理提供挂起/恢复支持;
n 传输操作系统内核镜像文件到目标机。也可以将操作系统内核镜像文件事先存放在Flash中,这样就不需要BootLoader和主机传输操作系统内核镜像文件,这通常是在做成产品的情况下使用。而一般在开发过程中,为了调试内核的方便,不将操作系统内核镜像文件固化在Flash中,这就需要主机和目标机进行文件传输;
n 跳转到内核的开始,在此又分为ROM启动和RAM启动。所谓ROM启动就是用XIP技术直接在Flash中执行操作系统镜像文件;所谓RAM启动就是指把内核镜像从Flash复制到RAM中,然后再将PC指针跳转到RAM中的操作系统启动地址。
四、VIVI的剪裁
Bootloader有很多种,如vivi,uboot,redboot,lilo等等。vivi 是韩国mizi公司专门为三星s3c2410芯片设计的Bootloader。下面我们以它为例讲述一下Bootloader的裁剪和烧写.
首先是上网下载vivi,我的版本是v0.1.4。http://blogimg.chinaunix.net/blog/upfile/071017080947.rar
第一步:解压后进入vivi目录,在终端下输入make distclean命令,清除已生成的目标文件的影像文件;
第二步:输入make menuconfig命令,启动vivi配置GUI程序,如下图:
第三步:根据自己需要修改选项,*号表示选中,如图中使vivi支持UART1(串口2).修改后关闭配置页面.
第四步:输入make命令,在当前目录下会生成vivi映像文件;
生成的映像文件我们先保存着,以后会用到.