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