《Orange'S:一個操做系統的實現》筆記(一)

感受本身對於操做系統始終沒有一個清楚的概念,尤爲最近困擾於實模式、保護模式以及尋址方式等一些概念。轉而一想,全部的程序,最終都是操做的計算機資源,須要和操做系統打交道,因此操做系統有必要深刻了解一下。最終想要本身動手編寫一個簡單的版本,上網查。網友對於於淵的《Orange'S:一個操做系統的實現》和《30天自制操做系統》評價挺高的,先選《orange》爲學習手冊、《30》爲參考手冊,開始本身的操做系統之旅。html

首先是平臺的搭建問題,首先因本人編程通常都是在本身破舊的筆記本上進行,所以也就選取了主流的win7做爲開發系統,平臺及其餘開發工具以下:linux

1)系統:win7(32位,安裝cygwin-b20)編程

2)彙編編譯器:NASM-2.11.06segmentfault

3)虛擬機:Bochs-2.6.7app

對於做者所說的,win下要使用諸如rawrite之類的小工具來將編譯好的boot.bin寫入a.img中,本人作過嘗試,始終沒有成功,後查詢,說rawrite要運行在DOS系統下,win下不能夠,對於不知DOS爲什麼物,果斷放棄這種方案。下面記錄本人的一些步驟,主要是操做時遇到的難點。工具

1.安裝工具oop

主要是在安裝bochs的時候,選上安裝dlxlinux demo,後續對其進行參考。post

2.boot.asm學習

 1     org 07c00h    ; where the code will be running
 2     mov    ax, cs
 3     mov    ds, ax
 4     mov    es, ax
 5     call    DispStr ; let's display a string
 6     jmp    $ ; and loop forever
 7 DispStr:
 8     mov    ax, BootMessage
 9     mov    bp, ax    ; ES:BP = string address
10     mov    cx, 16    ; CX = string length
11     mov    ax, 01301h    ; AH = 13, AL = 01h
12     mov    bx, 000ch    ; RED/BLACK
13     mov    dl, 0
14     int    10h
15     ret
16 BootMessage: db    "Hello, OS world!"
17 times 510-($-$$) db    0    ; fill zeros to make it exactly 512 bytes
18 dw 0xaa55    ; boot record signature

3.編譯開發工具

1 nasm boot.asm -o boot.bin

想要操做方便的話,建議在環境變量的path中添加nasm的絕對路徑,也比較簡單。

4.建立軟盤映像

在bochs的安裝目錄下運行bximage便可,具體操做以下。

生成的a.img以下(notepad++打開):

5.將引導區寫入磁盤

首先將boot.bin移到a.img所在目錄(純屬方便操做)。

如前文所說,本人使用的是win7系統,嘗試使用rawrite無果。想到筆記本安裝cygwin,便嘗試使用適合於linux的語句操做。

1 dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc

結果,打開a.img發現。。。

寫入了。。。

6.爲新建系統添加文件夾

參考bochs安裝目錄中dlxlinux系統,爲要新建的系統添加文件夾,並將a.img移入其中,如圖

7.添加配置文件

複製dlxlinux文件夾中的bochsrc.bxrc文件至orangeOS中,參考書中的配置進行修改

###############################################################
# bochsrc.txt file for DLX Linux disk image.
###############################################################

# how much memory the emulated machine will have
megs: 32

# filename of ROM images
romimage: file=../BIOS-bochs-latest
vgaromimage: file=../VGABIOS-lgpl-latest

# what disk images will be used 
floppya: 1_44=a.img, status=inserted

# choose the boot disk.
boot: floppy

# where do we send log messages?
log: bochsout.txt

# disable the mouse, since DLX is text only
mouse: enabled=0

# enable key mapping, using US layout as default.

keyboard: keymap=../keymaps/x11-pc-us.map

8.啓動新系統

啓動cmd窗口,切換至bochs安裝根目錄下(即bximag.exe所在目錄),執行命令

1 bochs -f orangeOS/bochsrc

一系列的報錯。。。

加上文件類型

1 bochs -f orangeOS/bochsrc.bxrc

濤聲依舊。。。不解。。。

仍是參考blxlinux的配置,賦值其run.bat腳本,修改之

1 cd "D:\Program Files\Bochs-2.6.7\orangeOS"
2 ..\bochs -q -f bochsrc.bxrc

最後運行run.bat

整個世界都安靜了。。。

小結:

仍是有不少問題不懂

1)彙編語言(徹底的門外漢)

2)bochs也是尚待深刻

3)看網上有的直接使用nasm將boot.asm編譯爲boot.img

一些感受不錯的博文

1)用vmware運行簡單的引導代碼

2)寫入img虛擬軟盤鏡像

相關文章
相關標籤/搜索