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


  借着本來現在就在上操作系統內核課的機會,在圖書館借了本於淵的《自己動手寫操作系統》,准備自己親自動手寫一下,提高自己對操作系統的理解。開篇技術博客來記錄一下自己的學習歷程。小弟第一次寫博客,有什么不到的地方還請大家海涵。

  自己選擇的平台是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
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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM