μC/OS-II在PC机上移植的设计与实现
2.2 LOADER的设计
2.2.1 EXE文件格式
在DOS或Windows环境中,μC/OS-II使用BORLAND C++开发工具,因此,μC/OS-II应用系统的文件采用DOS的EXE格式,在装入μC/OS-II应用系统时,引导程序将按EXE文件格式的要求将内核加载到内存中。EXE文件由两部分组成:文件首部和程序主体。文件首部包含重定位信息和控制信息,它由编译器和连接程序自动生成;程序主体包含代码段、栈段、数据段等,它由EXE启动代码和程序员编的程序构成,它是程序实际运行部分。EXE文件首部内容如表1所示。
表1 EXE文件首部 | |
偏 移 | 说 明 |
00-01 | EXE型程序标志“MZ” |
02-03 | 文件长度除以512的余数 |
04-05 | 文件长度除512的商 |
06-07 | 重定位项数 |
08-09 | 文件首部长度(单位为节,每16字节为一节) |
0A-0B | 程序装入后要求高地址内存的最小节数 |
0C-0D | 程序装入后要求高地址内存的最大节数 |
0E-0F | 堆栈段SS的值 |
10-11 | SP的初值 |
12-13 | 文件校验和 |
14-15 | IP的初值 |
16-17 | 代码段CS的值 |
18-19 | 第一个重定位项的位置 |
1A-1B | 覆盖号 |
1C- | 保留 |
[18-19]- | 重定位表 |
2.2.2 LOADER程序的设计
LOADER程序实现的主要功能是负责将内核装入到内存指定位置。假定TEST.EXE为带μC/OS-II内核的应用程序的文件名,LOADER 装入程序将首先在磁盘中查找TEST.EXE文件,若找到,将其读入内存地址0x10000开始的空间中。LOADER根据EXE文件首部的重定位表对加载到内存中的程序进行地址重定位后,初始化运行环境,然后转到程序主体的入口处运行。LOADER程序算法描述如下:
(1) 软驱复位,然后在软盘目录表中查找文件TEST.EXE,若找到转(3);
(2) 在软盘中没有找到TEST.EXE文件,显示信息“Kernel file do not exist!”,关闭软驱马达,程序进入死循环;
(3) 将TEST.EXE程序读到内存0x10000h处;
(4) 根据重定位表对装入内存中的TEST.EXE相关内容进行调整;
(5) 初始化TEST.EXE的运行环境;
(6) 转TEST.EXE入口处,开始运行TEST.EXE;
(7) 结束。
评论