《操作系统真象还原》 部属gdb + bochs调试环境

配合视频学习体验更佳:
https://www.bilibili.com/video/BV12z4y177VQ/?vd_source=701807c4f8684b13e922d0a8b116af31

现在来搭建支持gdb调试的bochs环境,因为后期代码全是c写的,要想要理清楚代码逻辑,gdb调试是必不可少的。

环境vmware + deepin-desktop-community-20.8-amd64

先安装其他需要的东西:

sudo apt install build-essential

sudo apt-get install libghc-x11-dev

sudo apt-get install xorg-dev

下载Bochs https://udomain.dl.sourceforge.net/project/bochs/bochs/2.6.8/bochs-2.6.8.tar.gz

下载完毕之后将其移动至虚拟机中想要的位置,然后解压,命令:tar -zxvf bochs-2.6.8.tar.gz

为即将要安装的bochs创建一个空目录

mkdir bochs-gdb

进入解压后的bochs-2.6.8文件夹 cd bochs-2.6.8

配置bochs的config文件(–prefix这后面填的是你想要安装bochs的目录),编译,安装

./configure --prefix=/home/rlk/Desktop/bochs-gdb --enable-gdb-stub --enable-disasm --enable-iodebug --enable-x86-debugger --with-x --with-x11 LDFLAGS='-pthread'

make

make install

进入安装好bochs的目录 cd .. cd bochs-gdb创建bochsrc.disk 命令: touch bochsrc.disk,在其中写下配置信息(修改romimage:romimage:keyboard:后面路径信息的前部分为自己的bochs安装路径)

megs : 32

romimage: file=/home/rlk/Desktop/bochs-gdb/share/bochs/BIOS-bochs-latest
vgaromimage: file=/home/rlk/Desktop/bochs-gdb/share/bochs/VGABIOS-lgpl-latest

boot: disk

log: bochs.out

mouse:enabled=0
keyboard:keymap=/home/rlk/Desktop/bochs-gdb/share/bochs/keymaps/x11-pc-us.map

ata0:enabled=1,ioaddr1=0x1f0,ioaddr2=0x3f0,irq=14
ata0-master: type=disk, path="hd60M.img", mode=flat,cylinders=121,heads=16,spt=63

gdbstub:enabled=1,port=1234,text_base=0,data_base=0,bss_base=0

创建启动磁盘

bin/bximage

然后在输入框依次输入以下,输入一个,按一次回车

1

hd

flat

60

hd60M.img

然后Makefile中

ASFLAGSCFLAGS均添加 -g 参数,这样生成的.o文件,是包含调试信息,比如符号。最后ld而成的kernel.bin也包含调试信息。然后使用

objcopy --only-keep-debug kernel.bin kernel.sym 在加载内核镜像到 Bochs 之前,导出 GDB 可以理解的符号表格式。或者像我一样在Makefile中添加规则,这样make all时候,自动生成kernel.sym文件

修改(Makefiel

HD60M_PATH=/home/rlk/Desktop/bochs-gdb/hd60M.img	#hd60M的路径改成支持GDB调试的bochs环境内的磁盘

ASFLAGS= -f elf -g
CFLAGS= -Wall $(LIB) -c -fno-builtin -W -Wstrict-prototypes -Wmissing-prototypes -m32 -fno-stack-protector -g

.PHONY:mk_dir hd clean build all boot gdb_symbol	#定义了7个伪目标


#生成可以被GDB理解的符号表,用于GDB调试
gdb_symbol:
	objcopy --only-keep-debug $(BUILD_DIR)/kernel.bin $(BUILD_DIR)/kernel.sym

all:mk_dir boot build hd gdb_symbol
#make all 就是依次执行mk_dir build hd gdb_symbol

编译,向hd60M.img中写入我们的kernel.bin文件

启动bochs虚拟机bin/bochs -f bochsrc.disk,会提示等待gdb连接,现在我们打开一个新的终端,输入gdb以启动gdb,如果没有gdb,需要安装,命令:sudo apt install gdb

在gdb窗口中输入命令:target remote localhost:1234 以连接bochs进行调试

然后输入命令:symbol-file /home/rlk/Desktop/the_truth_of_operationg_system/chapter_12/c/build/kernel.sym 以加载kernel.bin的符号表

现在就能gdb调试c语言了,需要自行学习如何用gdb调试

猜你喜欢

转载自blog.csdn.net/kanshanxd/article/details/131750520