借着本來現在就在上操作系統內核課的機會,在圖書館借了本於淵的《自己動手寫操作系統》,准備自己親自動手寫一下,提高自己對操作系統的理解。開篇技術博客來記錄一下自己的學習歷程。小弟第一次寫博客,有什么不到的地方還請大家海涵。
自己選擇的平台是Ubuntu14和Bochs。具體的Bochs的安裝教程見os.51cto.com/art/201407/446838_all.htm,這里就不做具體的介紹。
第一個程序當然是hello world這個經典的入門程序,不過這次是使用匯編語言來編寫的一個bootloader級別的hello world,根據自己的操作流程,我把自己大體的步驟說一下,以便大家有一個清晰的認識:
一、安裝bochs。
二、進入bochs的安裝目錄使用“./bximage”命令制作一張空的軟盤。
三、在自己的工程目錄下寫自己的源文件(boot.asm),並使用下面命令將源文件進行編譯得到鏡像。nasm boot.asm -o boot.bin
四、將第三部制作的軟盤a.img(默認名字)拷貝到當前工程目錄下。
五、寫入系統鏡像。 dd if=你的鏡像路徑(即編譯得到的boot.bin的路徑) of=a.img
六、寫自己的配置文件(bochsrc)。
七、按照自己的配置文件執行bochs。 bochs -f bochsrc
完成之后的工程目錄里面應該有一下的幾個文件:
下面是執行完第七步的操作之后的界面
c
直接按ENTER,會出現下面界面,黑乎乎的,什么也沒有
但是在終端中輸入C就會正確的顯示出我們想要的東西了
下面將上述操作中所涉及到的源文件代碼貼出來,以便大家可以自己輕松的在自己的機子上輕松的演示;
下面是我的Bochs配置文件,bochsrc

1 ############################################################### 2 # Configuration file for Bochs 3 ############################################################### 4 5 # how much memory the emulated machine will have 6 megs: 32 7 8 # filename of ROM images 9 romimage: file=/usr/share/bochs/BIOS-bochs-latest 10 vgaromimage: file=/usr/share/vgabios/vgabios.bin 11 12 # what disk images will be used 13 floppya: 1_44=a.img, status=inserted 14 15 # choose the boot disk. 16 boot: floppy 17 18 # where do we send log messages? 19 # log: bochsout.txt 20 21 # disable the mouse 22 mouse: enabled=0 23 24 # enable key mapping, using US layout as default. 25 #keyboard_mapping: enabled=1, map=/usr/share/bochs/keymaps/x11-pc-us.map
boot.asm的源碼內容

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 ; 將DL中的ASCII碼顯示到屏幕,將'\0'送到DL中,並顯示 int 10h ; 10h 號中斷 ret ; 返回到調用處 BootMessage: db "Hello, OS world!" times 510-($-$$) db 0 ; 填充剩下的空間,使生成的二進制代碼恰好為512字節 dw 0xaa55 ; 結束標志
這次就到這里,主要是介紹一下環境以及有一個直觀的認識。以后的內容應該更主要的是代碼方面的內容了。