μC/OS-II在PC機上移植的設計與實(shí)現
1 引言
μC/OS-II是專(zhuān)門(mén)為嵌入式系統應用而設計的嵌入式實(shí)時(shí)操作系統,人們在學(xué)習μC/OS-II時(shí),一開(kāi)始往往在基于PC機的DOS或 Windows環(huán)境下進(jìn)行分析與研究。在這種環(huán)境中,帶有μC/OS-II內核的應用系統(簡(jiǎn)稱(chēng)μC/OS-II應用系統)的運行,讓人覺(jué)得它好像是一個(gè) DOS程序,人們無(wú)法真實(shí)地領(lǐng)略實(shí)時(shí)操作系統的面貌。實(shí)際上,在PC機的DOS或Windows環(huán)境中,μC/OS-II應用系統確實(shí)是一個(gè)DOS可執行程序,它的運行離不開(kāi)DOS或Windows環(huán)境。為了讓更多的人掌握和理解μC/OS-II實(shí)時(shí)操作系統,筆者對μC/OS-II進(jìn)行移植,使其完全脫離DOS或Windows環(huán)境而運行。首先設計Bootloader引導程序,由它來(lái)裝入μC/OS-II應用系統;其次修改BORLAND C++編譯器中的EXE啟動(dòng)代碼,剝去與DOS相關(guān)的代碼;最后修改μC/OS-II內核代碼中與硬件平臺相關(guān)部分的代碼,使其能正常運行和正常退出。
2 bootloader的設計
Bootloader引導程序的設計是嵌入式系統軟件開(kāi)發(fā)的一個(gè)重要環(huán)節,它把操作系統和硬件平臺銜接在一起,通過(guò)初始化硬件設備、建立內存空間映射,為最終加載操作系統內核建立正確的環(huán)境。由于Bootloader的實(shí)現依賴(lài)于CPU的體系結構,因此大多數初始化引導程序分為兩部分,第一部分主要包含依賴(lài)于CPU體系結構的硬件初始化代碼,第二部分實(shí)現的功能比第一部分更多更復雜,它為內核程序準備運行的環(huán)境,將內核裝入到指定位置,并轉到內核處運行。本文設計的Bootloader也是由兩部分構成,一部分稱(chēng)作BOOT的引導記錄,另一部分是LOADER裝入程序。BOOT的大小固定為512個(gè)字節,作為引導記錄存放在軟盤(pán)的0面0磁道1扇區,它所實(shí)現的功能是在軟盤(pán)的目錄區中尋找LOADER文件,并將LOADER裝入到內存中,然后由 LOADER負責初始化工作環(huán)境并引導內核的運行。
軟盤(pán)采用FAT文件系統,并對它進(jìn)行格式化,使用工具將BOOT寫(xiě)到0面0磁道1扇區中,將LOADER和μC/OS-II應用系統程序復制到軟盤(pán)中,然后用軟盤(pán)啟動(dòng)系統,就能觀(guān)察到μC/OS-II實(shí)時(shí)操作系統的運行情況,它完全脫離了DOS運行環(huán)境。同樣,也可以通過(guò)Bochs、QEMU或 VMware等虛擬機做一個(gè)磁盤(pán)映像文件,用BOOT替換該映像文件的前512個(gè)字節,將LOADER和μC/OS-II應用系統復制到該映像文件中,然后就可以在虛擬機中完成系統的啟動(dòng)。這樣,在每次修改程序后,不需要重新啟動(dòng)機器來(lái)驗證系統的正確性,而只需要調整映像文件,在虛擬機中重啟系統即可,使用虛擬機使內核的修改和調試變得十分容易。
2.1 BOOT的設計
當PC機加電后,首先進(jìn)行自檢,然后尋找啟動(dòng)盤(pán),如果從軟盤(pán)啟動(dòng),計算機讀取軟盤(pán)的0面0磁道1扇區的內容,若該扇區最后兩個(gè)字節是0x55、 0xaa,則其為引導扇區,計算機將其內容裝入到內存地址0x7c00開(kāi)始處,并轉到該處運行。因BOOT只能占用一個(gè)扇區,其大小固定為512個(gè)字節,其實(shí)現的功能受到限制,所以BOOT的主要功能是在磁盤(pán)的目錄區中尋找LOADER程序,并將其裝入到內存中,最后將CPU的控制權交給LOADER,其后的任務(wù)就由LOADER完成。BOOT程序的算法描述如下:
(1) 在顯示屏上顯示“Booting...”提示信息,同時(shí)使軟驅復位;
(2) 在磁盤(pán)的目錄區中尋找LOADER文件;
(3) 若LOADER文件存在,則轉(5);
(4) LOADER文件不存在,顯示提示信息“Boot fail!”,關(guān)閉軟驅馬達,程序進(jìn)入死循環(huán);
(5) 將LOADER讀到內存0x90000處;
(6) CPU轉到0x90000處運行,即將CPU的控制權交給LOADER。
這段程序用匯編語(yǔ)言編寫(xiě),它經(jīng)過(guò)匯編連接后,使用工具軟件,比如debug將其寫(xiě)到軟盤(pán)的0面0道1扇區。
評論