開發環境搭建
硬件
計算機(Windows 7 操作系統)
軟件
VMware虛擬機(裝有Linux系統:Ubuntu9.10)
FloppyWriter.exe軟盤絕對扇區讀寫工具(能把 .bin文件寫到真實軟盤或虛擬軟盤中)(書中配套帶的)。
bochs(x86模擬器)(用它來運行自己寫的操作系統)(官網下載,版本2.9.6)。
nasm編譯器(把彙編文件編譯爲二進制文件)(安裝再ubuntu中)(sudo apt-get install nasm)。
FileZilla文件傳輸工具(用於Windows主機和虛擬機之間文件的傳輸)。
編寫第一個操作系統
步驟1. 編寫彙編文件
這個操作系統僅有一個彙編文件,文件中僅有10幾行代碼。文件名爲 boot.asm。
在Windows中新建一個文本文件,後綴改爲.asm,文件名改爲boot。寫入下面的程序,那麼源程序就寫好了。
org 07c00h ; 告訴編譯器程序加載到7c00處
mov ax, cs
mov ds, ax
mov es, ax
call DispStr ; 調用顯示字符串例程
jmp $ ; 無限循環
DispStr:
mov ax, BootMessage
mov bp, ax ; ES:BP = 串地址
mov cx, 16 ; CX = 串長度
mov ax, 01301h ; AH = 13, AL = 01h
mov bx, 000ch ; 頁號爲0(BH = 0) 黑底紅字(BL = 0Ch,高亮)
mov dl, 0
int 10h ; 10h 號中斷
ret
BootMessage: db "Hello, OS world!"
times 510-($-$$) db 0 ; 填充剩下的空間,使生成的二進制代碼恰好爲512字節
dw 0xaa55 ; 結束標誌
步驟2. 編譯成可執行文件
編譯用到 Linux 下的 nasm 編譯器。
用 FileZilla 把編寫好的 boot.asm 文件傳輸到 Ubuntu 中。
Ubuntu中安裝nasm
sudo apt-get install nasm
在boot.asm所在的目錄編譯源程序。
nasm boot.asm -o boot.bin
至此,生成了 boot.bin 文件。
步驟3. 製作虛擬軟盤映像文件
方案一:直接使用書中提供的TINIX.IMG,這是已經制作好的映像文件,大小1440k。
方案二:在bochs的安裝目錄中,找到 bximage.exe。
雙擊打開,按步驟依次輸入 1、 fd 、軟盤映像的文件名,回車,回車。如圖所示。
至此,按照方法一可以直接使用TINIX.IMG虛擬軟盤映像文件。方法二可以生成自己命名的虛擬軟盤映像文件。
步驟4. 往軟盤裏寫入操作系統
雖然是虛擬軟盤,但也是要實現軟盤的功能,就是存放操作系統的可執行文件。
這步的目的:就是把
方案一:使用書中配套的FloppyWriter.exe軟盤絕對扇區讀寫工具。
點擊 Write File to Image:這是往虛擬軟盤映像裏寫文件。write file to Floopy是往真實軟盤裏寫文件。
選擇要寫入的文件(就是步驟2 生成的可執行文件),點“打開”。
然後選擇虛擬軟盤映像文件(就是把操作系統寫入到這個映像文件裏)。
最後,
方案二:在 Linux 環境下,把操作系統文件寫入軟盤映像。
首先把 boot.bin 和 myOS.img文件放在同一目錄下。
然後執行
dd if=boot.bin of=myOS.img bs=512 count=1 conv=notrunc
一行命令,全部搞定。
至此,已經把操作系統寫入到虛擬軟盤中了。(就類似於做好了啓動盤)
步驟5. 在虛擬機或模擬器中安裝操作系統
做好的操作系統要在計算機中跑起來,可以放在真實的計算機中,但是很麻煩,而且不利於調試,一般放在虛擬機中或者模擬器中,下面介紹兩種方法。
方案一:在虛擬機中安裝操作系統 (VMware中)
創建新的虛擬機
稍後自己安裝系統
命名和選擇路徑
然後找到虛擬機設置:
添加軟盤
還有一步選擇軟盤映像文件,忘記了截圖……。
最後,開啓虛擬機。
最終開啓後,顯示爲
至此,在虛擬機中安裝自制操作系統已完成。
方案二:在模擬器中安裝操作系統 (x86模擬器 bochs )
我是在官網安裝的bochs 2.9.6。安裝時最好勾選 DLX Linux Demo。
打開 bochs 的安裝目錄,找到 bochsrc.bxrc配置文件。(可能不存在,那就新建一個空白的)。
bochsrc.bxrc的內容改爲:
仔細觀察,發現 myOS.img就是映像文件的名字。
#how much memory the emulated machine will have
megs:4
#filename of ROM images
romimage:file=BIOS-bochs-latest,address=Oxf0000
vgaromimage:file=VGABIOS-elpin-2.40
#what disk images will be used
floppya:1_44=myOS.img,status=inserted
#Choose the boot disk
boot:a
#where do we send log messages?
log:bochsout.txt
設置好配置文件後,把myOS.img文件(與配置文件中對應)放在和配置文件同一個目錄下,雙擊 配置文件 bochsrc.bxrc。
就會看到如下圖。
至此,操作系統就在模擬器中跑了起來。
總結
我們總共分了 5 個步驟,完成了一個很小很小的操作系統,並且在虛擬機或模擬器中運行了起來。
好幾個步驟提供了多種方法。
其中第三步,製作虛擬軟盤映像,以後不用每次都重複製作,用這一個就可以了,直接往裏寫可執行文件。
- 編寫彙編文件
- nasm生成可執行文件
- 製作虛擬軟盤映像文件
- 把執行文件寫到映像文件
- 把操作系統在虛擬機或模擬器中運行起來。