|
3.1 編譯作業系統
編譯本作業系統需要撰寫批次檔和 MAKEFILE。批次檔是 WINDOWS 環
境下用來執行一系列指令的描述檔,MAKEFILE 是用來幫助編譯器編譯
程式碼的描述檔。透過批次檔和 MAKEFILE,編譯過程變得很便
利,只要在命令提示列上鍵入 MAKEOS.BAT 就可以完成整個編譯的過
程,並產生作業系統的映像檔。
筆者提供一般多工作業系統 FORMOSA_V1 和視窗多工作業系統 FORMOSA_V2。
這裡是以視窗多工作業系統說明編譯與執行的方法,至於一般多工作業系統的說明,只要類推即可。
|
|
|
3.1.1 批次檔
使用批次檔來進行編譯的工作,可以簡化編譯的過程。
把原始程式碼放在 C:\FORMOSA_V2 的目錄中,在命令提示字元的視窗中進入該目錄,並執行 MAKEOS.BAT。
如果要編譯一般多工作業系統的話,將 FORMOSA_V2 改成 FORMOSA_V1。
之後,整個編譯過程就會自動執行完畢 。如果編譯過程順利,沒有錯誤發生的話,
最後會在各個 IMAGE 的目錄中產生本作業系統的映像檔。
|
|
|
3.1.1.1 編譯軟碟機啟動磁區
行號 | 說明 |
01 | 進入軟碟機啟動磁區的目錄。 |
02 | 刪除軟碟機啟動磁區二進位檔。 |
03 | 執行軟碟機啟動磁區編譯程序。 |
04 | 返回原來的目錄。 |
|
|
|
3.1.1.2 編譯硬碟機啟動磁區
行號 | 說明 |
01 | 進入硬碟機啟動磁區的目錄。 |
02 | 刪除硬碟機啟動磁區二進位檔。 |
03 | 執行硬碟機啟動磁區編譯程序。 |
04 | 返回原來的目錄。 |
|
|
|
3.1.1.3 編譯軟碟安裝作業系統啟動磁區
行號 | 說明 |
01 | 進入安裝硬碟機啟動磁區的目錄。 |
02 | 刪除安裝硬碟機啟動磁區二進位檔。 |
03 | 執行安裝硬碟機啟動磁區編譯程序。 |
04 | 返回原來的目錄。 |
|
|
|
3.1.1.4 編譯模式轉換
行號 | 說明 |
01 | 進入 CPU 模式轉換程式碼的目錄。 |
02 | 刪除 CPU 模式轉換程式碼二進位檔。 |
03 | 執行 CPU 模式轉換程式碼編譯程序。 |
04 | 返回原來的目錄。 |
|
|
|
3.1.1.5 編譯視窗作業系統核心
行號 | 說明 |
01 | 進入作業系統核心目錄。 |
02 | 進入應用程式目錄。 |
03~05 | 進入 DESK 目錄,刪除 DESK 目錄目的檔,再退回應用程式目錄。 |
06~08 | 進入 BEE 目錄,刪除 BEE 目錄目的檔,再退回應用程式目錄。 |
09~11 | 進入 BOMB 目錄,刪除 BOMB 目錄目的檔,再退回應用程式目錄。 |
12~14 | 進入 CALCULATOR 目錄,刪除 CALCULATOR 目錄目的檔,再退回應用程式目錄。 |
15 | 退回作業系統核心目錄。 |
16~17 | 進入中介軟體目錄,刪除所有中介軟體目錄的目的檔。 |
18~20 | 進入 FONT 目錄,刪除 FONT 目錄目的檔,再退回中介軟體目錄。 |
21~23 | 進入 GUI 目錄,刪除 GUI 目錄目的檔,再退回中介軟體目錄。 |
24 | 退回作業系統核心目錄。 |
25~27 | 進入 FFC 目錄,刪除 FFC 目錄的所有目的檔,再退回作業系統核心目錄。 |
28~30 | 進入 DRIVERS 目錄,刪除 DRIVERS 目錄的所有目的檔,再退回作業系統核心目錄。 |
31~33 | 進入 OS 目錄,刪除 OS 目錄的所有目的檔,再退回作業系統核心目錄。 |
34~36 | 進入 SYSTEM 目錄,刪除 SYSTEM 目錄的所有目的檔,再退回作業系統核心目錄。 |
37~39 | 進入 TASKS 目錄,刪除 TASKS 目錄的所有目的檔,再退回作業系統核心目錄。 |
40 | 刪除多工核心二進位檔。 |
41 | 執行多工核心的編譯程序。 |
42 | 將多工核心的執行檔轉換成二進位檔。 |
43 | 返回原來目錄。 |
|
|
|
3.1.1.6 編譯一般作業系統核心
行號 | 說明 |
01 | 進入作業系統核心 2 目錄,這是一個不支援視窗的多工作業系統核心。 |
02~03 | 進入中介軟體目錄,刪除所有中介軟體目錄的目的檔。 |
04~06 | 進入 FONT 目錄,刪除 FONT 目錄目的檔,再退回中介軟體目錄。 |
07~09 | 進入 GUI 目錄,刪除 GUI 目錄目的檔,再退回中介軟體目錄。 |
10 | 退回作業系統核心目錄。 |
11~13 | 進入 DRIVERS 目錄,刪除 DRIVERS 目錄的所有目的檔,再退回作業系統核心目錄。 |
14~16 | 進入 OS 目錄,刪除 OS 目錄的所有目的檔,再退回作業系統核心目錄。 |
17~19 | 進入 SYSTEM 目錄,刪除 SYSTEM 目錄的所有目的檔,再退回作業系統核心目錄。 |
20~22 | 進入 TASKS 目錄,刪除 TASKS 目錄的所有目的檔,再退回作業系統核心目錄。 |
23 | 刪除多工核心二進位檔。 |
24 | 執行多工核心的編譯程序。 |
25 | 將多工核心的執行檔轉換成二進位檔。 |
26 | 返回原來目錄。 |
|
|
|
3.1.1.7 編譯軟碟機啟動的作業系統映像
行號 | 說明 |
01 | 進入軟碟機開機作業系統映像檔的目錄。 |
02 | 刪除軟碟機開機作業系統映像檔。 |
03 | 執行軟碟機開機作業系統映像檔編譯程序。 |
04 | 複製軟碟機開機作業系統映像檔到模擬器的目錄,以方便進行模擬。 |
05 | 返回原來的目錄。 |
|
|
|
3.1.1.8 編譯光碟機啟動的作業系統映像
行號 | 說明 |
01 | 進入光碟機開機作業系統映像檔的目錄。 |
02 | 刪除軟碟機開機作業系統映像檔。 |
03 | 刪除光碟機開機作業系統映像檔。 |
04 | 執行軟碟機開機作業系統映像檔編譯程序。 |
05 | 執行光碟機開機作業系統映像檔轉換程序。 |
06 | 複製光碟機開機作業系統映像檔到模擬器的目錄,以方便進行模擬。 |
07 | 返回原來的目錄。 |
|
|
|
3.1.1.9 編譯軟光碟機安裝作業系統映像
行號 | 說明 |
01 | 進入光碟機安裝作業系統映像檔的目錄。 |
02 | 刪除軟碟機安裝作業系統映像檔。 |
03 | 刪除光碟機安裝作業系統映像檔。 |
04 | 執行軟碟機安裝作業系統映像檔編譯程序。 |
05 | 執行光碟機安裝作業系統映像檔轉換程序。 |
06 | 複製軟碟機安裝作業系統映像檔到模擬器的目錄,以進行模擬。 |
07 | 複製光碟機安裝作業系統映像檔到模擬器的目錄,以進行模擬。 |
08 | 返回原來的目錄。 |
|
|
|
3.1.2 MAKEFILE
因為所使用的編譯器都是免費的自由軟體,使用上
無法和商業軟體的便利性相比,必須使用 MAKE.EXE 和 MAKEFILE 進行編譯工作。
MAKEFILE 有點像是編譯器的智慧型輔助,簡化編譯器的編譯過程。
為了使 MAKEFILE 的描述更加簡潔,MAKEFILE 發展出一
些特別的語法,這些語法讓 MAKEFILE 的可讀性變差,可讀性變差的
情形也讓 MAKEFILE 變得不容易學。學 MAKEFILE 其實並不難,只要
掌握幾個要領,不用太花俏的語法,MAKEFILE 本身其實也是一種有趣
的程式設計。在這裡提供一個小小的範例,讓大家了解 MAKEFILE 的
基本思考方式。
編譯作業系統用到的所有 MAKEFILE共 9 個,在這裡列出 8 個。
這是因為 KERNEL 和 KERNEL2 的 MAKEFILE 很類似,所以不另外說明。
|
|
|
3.1.2.1 MAKEFILE 範例
02 |
all 是目標描述指令, all:bootsect.bin 表示 MAKEFILE 最後要得到的結果是 bootsect.bin。
|
03 |
bootsect.bin:bootsect.asm 的意思是說,要得到 bootsect.bin 之前,要先有 bootsect.asm。
沒有 bootsect.asm 就不會編譯 bootsect.bin。有了 bootsect.asm 之後,就可以執行 LINE 4 的指令。
所以 bootsect.asm 也可以稱作 bootsect.bin 的相依檔或輸入檔。
|
04 |
當 LINE 3 的條件成立時,就要執行 LINE 4 的指令。
LINE 4 的第一個字必須是 [TAB] 鍵,這是 MAKEFILE 的規定。這也是剛接觸 MAKEFILE 時,要特別注意的事。
$(NASM) 會被換成 C:\NASM\NASM.EXE,因為 NASM 在 LINE 0 就已經被定義為 C:\NASM\NASM.EXE。
-f bin 表示輸出的檔案屬性是二進位檔,-f 是FILE FORMAT,bin 是 BINARY。
-o $@ 表示輸出的檔名是 bootsect.bin,-o 是OUTPUT FILE。$@ 的 @ 是 AT 的象形符號,表示目標檔名是 bootsect.bin。
$< 是輸入檔名 bootsect.asm 的代替符號。< 是個箭頭符號,表示輸入的意思,指的是 LINE 3 的輸入檔 bootsect.asm。
-l bootsect.lst 表示這行指令完成時,也要得到列表檔。-l 是LIST FILE,bootsect.lst 是列表檔的檔名。
|
|
|
|
3.1.2.2 軟碟機啟動磁區的 MAKEFILE
01 | 指定編譯器為 NASM 的組合語言編譯器。 |
02 | 指定編譯最終目標為軟碟機啟動磁區二進位檔 bootsect_floppy.bin。只要這個最終目標出現,就停止編譯。 |
03 | 編譯軟碟機啟動磁區的相依條件,當條件成立時才會進行編譯動作。 |
04 | 編譯動作的設定。
第 1 個字一定是 [TAB],輸出的檔案格式 (-f) 為二進位檔 (bin)。
輸出檔名為目標檔檔名($@),即 bootsect_floppy.bin。
輸入檔名是相依檔檔名($<),即 bootsect_floppy.asm。
最後產生軟碟機啟動磁區的列表檔,用來觀察組合語言的編譯結果。 |
|
|
|
3.1.2.3 硬碟機啟動磁區的 MAKEFILE
01 | 指定編譯器為 NASM 的組合語言編譯器。 |
02 | 指定編譯最終目標為硬碟機啟動磁區二進位檔 bootsect_hd.bin。只要這個最終目標出現,就停止編譯。 |
03 | 編譯硬碟機啟動磁區的相依條件,當條件成立時才會進行編譯動作。 |
04 | 編譯動作的設定。
第 1 個字一定是 [TAB],輸出的檔案格式 (-f) 為二進位檔 (bin)。
輸出檔名為目標檔檔名($@),即 bootsect_hd.bin。
輸入檔名是相依檔檔名($<),即 bootsect_hd.asm。
最後產生硬碟機啟動磁區的列表檔,用來觀察組合組合語言的編譯結果。 |
|
|
|
3.1.2.4 安裝硬碟機啟動磁區的 MAKEFILE
01 | 指定編譯器為 NASM 的組合語言編譯器。 |
02 | 指定編譯最終目標為安裝硬碟機啟動磁區二進位檔 bootsect_hd.bin。只要這個最終目標出現,就停止編譯。 |
03 | 編譯安裝硬碟機啟動磁區的相依條件,當條件成立時才會進行編譯動作。 |
04 | 編譯動作的設定。
第 1 個字一定是 [TAB],輸出的檔案格式 (-f) 為二進位檔 (bin)。
輸出檔名為目標檔檔名($@),即 bootsect_install.bin。
輸入檔名是相依檔檔名($<),即 bootsect_install.asm。
最後產生安裝硬碟機啟動磁區的列表檔,用來觀察組合組合語言的編譯結果。 |
|
|
|
3.1.2.5 模式轉換的 MAKEFILE
01 | 指定編譯器為 NASM 的組合語言編譯器。 |
02 | 指定編譯最終目標為 CPU 操作模式轉換的二進位檔 changemode.bin。只要這個最終目標出現,就停止編譯。 |
03 | 編譯CPU 操作模式轉換程式碼的相依條件,當條件成立時才會進行編譯動作。 |
04 | 編譯動作的設定。
第 1 個字一定是 [TAB],輸出的檔案格式 (-f) 為二進位檔 (bin)。
輸出檔名為目標檔檔名($@),即 changemode.bin。
輸入檔名是相依檔檔名($<),即 changemode.asm。
最後產生CPU 操作模式轉換的列表檔,用來觀察組合組合語言的編譯結果。 |
|
|
|
3.1.2.6 軟碟機開機作業系統映像的 MAKEFILE
01 | 指定編譯器為 NASM 的組合語言編譯器。 |
02 | 指定編譯最終目標為軟碟機開機作業系統的二進位檔 floppy_os.bin。只要這個最終目標出現,就停止編譯。 |
03 | 編譯軟碟機開機作業系統的相依條件,當條件成立時才會進行編譯動作。 |
04 | 編譯動作的設定。
第 1 個字一定是 [TAB],輸出的檔案格式 (-f) 為二進位檔 (bin)。
輸出檔名為目標檔檔名($@),即 floppy_os.bin。
輸入檔名是相依檔檔名($<),即 image_floppy.asm。 |
|
|
|
3.1.2.7 硬碟機開機作業系統映像的 MAKEFILE
01 | 指定編譯器為 NASM 的組合語言編譯器。 |
02 | 指定編譯最終目標為硬碟機開機作業系統的二進位檔 floppy_os.bin。只要這個最終目標出現,就停止編譯。 |
03 | 編譯硬碟機開機作業系統的相依條件,當條件成立時才會進行編譯動作。 |
04 | 編譯動作的設定。
第 1 個字一定是 [TAB],輸出的檔案格式 (-f) 為二進位檔 (bin)。
輸出檔名為目標檔檔名($@),即 hd_os.bin。
輸入檔名是相依檔檔名($<),即 image_hd.asm。 |
|
|
|
3.1.2.8 安裝作業系統映像的 MAKEFILE
01 | 指定編譯器為 NASM 的組合語言編譯器。 |
02 | 指定編譯最終目標為安裝作業系統的二進位檔 install_os.bin。只要這個最終目標出現,就停止編譯。 |
03 | 編譯安裝作業系統映像檔的相依條件,當條件成立時才會進行編譯動作。 |
04 | 編譯動作的設定。
第 1 個字一定是 [TAB],輸出的檔案格式 (-f) 為二進位檔 (bin)。
輸出檔名為目標檔檔名($@),即 install_os.bin。
輸入檔名是相依檔檔名($<),即 image_install.asm。 |
|
|
|
3.1.2.9 作業系統核心的 MAKEFILE
FORMOSA_V1 和 FORMOSA_V2 中各有二個作業系統核心。
一個作業系統核心是用來開機,另一個則是使用 XMODEM 遠端下載執行。
它們的差異主要是 ENTRYPOINT 不一樣,其餘的描述都很類似。
這裡僅說明 FORMOSA_V2 中視窗多工作業系統核心 kernel 的 MAKEFILE,FORMOSA_V1 的部分則類推。
|
|
|
3.1.2.9.1 設定進入點
ENTRYPOINT 指定作業系統核心映像在記憶體中的起始位置。
這是一個很重要的參數值,作業系統核心要在哪一個記憶
體區段執行,就要把這個參數改到那個區段的起始位址。
01 | 設定進入點的位址為 0x00010400。作業系統核心映像會被複製到這個位址並執行。 |
|
|
|
3.1.2.9.2 設定編譯器路徑
編譯程式需要編譯器,編譯器有C語言編譯器和組合語言編譯器。
因為筆者比較習慣用 NASM 的組合語言編譯器,所有組合語言都是用 NASM 編譯。
編譯器編譯程式碼完成後,產生目的檔,需要連結器將目的檔連結成執行檔。
01 | 設定 C 編譯器路徑。 |
02 | 設定組合語言編譯器。 |
03 | 設定 NASM 組合語言編譯器。 |
04 | 設定連結器路徑。 |
|
|
|
3.1.2.9.3 設定編譯器參數
設定 C 語言編譯器、組合語言編譯器、連結器的參數。
01 | C 語言編譯器的參數。
參數 -I include 表示標頭檔都在 include 目錄內。
參數 -c 表示編譯程式碼,但不執行連結,只產生目的檔。
參數 -w 表示壓抑所有警告訊息。 |
02 | C 語言編譯器的參數。
參數 -I include 表示標頭檔都在 include 目錄內。
參數 -f elf 表示生成 elf 格式的目的檔。 |
03 | 連結器的參數。
參數 -s 表示將所有符號刪除,所以輸出檔不會有任何符號。
參數 -Ttext $(ENTRYPOINT) 表示取用 MAKEFILE 中的 ENTRYPOINT 常數值,做為程式內文 text section 的起始位址。
參數 -o kernel.exe 表示輸出檔名為 kernel.exe。
|
|
|
|
3.1.2.9.4 設定 SYSTEM 目的檔
系統區程式的目的檔,內容包括入口點、C 語言入口點、中斷管理器等程式碼的目的檔。
其中,入口點目的檔必須在最前面,因為它是整個多工作業系統的開始執行處。
|
|
|
3.1.2.9.5 設定 DRIVER 目的檔
驅動程式的目的檔群,內容是各硬體的驅動程式,包括中斷控制器、時間控制器
、串列埠控制器、並列埠控制器、即時時鐘控制器、彩色螢幕控制器等驅動程式的目的檔。
|
|
|
3.1.2.9.6 設定 FFC 目的檔
FORMOSA FOUNDATION CLASS 的目的檔群,包括視窗、字幕、畫板等視窗元件的目的檔。
|
|
|
3.1.2.9.7 設定 MIDDLEWARE 目的檔
中介軟體的目的檔群,包括 CONSOLE、XMODEM、字型等目的檔。
|
|
|
3.1.2.9.8 設定 APPLICATION 目的檔
視窗應用程式的目的檔群,包括桌面、小蜜蜂、計算機、拆炸彈等應用程式的目的檔。
|
|
|
3.1.2.9.9 設定 TASK 目的檔
任務的目的檔群,包括桌面任務、命令提示字元任務、計算機任務、小蜜蜂任務、拆炸彈任務。
|
|
|
3.1.2.9.10 設定 OS 目的檔
多工核心的目的檔群,包括多工管理核、任務管理器、排程器、事件管理器、資源管理器、時間管理器、記憶體管理器、根任務等。
|
|
|
3.1.2.9.11 設定總目地檔
將所有的目的檔群匯整在一起,其中系統區目的檔群必須在最前面,因為系統區的入口點目的檔是整個作業系統的開始執行處。
連結器會依照前後次序將目的檔連結成執行檔,而入口點就會出現在整個執行檔的最前面。
|
|
|
3.1.2.9.12 設定編譯規則
編譯規則是 MAKEFILE 的特點,執行編譯的過程是先確定相依檔是否存在,再執行編譯工作,完成所要的目標檔案後,停止編譯。
目標檔案在冒號前面,相依檔是在冒號後面,執行編譯的描述是在目標檔案與相依檔案描述的下一行開始,而且必須以 [TAB] 按鍵做執行編譯的描述的開頭。
01 | 設定最後要產生的目的檔案名稱 |
03~04 | 設定要產生OSKERNEL.EXE的相依檔和編譯指令。編譯過程中,MAKE.EXE 會去尋找所有需要用到的相依檔。
若相依檔不存在,就執行在 06.07.09.10 行的相依檔的產生規則, 看能否產生缺少的相依檔。如果還是不行,就會顯示失敗訊息。 |
06~07 | 設定從 *.c 產生 *.o 的相依檔和編譯指令 |
09~10 | 設定從 *.asm 產生 *.o 的相依檔和編譯指令 |
|
|
|
3.2 執行作業系統
經過編譯的過程,得到作業系統的映像檔,再來就是要執行作業系統。
執行作業系統的方法可以用模擬的方式,也可以在 IBM 相容個人電腦上執行。
摸擬的方式是使用 VISUALBOX 這套免費的模擬軟體,模擬軟碟機開機、硬碟機開機和光碟機開機。
VISUALBOX 也可以模擬軟碟機和光碟機安裝作業系統到硬碟機的過程,之後,作業系統就可以使用 VISUALBOX 的虛擬硬碟機功能開機。
在個人電腦上的實際操作,就和 VISUALBOX 上的操作大同小異,可以從軟碟機和光碟機開機。
至於硬碟機開機,必須先使用軟碟機或光碟機將作業系統安裝到硬碟機。之後,才能從硬碟機開機。
|
|
|
3.2.1 軟碟機開機
軟碟機開機的方式可用軟碟片開機,也可以用VISUALBOX模擬軟碟片開機。
|
|
|
3.2.1.1 使用軟碟片開機
用軟碟片開機時,必須先把作業系統的映像檔 C:\FORMOSA_V2\IMAGE_FLOPPY\FLOPPY_OS.IMG 寫入軟碟片。
方法是使用 C:\FORMOSA_V2\UTILITIES\RWWRTWIN.EXE 把作業系統的映像檔寫入軟碟片。
將軟碟片取出,並置入設定為軟碟機開機的電腦的軟碟機中,再重開電腦,就可以看到使用軟碟機開機的作業系統畫面。
RWWRTWIN 操作畫面:
|
|
|
3.2.1.2 使用 VISUALBOX 模擬軟碟機開機
打開 VISUALBOX 的主畫面,按下 [設定值] 按鈕,再點入 [系統] 視窗。
系統視窗的開機順序中勾選軟碟機,其他的勾選都取消,按確定。

