藉着原本如今就在上操做系統內核課的機會,在圖書館借了本於淵的《本身動手寫操做系統》,準備本身親自動手寫一下,提升本身對操做系統的理解。開篇技術博客來記錄一下本身的學習歷程。小弟第一次寫博客,有什麼不到的地方還請你們海涵。ios
本身選擇的平臺是Ubuntu14和Bochs。具體的Bochs的安裝教程見os.51cto.com/art/201407/446838_all.htm,這裏就不作具體的介紹。app
第一個程序固然是hello world這個經典的入門程序,不過此次是使用匯編語言來編寫的一個bootloader級別的hello world,根據本身的操做流程,我把本身大致的步驟說一下,以便你們有一個清晰的認識:ide
1、安裝bochs。學習
2、進入bochs的安裝目錄使用「./bximage」命令製做一張空的軟盤。spa
3、在本身的工程目錄下寫本身的源文件(boot.asm),並使用下面命令將源文件進行編譯獲得鏡像。nasm boot.asm -o boot.bin操作系統
4、將第三部製做的軟盤a.img(默認名字)拷貝到當前工程目錄下。code
5、寫入系統鏡像。 dd if=你的鏡像路徑(即編譯獲得的boot.bin的路徑) of=a.imghtm
6、寫本身的配置文件(bochsrc)。blog
7、按照本身的配置文件執行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
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 ; 結束標誌
此次就到這裏,主要是介紹一下環境以及有一個直觀的認識。之後的內容應該更主要的是代碼方面的內容了。