操做系統相關的代碼,始終仍是代碼,即確定須要相應的調試工具。html
Bochs是一種十分輕便的使用c++編寫的開源IA-32(x86)電腦模擬器,能夠運行在最受歡迎的平臺上。能仿真英特爾x86 CPU、常見的I/O設備、和定製的BIOS,支持斷點調試,調試方法和GDB很是類似。ios
如今官網下載Bochs的源碼:c++
而後將其拷貝到ubuntu下:解壓縮:tar -zxvf bochs-2.4.5.tar.gz 編程
而後執行:ubuntu
./configure --enable-debugger --enable-disasmwindows
此時可能會報錯 :app
ERROR: X windows gui was selected, but X windows libraries were not found.ide
解決辦法:工具
sudo apt install xorg-dev
可是此時可能又會出現這樣的狀況:
解決辦法:ui
先執行:sudo nano /etc/gai.conf
而後找到這行命令:#precedence ::ffff:0:0/96 100 把「#「去掉,保存退出便可。
再次執行 sudo apt install xorg-dev便可安裝成功。
而後,再運行:./configure --enable-debugger --enable-disasm
又可能出現:
Package gtk+-2.0 was not found in the pkg-config search path.Perhaps you should add the directory containing `gtk+-2.0.pc'to the PKG_CONFIG_PATH environment variableNo package 'gtk+-2.0' foundERROR: pkg-config was not found, or unable to access the gtk+-2.0 package.Install pkg-config and the gtk+ development package,or disable the gui debugger, or the wxWidgets display library (whichever is being used).
解決辦法:
sudo apt install libgtk2.0-dev
以後,再次執行./configure --enable-debugger --enable-disasm,緊接着執行make,又可能出現:

解決辦法:
在Makefile的92行增長連接庫 pthread:
而後,再make,最後sudo make install便可安裝完成。
安裝成功以後,執行bochs,選擇選項6,獲得:
如今即完成了第一階段的任務,雖然此時的bochs有發出不能打開硬件設備的錯誤信息。
主引導程序確定是使用匯編編寫的,同時微軟的.asm後綴彙編,沒法使用gcc編譯(特地查了一下,使用gcc編譯.asm文件,彷佛很棘手):
因此咱們安裝了nasm這個工具,NASM全稱The Netwide Assembler,是一款基於80x86和x86-64平臺的彙編語言編譯程序。apt install nasm 安裝便可:
而後咱們準備一份彙編代碼,boot.asm,使用nasm將其編譯成bin文件:nasm boot.asm -o boot.bin( 之因此這樣,仍是由於參考資料使用.asm後綴的彙編,可是什麼編譯器並非重點,這段boot.asm的X86彙編也不是重點,目前我主要是使用ARM 彙編,可是這個教程是X86的,也不排除以後在公司是開發X86,可是彙編只用做簡單瞭解便可,重點是先搭建好環境並調試程序,讓咱們對引導操做系統有個全局認識)。
在使用bximage(一個製做軟盤的工具)生成a.img軟盤文件:
最後,咱們須要將編譯好的二進制文件導入在軟盤中,使用dd命令,將boot.bin文件導入軟盤a.img中:
dd:用指定大小的塊拷貝一個文件,並在拷貝的同時進行指定的轉換,參考連接(點擊)
dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc 其中if表示輸入文件名, of表示輸出文件名, bs=bytes:同時設置讀入/輸出的塊大小爲bytes個字節, count=blocks:僅拷貝blocks個塊,塊大小等於bs的字節數,conv=conversion:用指定的參數轉換文件,notrunc:不截短輸出文件。
boot.asm:
org 0x7c00 start: mov ax, cs mov ss, ax mov ds, ax mov es, ax mov si, msg print: mov al, [si] add si, 1 cmp al, 0x00 je last mov ah, 0x0e mov bx, 0x0f int 0x10 jmp print last: hlt jmp last msg: db 0x0a, 0x0a db "Hello, YGOS!" db 0x0a, 0x0a times 510-($-$$) db 0x00 db 0x55, 0xaa
如今,咱們還須要配置Bochs的啓動項:
############################################################### # Configuration file for Bochs ############################################################### # how much memory the emulated machine will have megs: 32 # filename of ROM images romimage: file=/usr/local/share/bochs/BIOS-bochs-latest vgaromimage: file=/usr/share/vgabios/vgabios.bin # 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 mouse: enabled=0 # enable key mapping, using US layout as default. keyboard_mapping: enabled=1, map=/usr/local/share/bochs/keymaps/x11-pc-us.map
上面的紅色部分是須要填寫的路徑。同時,咱們又須要apt install vgabios這個顯卡工具,須要注意的是,這個步驟完成以後,纔有
vgaromimage: file=/usr/share/vgabios/vgabios.bin 這條指令的路徑。
安裝以後,咱們可使用which bochs ,whereis vgabiso找到主路徑,而後根據上面的標紅路徑完成bochs的啓動文件配置。
在終端輸入bochs以後,系統會自動在當前目錄下尋找 .bochsrc或bochsrc或bochsrc.txt文件,若是找到有三者之一併語法和邏輯正確,則根據啓動文件正常執行bochs。本文使用bochsrc做爲其啓動文件。bochs也能夠顯示使用bochs -f bochsrc_file(啓動文件名)的方式,這和make尋找makefile的規則一致。
配置好bochs的啓動問價那以後,輸入bochs以後,調試界面再也不出錯,而且中止在程序最開始的地方:
此時,和GDB操做同樣,咱們輸入continue或者c,獲得:
能夠看到,咱們的彙編程序,即引導程序,在X86模擬器上的開機畫面,打印出了Hello,YGOS!這樣,咱們就成功安裝好了調試環境,而且,還成功將一個簡單的引導程序使用bochs模擬器正確運行了起來儘管目前主引導程序並不完善。
前面也有說到,bochs和GDB很類似,支持斷點調試且不少命令包括簡寫都一致: