感覺自己對於操作系統始終沒有一個清楚的概念,尤其最近困擾於實模式、保護模式以及尋址方式等一些概念。轉而一想,所有的程序,最終都是操作的計算機資源,需要和操作系統打交道,所以操作系統有必要深入了解一下。最終想要自己動手編寫一個簡單的版本,上網查。網友對於於淵的《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
一些感覺不錯的博文