3 系统软件设计
本系统的编译和调试可采用ADS1.2工具。该工具的功能非常强大,能支持多种ARM内核以及ARM汇编语言、C语言、C++等。而且在进行各种参数设置时,不必记忆大量的参数格式,而是可直接在窗口中设置。它能够支持映象仿真,并可配合调试硬件逻辑SUPERJTAG实现在线调试。
由于本系统是一个基于ARM的嵌入式Linux系统平台,系统最为关键的是实现引导程序,植入Linux操作系统,而不很关心具体的应用。所以,软件系统的主要任务是实现一个性能优良的引导程序,以使Linux操作系统能够良好地运行起来。事实上,在嵌入式系统中,通常并没有像PC机中BIOS那样的同件程序,因此,整个系统的加载启动任务就完全由Boot Loader来完成。完成硬件检测和资源分配后,只要将闪存中的BootLoader读到系统的RAM中,然后将控制权交给Boot Loader即可。Boot Loader的主要运行任务是将内核映象从闪存读到RAM,然后跳转到内核的入口点去运行,也就是开始启动操作系统。
由于Boot Loader的实现依赖于CPU的体系结构,因此大多数Boot Loader都分为阶段一和阶段二两大部分。依赖于CPU体系结构的代码(比如设备初始化代码等)通常都放在阶段一中,且通常都用汇编语言来实现,以达到短小精悍的目的。而阶段二则通常用C语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。
Boot Loader的阶段一通常包括以下步骤(以执行的先后顺序列出):
◇硬件设备初始化;
◇为加载Boot Loader的阶段二准备RAM空间;
◇拷贝Boot Loader的阶段二到RAM空间中;
◇设置好堆栈;
◇跳转到阶段二的C入口点。
Boot Loader的阶段二通常包括以下步骤(以执行的先后顺序列出):