點入 [存放裝置] 視窗,確定存放裝置樹的軟碟控制器上有 FLOPPY_OS.IMG 軟碟映像檔。

回到 VISUALBOX 的主畫面,按下 [啟動] 按鈕,開始執行從軟碟機開機的模擬。

|
|
|
3.2.2 光碟機開機
光碟機開機的方式可用光碟機開機,也可以用 VISUALBOX 模擬光碟機開機。
3.2.2.1 使用光碟機開機
光碟機開機的原理是把光碟機模擬成軟碟機或硬碟機,在光碟片中埋入
BOOTUP 描述表以及開機映像檔,開機映像檔可用軟碟開機映像檔或硬
碟開機映像檔。BOOTUP 描述表本身會敘述要模擬軟碟機開機、硬碟機
開機,或不模擬任何磁碟機開機。本書所採用的是模擬軟碟機開機的方
式,方法是使用 HTTP://WWW.NU2.NU/BOOTCD/ 中所描述的做法,
下載 BCD 和 BFD 的壓縮檔,製作第一個光碟開機映像檔。
之後,筆者寫了一支應用程式,將光碟開機映像檔中的軟碟開機映像
檔置換成目前要用的軟碟開機映像檔,因此可以在編譯作業系統的批次檔
中就可以直接產生要用的光碟開機映像檔。
用光碟機開機時,必須先把作業系統的光碟開機映像檔 CDROM.ISO 寫入
光碟片。方法是使用光碟燒錄器把作業系統的映像檔寫入光碟片。之後,
把光碟片取出,置入用來測試的電腦的光碟機中,並把電腦的 BIOS 設定
為光碟片開機,再重開電腦就可以看到使用光碟機開機的作業系統的畫面。
|
|
|
3.2.2.2 使用 VISUALBOX 模擬光碟機開機
打開 VISUALBOX 的主畫面,按下 [設定值] 按鈕,再點入 [系統] 視窗。
系統視窗的開機順序中勾選光碟機,其他的勾選都取消,按確定。

點入 [存放裝置] 視窗,確定存放裝置樹的軟碟控制器上有 CDROM_OS.IMG 光碟映像檔。

回到 VISUALBOX 的主畫面,按下 [啟動] 按鈕,開始執行從光碟機開機的模擬。

|
|
|
3.2.3 硬碟機開機
硬碟機開機的方式可用硬碟機開機,也可以用 VISUALBOX 模擬硬碟機開機。
|
|
|
3.2.3.1 使用硬碟機開機
硬碟機開機不同於軟碟機開機和光碟機開機,硬碟機
開機必須經過一個安裝過程,將作業系統安裝到電腦的硬碟機中,之後
才能從硬碟機開機。這個安裝過程可以用軟碟機或光碟機安裝,安裝完
成後,電腦就可以從硬碟機開機了。軟碟片的安裝映像檔是
IMAGE_INSTALL\INSTALL_OS.IMG,使用 RWWRTWIN.EXE
將映像檔寫入軟碟片中。把軟碟片取出,再置入要安裝作業系統的電腦的
軟碟機中,開機後螢幕會出現執行結果,之後再將軟碟片取出,重新開
機,此時電腦就從硬碟機開機了。
光碟片的安裝映像檔是 IMAGE_INSTALL\CDROM_INSTALL.ISO,
使用光碟燒錄器把映像檔燒入光碟片中。再將光碟片置入要安裝作業系統的電腦光碟機中,
並把 BIOS 設定為 CDROM 開機,開機後螢幕會出現安裝結果,
再取出光碟片,重新開機,此時電腦就從硬碟機開機了。
|
|
|
3.2.3.2 使用 VISUALBOX 模擬硬碟機開機
用 VISUALBOX 模擬硬碟機開機之前,必須先將作業系統安裝到硬碟,之後,只要設定硬碟開機就可以模擬硬碟機開機。
|
|
|
3.2.3.2.1 安裝作業系統到虛擬硬碟機
用 VISUALBOX 模擬硬碟機開機之前,必須先將作業系統安裝到硬碟,之後,只要設定硬碟開機就可以模擬硬碟機開機。
安裝作業系統的方法可以透過軟碟映像檔或光碟映像檔,這裡以軟碟映像檔為範例說明安裝過程,光碟映像檔的安裝過程也差不多一樣。
首先,打開 VISUALBOX 的主畫面,按下 [設定值] 按鈕,再點入 [系統] 視窗。
系統視窗的開機順序中勾選軟碟機,其他的勾選都取消,按確定。

