自己動手寫作業系統(一)
從去年就想好好的讀一下這本書,跟著書上做一下,但是給耽擱了,現在就好好的開始探索這麼書吧!
雖然我很想在這裡吹一段這本書有多麼的厲害,但是!我第一章都沒有看完,吹不了!!!等我讀的個七七八八再回來吹吧。
我是在搜尋嵌入式的學習路線中發現的這本書,當時他們說這本書很有趣,操作能力強,對作業系統的理解很有幫助,於是上網準備買一本。然鵝,它已經絕版了。好在圖書館可以借到,破費一番周折之後,終於弄到了這本書。這本書的作者很有趣,他所提出的在實踐中學習很值得我們學習。
囉嗦了這麼多,下面開始對這本書的第一章開始進行總結。
首先介紹一下我使用的環境:VMware + ubuntu,版本分別是10.0.1/14.04(ubuntu版本檢視方式 cat /stc/issue)
翻開書的第一章,WTF???第一個要求就是準備一張軟盤?軟盤是我們計算機基礎老師用來憶苦思甜的玩意兒了好嗎?我去哪裡弄塊軟盤來?有問題問度娘,發現這個問題很好解決嘛,用虛擬機器就不沒事了,虛擬軟盤嘛。但是操作方法嘛,我這裡提供一種在linux系統內實現的方法。
使用下列工具,就可以實現軟盤引導。
1.dd:在指定大小內對一個檔案進行拷貝,並在拷貝的同時進行指定的轉換。
http://www.cnblogs.com/dkblog/archive/2009/09/18/1980715.html
這個連結對dd進行了詳細的講解。
2.nasm:彙編的編譯工具,可以生成.bin檔案。
3.qemu:通過閱讀一些大牛的部落格,我現在將它大致理解為虛擬機器。
http://www.cnblogs.com/youxia/p/linux019.html
這個連結對qemu進行了概述。
好了,既然環境、工具都準備好了,那我們便開始編寫Helloworld吧!
1.編寫Helleworld的程式碼
1.1.建立asm檔案
vi boot.asm
1.2.編寫boot.asm檔案
org 07c00h
mov ax,cs
mov ds,ax
mov es,ax
call DispStr
jmp $
DispStr:
mov ax,BootMessage
mov bp,ax
mov cx,16
mov ax,01301h
mov bx,000ch
mov dl,0
int 10h
ret
BootMessage: db "Hello,OS world!"
times 510-($-$$) db 0
dw 0xaa55
1.3.編寫boot.asm檔案並生成boot.bin檔案
nasm boot.asm -o boot.bin
1.4.生成boot.img映象檔案
dd conv=sync if=boot.bin of=boot.img bs=1440k count=1
1.5.將helloworld跑起來
qemu-system-x86_64 -fda boot.img -boot a -m 64 -localtime
好了,這樣helloworld就能跑起來了,這和我們以往的程式設計是不同的,它是在裸機上面執行的,不依賴任何軟體!