我以前看一本書,名叫 30天自制操作系統;大概翻了一下,感覺也不是太難;因爲比如,它有一整章在講,C語言指針、C語言畫一個矩形;你要是熟悉C語言的話,指針肯定理解;在沒有窗口的情況下,用Turbo C 2.0畫一個矩形也不是什麼難事;
後來有一天準備照書實踐一下,仔細看了一下,原來問題不是一般的多;首先一個,不能用寫應用程序的C語言去寫一個操作系統;因爲C本身很多功能依賴於操作系統,你去寫一個操作系統的時候這個時候還沒有操作系統,像C最常用的printf函數這個時候是不能用的;如果硬要運行此類C功能,會導致保護性錯誤,CPU罷工。
原作者的意思是,不管你用C或C++來寫一個操作系統,如果你不能理解C或C++是如何轉換爲彙編語言的,你是無法寫出一個操作系統的;他肯定是對的。
原來原作者是自己從gcc改裝了一個C編譯器來,然後還附帶了一堆工具;才能把代碼構建爲可運行的操作系統代碼。
下面按原書附帶的工具,來構建它的第一個C程序;他提供的編譯器名爲cc1.exe;就是把他提供的東西拷貝到一個單獨的目錄執行了看;
一共有6個步驟把一個C語言程序構建爲操作系統可用的代碼;
1 使用cc1.exe從bootpack.c生成bootpack.gas;
2 使用gas2nask.exe從bootpack.gas生成bootpack.nas;
3 使用nask.exe從bootpack.nas生成bootpack.obj;
4 使用obi2bim.exe從bootpack.obj生成bootpack.bim;
5 使用bim2hrb.exe從bootpack.bim生成bootpack.hrb;
到此做成了機器語言;那麼書中的彙編程序是nasm語法的;
然後使用copy命令將asmhead.bin與bootpack.hrb結合起來,做成haribote.sys;
步驟1
cc1.exe沒有幫助的,但它應該是gcc的語法;操作了幾次,把.gas做出來;.gas就是彙編代碼了;
步驟2,生成.nas;
步驟3,生成.obj;
拷過來它的一個工具,執行一步操作;到此沒有錯;
步驟4,生成.bim;
一直出錯;此步要鏈接一些C庫;是在原書附帶的光盤;
把這些C頭文件和庫拷到操作的臨時目錄;還是不能構建出.bim文件;它還有一個規則文件.rul;
到此就不能執行;必須按作者提供的光盤內容的目錄結構,以及makefile文件,才能構建代碼;自己拷工具和代碼文件到單獨目錄構建的話需要自己寫makefile和規則文件;下回再搞;