以前在大學時,在上作業系統的課程,發現老師只會在課本紙上談兵,並沒有任何的實務操作,然而學習作業系統是必須要撰寫程式才能習得它的精隨所在,像是GDT (Global Descriptor Table)、IDT (Interrupt Descriptor Table)、Paging和Multitasking,這些都是要透過撰寫程式,然後了解它的運作,不然很難真正的體會作業系統厲害之處,其中想要開始撰寫自己的作業系統的同學,我在這邊推薦一款免費又好用的模擬器bochs,安裝和設置都很簡易,這樣能輕易就將自己寫的程式運行在bochs模擬器。
安裝環境
1. Ubuntu 16.04 x64
2. nasm 2.11.08
3. Bochs 2.6.9
一、安裝bochs
安裝bochs需要的配件
1. apt-get install build-essential xorg-dev libgtk2.0-dev bochs-x
解壓縮bochs
2. tar xzfv bochs-2.6.9.tar.gz
進入解壓縮後的資料夾
3. cd bochs-2.6.9
讓bochs俱備Debugger功能
4. ./configure --enable-debugger --enable-disasm
安裝bochs
5. make && make install
二、設置bochs的配置檔bochsrc
設置記憶體為32MB
megs: 32
設置ROM images
romimage: file=/home/bochs/bochs-2.6.9/bios/BIOS-bochs-latest
vgaromimage: file=/home/bochs/bochs-2.6.9/bios/VGABIOS-lgpl-latest
這是啟動磁盤的設置,bootload將會給BIOS載入
floppya: 1_44="bootload", status=inserted
啟動方式為磁盤
boot: floppy
輸出log的檔案
log: bochsout.txt
關閉mouse功能
mouse: enabled=0
三、撰寫bootload
org 0x07c00
; 清除螢幕上的字串
mov al, 0x02
mov ah, 0x00
int 0x10
; 寫入字串到螢幕上
mov ax, msg
mov bp, ax
mov cx, 12
mov ax, 0x01301
mov bx, 0x000c
mov dl, 0
int 0x10
hlt
msg: db "Write own OS"
times 510-($-$$) db 0
dw 0xaa55
寫完程式碼後再編譯它
nasm bootload.asm –o bootload
四、運行結果
./bochs -f bochsrc
我們在配置時有設定Debug模式,因此要按c,bochs模擬器才會繼續運行我們的bootload程式,這裡要注意一下,bochs的輸出是需要有介面支援的環境,不然會跳出Message: Cannot connect to X display錯誤。