調試環境搭建

操做系統相關的代碼,始終仍是代碼,即確定須要相應的調試工具。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
可是此時可能又會出現這樣的狀況:

0% [Connecting to archive.ubuntu.com (2001:67c:1360:8001::21)] 

解決辦法: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很類似,支持斷點調試且不少命令包括簡寫都一致:

相關文章
相關標籤/搜索