μC/OS-II在PC機上移植的設計與實現(xiàn)
2.2 LOADER的設計
2.2.1 EXE文件格式
在DOS或Windows環(huán)境中,μC/OS-II使用BORLAND C++開發(fā)工具,因此,μC/OS-II應用系統(tǒng)的文件采用DOS的EXE格式,在裝入μC/OS-II應用系統(tǒng)時,引導程序將按EXE文件格式的要求將內(nèi)核加載到內(nèi)存中。EXE文件由兩部分組成:文件首部和程序主體。文件首部包含重定位信息和控制信息,它由編譯器和連接程序自動生成;程序主體包含代碼段、棧段、數(shù)據(jù)段等,它由EXE啟動代碼和程序員編的程序構成,它是程序實際運行部分。EXE文件首部內(nèi)容如表1所示。
表1 EXE文件首部 | |
偏 移 | 說 明 |
00-01 | EXE型程序標志“MZ” |
02-03 | 文件長度除以512的余數(shù) |
04-05 | 文件長度除512的商 |
06-07 | 重定位項數(shù) |
08-09 | 文件首部長度(單位為節(jié),每16字節(jié)為一節(jié)) |
0A-0B | 程序裝入后要求高地址內(nèi)存的最小節(jié)數(shù) |
0C-0D | 程序裝入后要求高地址內(nèi)存的最大節(jié)數(shù) |
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程序實現(xiàn)的主要功能是負責將內(nèi)核裝入到內(nèi)存指定位置。假定TEST.EXE為帶μC/OS-II內(nèi)核的應用程序的文件名,LOADER 裝入程序將首先在磁盤中查找TEST.EXE文件,若找到,將其讀入內(nèi)存地址0x10000開始的空間中。LOADER根據(jù)EXE文件首部的重定位表對加載到內(nèi)存中的程序進行地址重定位后,初始化運行環(huán)境,然后轉到程序主體的入口處運行。LOADER程序算法描述如下:
(1) 軟驅復位,然后在軟盤目錄表中查找文件TEST.EXE,若找到轉(3);
(2) 在軟盤中沒有找到TEST.EXE文件,顯示信息“Kernel file do not exist!”,關閉軟驅馬達,程序進入死循環(huán);
(3) 將TEST.EXE程序讀到內(nèi)存0x10000h處;
(4) 根據(jù)重定位表對裝入內(nèi)存中的TEST.EXE相關內(nèi)容進行調整;
(5) 初始化TEST.EXE的運行環(huán)境;
(6) 轉TEST.EXE入口處,開始運行TEST.EXE;
(7) 結束。
評論