1. 程式人生 > >自己動手寫作業系統(一)

自己動手寫作業系統(一)

從去年就想好好的讀一下這本書,跟著書上做一下,但是給耽擱了,現在就好好的開始探索這麼書吧!

雖然我很想在這裡吹一段這本書有多麼的厲害,但是!我第一章都沒有看完,吹不了!!!等我讀的個七七八八再回來吹吧。

我是在搜尋嵌入式的學習路線中發現的這本書,當時他們說這本書很有趣,操作能力強,對作業系統的理解很有幫助,於是上網準備買一本。然鵝,它已經絕版了。好在圖書館可以借到,破費一番周折之後,終於弄到了這本書。這本書的作者很有趣,他所提出的在實踐中學習很值得我們學習。

囉嗦了這麼多,下面開始對這本書的第一章開始進行總結。

首先介紹一下我使用的環境: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就能跑起來了,這和我們以往的程式設計是不同的,它是在裸機上面執行的,不依賴任何軟體!