這是來自bona fide的OS developer的教學資料Suggestions for Making Your OS,ㄚ琪最近就來翻譯這些資料,等到想到自己的OS要有什麼東西,再跳出來!
1. 使用linker指令碼。
我在用我的核心有很多的麻煩直到我使用linker指令碼,基本上,linker指令碼可以保證你的核心可以在連結時有正確的順序(text,data,bss),這裡有一個核心在0xFF80000載入的linker指令碼範例 (John Fine的 bootf2.zip bootsector也是這樣做),注意這個linkere指令碼是給LD用的:
kernel.lnk
OUTPUT_FORMAT("binary") ENTRY(start) SECTIONS { .text 0xFF800000 : { *(.text) } .data : { *(.data) } .bss : { *(.bss) } }
然後連結像這樣:
ld -T kernel.lnk kernel.o
註:這個linker是指GNU的ld
2. 在ASM裡建構一個 “樣板(boiler plate)”檔案來執行核心.
我建議假如你的核心是用C寫的,那你從ASM檔來執行你的”kernel main”函式可以像這樣(假設PMode):
kernel_asm.asm
[bits 32] ; hey, we're in PMode [global start] [extern _kernel_main] ; always add a "_" in front of a C function to call it start: call _kernel_main jmp $ ; halt
kernel_c.c
kernel_main() { k_init(); k_sayhello(); ... };
那樣就可以將兩個檔案一起連結。
3. 使用模擬器這樣你就不必常常重新開機。
一次又一次地重開機是很慢的,會降低電腦的生命週期,而且電腦不會簡單地告訴你你的程式碼有什麼問題會造成第三者的例外或是一般保護模式的錯誤或是其他的,像是Bochs的模擬器就可以解決這些問題。
4. 備份你的程式碼。
備份你的程式碼不論你做了一個很大的改變(或稍微大)的改變,這有多種用途,首先,假手你搞砸了很多事情的話,要’回復’你的原始碼很容易,第二,你可以使用你的備份來證明你自己打造你的OS假如因為某些原因有某些人聲稱你偷了他們的程式碼修改的時候,就可以派上用場,當然你也應該備份你的程式碼在不同的電腦上或ZIP磁碟機或是CD裡,當你的硬碟壞了時可以回復。
5.當碰到一個討厭的錯誤感到挫折或是不知道什麼東西時,尋求幫助。
這就是為什麼OS開發論壇存在的原因,Mega-tokyo.com OS dev forum 是問OS開發的問題跟尋求幫助修正程式中錯誤的了不起的地方,你也可以email給我一個問題,雖然因為我每天要收很多的email以及我的行程很忙碌,我可能沒辦法儘快答覆,但要記住,沒有問題是太笨的。
6. 專注在你的核心,而不是華麗的圖形。
所以很多人想要有華麗的圖形, 在你的核心成熟或是完成前先等等再來圖形吧!為什麼?因為圖形程式設計(特別是SVGA)比撰寫核心還要難上加難。
7. 瞭解你寫的程式。
令人驚訝的是這個似乎很明顯的見意並不是許多玩OS的人會去遵守的,你必須瞭解你寫的程式碼,不要借用你不懂的程式,假如你不瞭解程式做什麼,你就會常常碰到討厭的錯誤,而你卻很難去修正它,假如你知道程式碼如何運作,並且瞭解它,修正錯誤就會較容易。
8. 玩得開心。
就像任何種的程式設計那樣,假如你喜歡你應該就是一個OS的開發者,就這麼簡單,不要希望有一天你可以賺錢而這樣做,如果你不愛做,並樂在其中,更有可能沒有,你最終將獲得一個垃圾的作業系統…假如你沒有先放棄的話,事實上,良好的OS開發者在那裡愛OS開發,他們樂在其中,因為他們喜歡它。
Written by K.J. 2002. Updated 2002.11.20 and 2003.7.22 by K.J.
ㄚ琪2010/08/06翻譯