Welcome 微信登录

首页 / 操作系统 / Linux / bochs+gdb源码级调试Linux 0.12内核测试环境构建

之前都是用的bochs自带的debug功能,但是linux内核大部分都是用C语言来实现的,若仅通过反汇编的汇编来学习,太累了。。。所以今天花了一个上午的时间,搭建起了bochs+gbd的联调huanjing。安装环境:Ubuntu 11.04 (2.6.38) bochs 2.4.6 gdb 4.5.2首先还是要安装bochs,仍然是推荐使用最新的版本(2.4.6),如果使用像2.3.6等老版本,也许会导致后面与gdb无法远程连接(NND,就是这个恶心的问题浪费了我几个小时。。。) linux上还是要从bochs的源码编译开始安装,bin文件安装的版本无法提供调试功能。配置bochs源码时,输入命令 ./configure --enable-gdb-stub,然后使用make和sudo make install命令完成安装。安装时可能会遇到X windows库不全的情况,可以通过apt-get安装xorg-dev解决。接着是配置bochs虚拟机环境,配置一个.bxrc文件和生产一个根文件系统镜像文件,建议直接到oldlinux上下载一个linux-0.11-gdb-rh9-050619.tar.gz,其中已经包含了配置好的这两个文件,另外在linux文件夹下有linux0.11的源码。.bxrc文件中主要是添加了一条调试信息gdbstub: enable=1, port=1234, text_base=0, data_base=0, bss_base=0另外,这个bxrc文件中需要稍稍修改一些东西:1. romimage: file=$BXSHARE/BIOS-bochs-latest,  address=0xf0000改成 romimage: file=$BXSHARE/BIOS-bochs-latest2. floppy_command_delay: 50000改成 #floppy_command_delay: 500003.ips: 4000000改成 cpu: count=1, ips=4000000接着就可以来进行联调了。1. 打开两个终端。2. 一个终端进入到linux-gdb-rh9/,运行程序"./run",此时窗口显示等待信息“wait for gdb connection on localhost:1234”3. 另一个终端进入linux-gdb-rh9/linux/,运行 gdb tools/system4. 在gdb窗口中输入b main(在main函数处下断)5. 输入target remote localhost:1234 ,连接到bochs虚拟机上6. 输入c,让程序持续运行,直到终端在main函数中7. 可以开始使用gdb进行源码调试了^_^之后可以对源代码进行修改再调试。需要注意的是,早期源码默认的汇编编译器为gas,链接器为gld,所以在Makefile文件中显示声明as=gas ld=gld。而在ubuntu 11.04中,gcc早已成为默认的编译器了,所以如果是另外下载的源码,需要将Makefile中的as=gas ld=gld改成 as=as, ld=ld 。。。(这个修改确实比较2。。。)