|
知识路径: > 嵌入式系统软件基础知识 > 嵌入式系统程序设计 > 嵌入式应用软件移植 > 有操作系统的软件移植 >
|
相关知识点:2个
|
|
|
|
这里讨论的有操作系统的软件移植,是指把操作系统和应用软件作为一个整体,移植到一个新的嵌入式硬件平台上。
|
|
|
嵌入式软件的体系结构可分为四个层次,即设备驱动层、操作系统层、中间件层和应用软件层。当需要把一个嵌入式软件系统整体移植到一个新的硬件平台时,真正需要移植的是与硬件直接打交道的部分,包括设备驱动层的软件和操作系统当中的部分代码。而其他的软件,如操作系统内核、中间件和应用软件,不用做任何修改。当然,在有些嵌入式操作系统中,如单体结构的操作系统,把设备驱动层的软件也集成在系统内核中,这时就要把相应的软件摘取出来进行修改。总之,在系统移植时,真正需要移植的主要是:引导加载程序BootLoader、设备驱动程序以及操作系统中与处理器密切相关的代码。
|
|
|
为提高可移植性,BootLoader的实现一般分为stage1和stage2两大部分。依赖于CPU体系结构的代码,如设备初始化代码等,通常都放在stage1中,用汇编语言来实现。而stage2则采用C语言来实现。在移植时,主要的工作量在stage1的移植,基本上要重新编写。
|
|
|
一般来说,一个嵌入式操作系统在设计的时候,就已经充分考虑了可移植性,所以它的移植相对来说是比较容易的。以μC/OS-Ⅱ为例,为了方便移植,μC/OS-Ⅱ的大部分代码都是用标准的C语言编写的,不需要改动。只有少部分代码,尤其是那些与CPU寄存器打交道的代码,需要针对具体的CPU类型进行修改,这些代码一般都是用汇编语言来写的。
|
|
|
如下图所示,μC/OS-Ⅱ操作系统的代码被分为三大部分。第一部分是与处理器无关的代码,如任务管理、任务调度、存储管理、信号量、邮箱、消息队列等;第二部分与系统的配置有关,应用程序开发人员可以通过修改这些配置文件来裁剪内核,选择自己需要的系统服务;第三部分是与处理器相关的代码,包括三个文件:OS_CPU.H、OS_CPU_A.ASM和OS_CPU_C.C。在移植μC/OS-II操作系统时,主要修改的就是这三个文件。
|
|
|
|
|
.OS_CPU.H:该文件包括三部分的内容,首先是一个符号常量,用来设定处理器的栈的增长方向;其次是3个宏定义,用来关闭和打开中断;最后是10个数据类型的定义,用来定义与编译器无关的数据类型。在操作系统内部,只使用这些数据类型,而不使用标准C的数据类型。
|
|
|
.OS_CPU.ASM:用汇编语言编写OS_CPU.ASM文件中的四个与处理器相关的函数,包括任务切换、时钟中断服务程序等。
|
|
|
.OS_CPU_C.C:用C语言编写OS_CPU_C.C文件中的十个与操作系统相关的函数,一般只需要改写其中的一个函数,即任务堆栈的初始化函数。
|
|
|
根据目标处理器的不同,一个移植实例可能需要编写或改写50至300行的代码,需要的时间因人而异。
|
|
|