您的位置:首页 > 运维架构 > Linux

嵌入式linux烧写(一)—BootLoader的裁剪和编译

2015-02-04 09:48 253 查看
一、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的剪裁
http://blog.chinaunix.net/uid-9532036-id-2403549.html
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映像文件;

生成的映像文件我们先保存着,以后会用到.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: