寫操作系統用的C語言和寫應用程序的C語言不是一個

    我以前看一本書,名叫 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和規則文件;下回再搞;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章