熱點推薦:
您现在的位置: 電腦知識網 >> 電腦常識 >> 正文

高手揭密開發簡單“操作系統”全過程

2013-11-11 13:58:19  來源: 電腦常識 

  [什麼?]

  很多文章中把寫一個引導程序稱作是開發一個最簡單的操作系統其實這是非常片面的引導程序算不上操作系統雖然此程序可以運行在裸機上所謂引導程序直觀的說就是在系統加電啟動時BIOS第一個執行的程序

  引導程序要想發揮作用讓機器識別就必須安置在一個特別的位置這個位置就是磁盤的第一個扇區(磁道扇區備注沒有扇區)而一個包含引導程序的扇區叫作引導扇區

  一個合法的引導扇區()通常包含個字節(當然喽一個扇區通常本來就是個字節))並且以xAA這樣一個占用兩個字節的數據結尾作為標志符(備注x前綴說明這是一個十六進制數)

  也就是如果把引導扇區看成一個字符數組的BootSector[]話(因為一個字符即char剛好為一個字節)那麼這個數組就擁有個元素如果用C語言申明的話即為
  char BootSector[];

  接著一個合法的引導扇區必須以xAA結束
  BootSector[] = x;
  BootSector[] = xAA;

  除了結束標志必須符合上面的要求之外中間雖然還有字節的空間但執行代碼可以少於字節用無意義字符(通常用x)填充剩余空間即可

  [過程]

  PC是通過BIOS來啟動機器的當PC機加電之後BIOS啟動相應的程序完成機器的自檢然後就尋找可以引導的驅動器即大家通常所說的啟動盤在 BIOS中可以設置從哪個盤啟動但通常總要檢查硬盤所以當BIOS檢查完前面的啟動設備之後如果沒有發現任何引導程序那麼就會開始檢查主硬盤即 C盤如果此時在C盤上找到了合法的引導扇區那麼就會將引導扇區的內容(共字節)裝載到內存x:C此時BIOS把控制權限交給這段引導程序

  那麼接下來引導程序通常會簡單的執行一些指令比如輸出一段文字顯示一個啟動界面等等但最重要的引導程序將會啟動一個更大的程序然後把權限交給他這通常就是我們所說的操作系統內核額外補充一句目前對操作系統的定義有不少但筆者比較贊成的觀點如下

  從形式上看操作系統是從計算機啟動到結束的過程中始終在運行的程序而這通常就是我們所說的操作系統內核從功能上看操作系統管理和維護所有的硬件軟件數據資源並為上層應用或服務提供一個抽象的接口從某種層面上看第二中定義更接近於虛擬機(閒話一段^_^)

  [如何]

  現在已經了解了這些基本的概念那麼如何動手制作這樣的引導扇區呢?這個過程十分簡單

  ()首先按照要求寫一個合法的引導程序(通常用匯編機器碼也可以呵呵)
  ()然後將其通過匯編程序如NASM匯編成二進制文件
  ()最後將這個二進制文件寫入到目標盤的第一個扇區

  跟我做:P]

  上面說的很簡單吧?那好現在我們來寫一個吧!

  第一步寫代碼

  ; 文件名bootasm
  ; 代碼如下注意匯編中通常用;來表示注釋內容
  ; 此段代碼參考《自己動手寫操作系統》(於淵)
  ;
  ; 初始化函數
  org ch              ; 告訴編譯器將此段程序加載
                        ; 到內存x:C
  mov ax cs
  mov ds ax
  mov es ax
  call PrintStr           ; 調用屏幕打印函數
  jmp $                   ; 無限循環

  PrintStr:               ; 屏幕打印函數
  mov ax HelloWorld      ; 將字符串拷貝到ax
  mov bp ax              ; es:bp = 串地址
  mov cx               ; cx = 串長度
  mov ax h          ; ah = al = h
  mov bx ch           ; 頁號為(bh = ) 黑底紅字(bl = ch高亮)
  mov dl
  int h                 ; h號中斷
  ret

  HelloWorld: db Welcome to Lees OS *_* ; 字符串負值
  times ($$$) db   ; 用x填充剩余的空間使生成
                          ; 的二進制代碼剛好為字節

  dw xaa               ; 結束標志
  ; 整個程序結束!很短吧

  第二步匯編

  假設你已經安裝了NASM程序那麼進入命令行模式然後輸入以下命令

  C:[PATH]\ nasm bootasm o bootbin
  其中C:[PATH]\為bootasm代碼文件所在位置
  現在如果不出意外的話你已經擁有了bootbin二進制文件這個就是引導程序!

  第三步制作引導盤

  由於不能隨便更改硬盤否則系統無法進入原來的操作系統所以我們用軟盤來試驗

  那麼我們准備一張軟盤

  現在我們要自己寫一個程序將我們匯編得到的二進制文件寫到軟盤的第一個扇區
  C語言程序代碼如下

  /***************START***************/
  #include
  #include

  int main(void)
  {
    FILE *in;
    unsigned char buffer[];
  
    if((in = fopen(bootbin rb))==NULL)
    {
        printf(Error loading file\n);
        exit();
    }

  fread(&buffer in);
    while(biosdisk( buffer));
    fclose(in);

  return ;
  }
  /****************END****************/

  注意這個程序必須同bootbin文件在同一目錄下然後將軟盤放進軟驅運行此程序

  第四步GOGOGO

  好了現在你擁有了一張從頭到尾完全自制的引導盤由於有了她你想運行你的電腦再也不需要微軟插手了而且這很可能是你第一次能在裸機上運行一個自己的程序哦哈哈!

  重新啟動你的機器記得把軟盤放進去現在你看見什麼了?

  一行醒目的紅字

  Welcome to Lees OS *_*

  打印在屏幕上!


From:http://tw.wingwit.com/Article/Common/201311/4896.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.