點入 [存放裝置] 視窗,確定存放裝置樹的軟碟控制器上的是 INSTALL_OS.IMG 的軟碟映像檔。
回到 VISUALBOX 的主畫面,按下 [啟動] 按鈕,開始執行從軟碟機開機的模擬。

作業系統安裝完成後,將虛擬電腦關機,即可。

|
|
|
3.2.3.2.2 從虛擬硬碟機開機
完成作業系統的安裝後,VISUALBOX 必須從軟碟機開機的模式轉換成硬碟開機模式。
方法是回到 VISUALBOX 的主畫面,按下 [設定值] 按鈕,再點入 [系統] 視窗。
系統視窗的開機順序中勾選硬碟機,其他的勾選都取消,按確定。

回到 VISUALBOX 的主畫面,按下 [啟動] 按鈕,開始執行硬碟機開機的模擬。

|
|
|
3.2.4 USB 開機
筆者在網路上找到一個工具軟體 UNETBOOTIN,並用這套軟體在 IBM A50 上實現 USB 開機。
不知道這樣的方式是否在每台支援 USB 開機的電腦上都適用,僅在這裡提供讀者一個實現的方法。
|
|
|
3.2.4.1 製作 USB 開機碟
USB 開機的原理是將 USB 碟模擬成軟碟機,因此需要軟碟映像檔製作 USB 開機碟。
筆者發現有時候會寫不進去,先將 USB 碟格式化,成功的機會比較高。
製作方法是,執行 UNETBOOTIN-WINDOWS-494.EXE。

