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


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

首先是平台的搭建問題,首先因本人編程一般都是在自己破舊的筆記本上進行,因此也就選取了主流的win7作為開發系統,平台及其他開發工具如下:

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

2)匯編編譯器:NASM-2.11.06

3)虛擬機:Bochs-2.6.7

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

1.安裝工具

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

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虛擬軟盤鏡像

 


免責聲明!

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



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