基于ARM9上linux系统的bootloader设计 下载本文

基于 ARM9 上 linux 系统的 bootloader 设计

1.引言

在嵌入式开发中其中不可避免的一环就是 bootloader 的设计[1],它统筹软硬 件资源,使得资源最优配置,嵌入式系统对功耗,性能,以及成本要求很苛刻, 它要求在达到用户要求的前提下把成本和资源利用降为最低,Booloader 不是驱 动开发的一部分,但一个好的 booloader 可以决定该产品在市场上的成败[2]。 采用 Samsung 公司的 ARM920T[3]处理器与 Linux2.4.18 嵌入式操作系统,根 据处理速度和效率的不同采用分阶段实现的方法,在具体实现时不拘泥于该处 理器和操作系统版本,使之更有普遍性和通用性。 2.bootloader 概述

引导加载程序 bootloader 是系统加电后运行的第一段代码[4],功能类似 pc 机 的 BIOS,在 ARM 中一般都是位于地址 0x00000000,这段代码可以实现初始化 硬件设备,建立内存空间映射图,从而将系统的软硬件带到一个合适的状态, 以便最终为调用操作系统内核和用户应用程序准备好正确的环境。

Bootloader 的启动可以单阶段也可以多阶段,为了方便移植和增加系统的执 行效率一般分为两个阶段 stage1 用汇编编写和 stage2 用 C 语言编写,stage1 主 要进行与 CPU 与存储设备相关的工作进行必要的初始化工作,是一些依赖于 体系结构的代码,例如初始化 CPU 运行的时钟频率,初始化 Flash 和内存的数 据宽度、读/写访问周期和刷新周期,初始化中断系统,初始化系统中各种片内 片外设备和 I/O 口,初始化系统各种运行模式下的寄存器和堆栈。stage2 是用 C 语言实现一般的流程以及对板级驱动的支持,包括初始化要用到用到的内核 映像和文件系统映像,并将 PC 指针指向操作系统内核的入口处,为操作系统的 运行作好准备。这样设计代码具有很好的移植性和可读性,对于相同的 CPU