本身動手寫操做系統(一)

  藉着原本如今就在上操做系統內核課的機會,在圖書館借了本於淵的《本身動手寫操做系統》,準備本身親自動手寫一下,提升本身對操做系統的理解。開篇技術博客來記錄一下本身的學習歷程。小弟第一次寫博客,有什麼不到的地方還請你們海涵。ios

  本身選擇的平臺是Ubuntu14和Bochs。具體的Bochs的安裝教程見os.51cto.com/art/201407/446838_all.htm,這裏就不作具體的介紹。app

  第一個程序固然是hello world這個經典的入門程序,不過此次是使用匯編語言來編寫的一個bootloader級別的hello world,根據本身的操做流程,我把本身大致的步驟說一下,以便你們有一個清晰的認識:ide

  1、安裝bochs。學習

  2、進入bochs的安裝目錄使用「./bximage」命令製做一張空的軟盤。spa

  3、在本身的工程目錄下寫本身的源文件(boot.asm),並使用下面命令將源文件進行編譯獲得鏡像。nasm boot.asm -o boot.bin操作系統

  4、將第三部製做的軟盤a.img(默認名字)拷貝到當前工程目錄下。code

  5、寫入系統鏡像。 dd if=你的鏡像路徑(即編譯獲得的boot.bin的路徑) of=a.imghtm

  6、寫本身的配置文件(bochsrc)。blog

  7、按照本身的配置文件執行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
View Code

  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                ; 結束標誌
View Code

  此次就到這裏,主要是介紹一下環境以及有一個直觀的認識。之後的內容應該更主要的是代碼方面的內容了。

相關文章
相關標籤/搜索