实时操作系统(RTOS)RTOS是一段嵌入在目标代码中的程序,系统复位后首先执行,相当于用户的主程序,用户的其它应用程序都建立在RTOS之上。不仅如此,RTOS还是一个标准的内核,将CPU时间、中断、I/O、定时器等资源都包装起来,留给用户一个标准的API,并根据各个任务的优先级,合理地在不同任务之间分配CPU时间。RTOS是针对不同处理器优化设计的高效率实时多任务内核,RTOS可以面对几十个系列的嵌入式处理器MPU、MCU、DSP、SOC等提供类同的API接口,这是RTOS基于设备独立的应用程序开发基础。优秀RTOS上跨处理器平台的程序移植只需要修改1-4的内容。在RTOS基础上可以编写出各种硬件驱动程序、专家库函数、行业库函数、产品库函数,和通用性的应用程序一起,可以作为产品销售,促进行业的知识产权交流,因此RTOS又是一个软件开发平台。RTOS的基本结构RTOS最关键的部分是实时多任务内核,它的基本功能包括任务管理、定时器管理、存储器管理、资源管理、事件管理、系统管理、消息管理、队列管理、旗语管理等,这些管理功能是通过内核服务函数形式交给用户调用的,也就是RTOS的API。ARM7启动顺序ARM7启动过程嵌入式系统资源有限,程序通常都固化在ROM总运行。ROM中程序执行前,需要对系统硬件和软件运行环境进行初始化,这些工作是用汇编语言编写的启动程序完成。启动程序是嵌入式程序的开头部分,应与应用程序一起固化在ROM中,应首先在系统上运行的启动程序应包含各模块中可能出现的所有段类,并合理安排他们的次序。BootLoade设计BootLoader概念在嵌入式系统中,通常没有像PC机BIOS那样的固件程序,因此整个系统的加载启动任务就完全由BootLoader来完成。对于我们的实验开发板,由于flash接的是微处理器Bank0的片选信号。映射的地址为0x00000000。而实验系统在上电或复位时从地址0x00000000处开始执行,所以在这个地址处安排系统的BootLoader程序。由于BootLoader与硬件结合非常紧密,所以对于不同结构的CPU其BootLoader程序都是不同的。BootLoader总体设计Stage1\stage2\根文件和映像文件关系如图BootLoader的stage1完成以下功能:(1)硬件设备初始化。(2)设置堆栈。(3)为加载BootLoader的stage2准备RAM空间(4)拷贝BootLoader的stage2到RAM空间中。(5)跳转到stage2的C入口点.BootLoader的stage2必须完成以下功能:(1)初始化本阶段要使用到的硬件设备。(2)将kernel映像和根文件系统映像从flash上读到RAM空间中。(3)为内核设置启动参数。(4)调用内核。uClinux根文件及系统映象文件对于uClinux根文件系统的制作则使用uClinux的dist包,在宿主机的Linux环境下通过makemenuconfig命令来完成对根文件系统的配置,编译,连接等一系列工作,生成所需要的根文件系统映象文件。注意:不同CPU,依赖于CPU体系结构的代码。设备初始化代码都放在stage1中,并且都用汇编语言来实现,以达到短小精悍的目的。而stage2则用C语言来实现,实现系统功能。BootLoader实现BootLoaderStage1功能术语解释映象文件(IMAGE):指一个可以执行的文件,ELF格式.段(section):描述映象文件的代码或数据块。RO:是Read-only的简写形式.一般存放的代码。RW:是Read-write的简写形式。一般是存放初始化的数据。ZI:是Zero-initialized的简写形式。一般是存放零初始化数据。输入段(inputsection):它包含代码、初始化数据或描述了在应用程序运行之前必须要初始化为0的一段内存。输出段(outputsection):它包含一系列具有相同R0,RW,ZI属性的输入段。域(Regions):在一个映象文件中,一个域包含了1-3个输出段。多个域组织在一起就构成了最终的映象文件1、硬件的初始化目的:为stage2的执行以及随后的kernel的执行准备好一些基本的硬件环境1).屏蔽所有的中断。为中断提供服务是操作系统的设备驱动程序的责任,因此在BootLoader的执行全过程中不必响应任何中断。中断屏蔽可以通过写ARM的CPSR寄存器来完成PI。2).设置CPU的速度和时钟频率。3)堆栈初始化。设置堆栈指针是为执行C语言代码作准备。把sp的值设置在RAM空间距最顶端1.5KB的地方(堆栈向上生长)。因为在不同的工作模式下所访问的堆...