在軟體的執行畫面中,執行下列步驟。
1、點選映像檔
2、點選磁片
3、選擇 C:\formosa_v2\image_floppy\floppy_os.img
4、指定 USB 磁碟機目錄
5、按確定

如果出現詢問視窗,按 YES_TO_ALL 按鈕。

|
|
|
3.2.4.2 使用 USB 碟開機
首先,確定電腦支援 USB 開機,並設定主機板的 USB 磁碟為第 1 開機順位。
將製作好的 USB 碟置入電腦的 USB 槽,開機,即可。
|
|
|
3.2.5 使用 XMODEM 執行作業系統
作業系統的開發過程必須是便利的,在不同的階段中,需要合適的工具來協助開發。
剛開始開發作業系統的過程中,使用 VISUALBOX 來開發很便利,也很準確,讓多工核心可以開發得很快速。
基本上,可以在 VISUALBOX 上可以模擬的作業系統,也都可以在實際的電腦環境中執行。
只是 VISUALBOX 畢竟是模擬器,無法完全取代電腦的硬體環境,這時候所面對的問題就是如何在實際的電腦上便利的開發作業系統。
本書提供一個方法,就是使用XMODEM 協定,透過串列埠一下載作業系統到電腦上執行。
目前 XMODEM 使用 9600 鮑率,所以下載速度約 1 KB/SEC。
把作業系統的映像檔的體積除以 1K 就可以估計出下載的時間。這樣的方法對於開發小型作業系統來說很便利。
筆者稱這樣的方法為 XBOOT,意思是使用 XMODEM 協定的 BOOTLOADER。
如果只是想要開發多工作業系統的核心的話,不必讀懂啟動磁區,也不用管真實模式轉換成保護膜式的過程。
讀者可以直接修改 OSKERNEL2 裡面的作業系統程式碼,經過完整的編譯過程後,會產生二進位檔 OSKERNEL.BIN。
直接將此二進位檔藉由 XMODEM 上傳送到執行本作業系統的電腦上,並執行之,即可。
|
|
|
3.2.5.1 編譯作業系統映像
電腦中已經有作業系統在執行了,那下載的作業系統要放哪裡呢?
筆者目前將透過 XMODEM 下載的作業系統的執行位址設定在 0x00100000。
這個位址剛剛好越過真實模式的最高位址。筆者的規劃是 1 MBYTES 以
下的記憶體位址給本機作業系統使用,而 1 MBYTES 以上的記憶
體位址就給由 XMODEM 下載的作業系統使用。如此一來,本機作業系統
可以使用的記憶體空間約有 500 KBYTES,這樣的體積對本機作業系統來說
已經很大了,不用擔心這兩個作業系統會撞在一起的危險。
讀者可以觀察 OSKERNEL\MAKEFILE 和 OSKERNEL2\MAKEFILE 兩個 MAKEFILE 的內容不一樣的地方。
前者的 MAKEFILE 中的 ENTRYPOINT 為 0x0010400,後者的 MAKEFILE 中的 ENTRYPOINT 為 0x00100000。
透過 MAKEFILE 的描述,可以將作業系統映像編譯到不一樣的執行位址上。
讀者也可以自行更改這個執行位址,重新編譯並下載執行。
只是還要去修改一點程式碼,就是要把 XMODEM 的下載位址設定為新的執行位址,
修改的方式是打開 OSKERNEL\INCLUDE\SYSTEM\DEFINE.H ,
修改裡面的常數定義 IMAGE_ADDRESS 成新的執行位址值,重新編譯,
即可得到支援新的作業系統核心映像。
|
|
|
3.2.5.2 下載作業系統映像
遠端下載作業系統核心需要一條接在串列埠上的母對母 DSUB 9 資料傳輸線。
市面上的母對母 DSUB 9 訊號線的兩端接線方式是相同的,此時需要將一端的 TD(2) 和 RD(3) 對掉,才能在兩台電腦間傳輸資料。
所以如果買不到有跳線的 DSUB 9 訊號線,讀者可以自行焊接跳線。關於串列埠的接腳定義,請參考第 25 章 串列埠控制器。
將 DSUB 9 資料傳輸線接在兩台電腦的串列埠上,接著就可以進行作業系統的下載程序。
使用 XMODEM 下載作業系統,分幾個步驟進行:
步驟 | 說明 |
1 |
在 WINDOWS XP 的環境下執行超級終端機,建立新的連線,並將新的連線命名為 XMODEM,再選定使用連線為 COM1,再選定鮑率為 9600。
接下來在連接埠設定中,將資料位元選定為 8,同位元檢查選定為無,停止位元選定為 1,流量控制選定為無。
完成上述的設定之後,超級終端機就可以和執行本作業系統的電腦連線了。
|
2 |
將本作業系統啟動,直等到命令列出現時,鍵入 xmodem (必須小寫),並按 ENTER。
之後,作業系統就會執行 XMODEM 的程式,並且向 WINDOWS XP 電腦傳送信號 'C'。
|
3 |
回到 WINDOWS XP 的超級終端機,到[轉送]的目錄上,執行傳送檔案。
將傳送檔案的通信協定選定為 XMODEM ,檔案名稱選為 OSKERNEL2\OSKERNEL.BIN,按下 [傳送] 按鈕,執行檔案傳送。
傳送完成後,本作業系統會在螢幕上顯示傳送完成的相關資訊。
|
4 |
完成 XMODEM 的傳輸後,鍵入 run (必須小寫),按 [ENTER],然後電腦就會執行剛剛傳過來的作業系統了。
筆者把 這個作業系統的執行位址設定為 0x00100000,而原本的作業系統執行位址是 0x00010400 ,希望讀者明白它們的差異。
|
|
|
|
3.2.5.2.1 建立新的連線
在 WINDOWS XP 的環境下執行超級終端機,建立新的連線,並將新的連線命名為 XMODEM9600。
|
|
|
3.2.5.2.2 連線使用 COM1
設定連線使用的串列埠為 COM1。
|
|
|
3.2.5.2.3 設定 COM1 參數
設定鮑率為 9600,資料位元數為 8 位元,同位元檢查為無,停止位元為 1,流量控制為無。
|
|
|
3.2.5.2.4 傳送作業系統核心
將本作業系統啟動,等到命令列出現時,鍵入 xmodem (必須小寫),並按 ENTER。
在 WINDOWS XP 的超級終端機上,進入 [轉送] 目錄,執行傳送檔案。
將傳送檔案的通信協定選定為 XMODEM ,檔案名稱選為 OSKERNEL2\OSKERNEL.BIN,按下 [傳送] 按鈕,執行檔案傳送。
傳送的訊息視窗會顯示傳送的封包數。
|
|
|
3.2.5.2.5 傳送完成畫面
傳送完成後,本作業系統會在螢幕上顯示完成訊息。
01 | 執行 xmodem 指令。 |
02~05 | 執行完畢的訊息。 |
02 | 所有封包數目 0x200 個封包。 |
03 | 所有資料數目 0x10000 位元組。 |
04 | 記憶體位址指標值 0x110000。 |
|
|
|
3.2.5.3 執行作業系統
傳送完畢,在本作業系統的命令列上鍵入 run 指令,執行從 XMODEM 上傳的作業系統。
另一個作業系統的執行畫面:
|
|
|
3.3 安裝作業系統
為了在硬碟上執行本作業系統,必須經過一個安裝過程。這個安裝過程可以使用軟碟機安裝
,也可以使用光碟機安裝。無論使用哪一種安裝方式,安裝完成的畫面都是一樣的。
筆者直接取用 VISUALBOX 的虛擬硬碟安裝畫面,因為實際上的硬碟安裝畫面也是如此。
作業系統安裝完成畫面。
|
|
|
3.3.1 軟碟機安裝
使用軟碟機安裝的方式是使用 RWWRTWIN.EXE 把 IMAGE_INSTALL\INSTALL_OS.IMG 寫到軟碟
片,再置入要安裝作業系統的電腦的軟碟機槽中,並設定 BIOS 為軟碟機開機,再重新開機後,作業
系統就會從軟碟機安裝到硬碟機中了。
|
|
|
3.3.2 光碟機安裝
使用光碟機的安裝方式是把 IMAGE_INSTALL\CDROM.ISO 燒寫至光碟片中,再將光碟片置入
要安裝作業系統的電腦光碟機中,並設定 BIOS 為光碟機開機,再重新開機後,作業系統就從光碟機
安裝到硬碟機中了。
|
|
|