基于ARM的通用bootloader的设计
【摘要】
在嵌入式系统当中,系统架构一般可分为三部分:引导加载程序、内核、应用程序。引导加载程序工作在系统的最底层,服务于内核启动,以及应用系统开发。因此,设计实现一个可靠的引导加载程序具有非常重要的意义。本文主要把目光集中在通用的引导加载程序的设计思想和实现技术。另外,基于对引导加载程序工作原理和系统启动流程的深入理解,笔者开发了一种不同于传统的,高效的,依赖引导加载软件的硬件测试技术。
关 键 字 Linux ARM 引导加载程序 U-Boot
1 引言
随着信息化进程的推进,嵌入式系统以软硬件的可剪裁性、体积的小型性、技术的集成性等特点广泛应用在信息终端、工业控制和信息家电等领域。采用ARM技术IP核的各种微处理器遍及各类产品市场。ARM技术以其较高的性能和功效,使其在嵌入式系统中得到广泛应用,世界上几乎所有的主要半导体厂商都生产基于ARM体系结构的通用芯片, 可以说,ARM技术无处不在。另外在嵌入式开发板上运行GNU/Linux已经变得越来越流行,ARM Linux的广泛应用使得围绕它的一些实现、应用和支持都成为热门的研究方向。一个标准的嵌入式系统模型可以分为三个部分:Bootloader、内核、应用程序;简单地说,Bootloader就是在操作系统内核运行前运行的一段小程序。通过这段小程序,初始化必要的硬件设备,创建内核需要的一些信息,从而将系统的软硬件环境带到一个合适的状态,最终调用操作系统内核,起到引导和加载内核的作用[1]。另外,在嵌入式系统的硬件测试工具方面,bootloader也是一个值得考虑的选择。传统硬件测试是基于JTAG仿真设备完成的,调试过程复杂,存在局限性。笔者认为只要在bootloader中适当开发部分外设驱动程序并提供部分内存指令,完全可以满足工程中对外部设备的调测需求,这种硬件测试方法独立于JTAG测试,实用性好,运用简洁,几乎无外部硬件限制,完全可以形成一种新的硬件测试方法。
2 实现通用bootloader的可行性分析
引导加载程序是系统加电后运行的第一段代码。我们熟悉的PC中的引导程序由BIOS和位于MBR的OS Bootloader(LILO或者GRUB)一起组成。然而在嵌入式系统中通常没有像