使用QEMU+GDB调试Linux内核
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用QEMU调试Linux内核
一.使用QEMU安装Ubuntu10.04
1.安装qemu
ubuntu下使用sudo apt-get install 安装的qemu版本是0.12.3,该版本中存在bug,使得无法在断点处停下;因此需要在qemu官方网站/Download上下载最新的版本qemu-0.12.5.tar.gz的源代码包自己进行编译安装:
●Sudo apt-get install zlib1g-dev libsdl-dev
●解压源代码后,进入源代码所在目录执行./confingure
●执行make
●执行sudo make install
2.创建QEMU格式的硬盘
qemu-img create –f qcow2name.img size
例如:qemu-img create –f qcow2 ubuntu10.04.img 4GB
3.在创建的硬盘上安装操作系统
qemu–hdaname.img–cdrom ~/Download/ubuntu10.04.iso –boot d 说明:使用hda指定硬盘镜像,使用CDROM选定光驱。-boot d 指从cdrom启动,-boot a是软盘,-boot c 是硬盘;使用qemu或qemu-system-x86_64(64为机子),有时安装系统会很慢,这是可以考虑使用kvm来代替。
例如:kvm–hda ubuntu10.04.img –cdrom ./ubuntu-10.04.iso -boot
d
4.从已经装好操作系统的硬盘启动
qemu–hda ubuntu10.04.img
5.在64位的主机上要使用qemu-system-x86_64命令来代替qemu 二.自己编译内核
现将Linux的编译调节过程简述为:
1. 下载自己要调试的Linux内核的源代码,这个可以从Linux内
核的官方网站上得到:
2. 编译内核最主要的便是配置文件.config,为了能够准确的得到
结果(第一次不要求编译时间),将本机的config文件直接拷
贝到解压后的源代码中。
3.然后进行make操作,结束后将产生的bzImage文件拷到boot
目录下,重启,选择自己编译的内核,这样一般不会出问题,但时间较慢,大约编译一次需要40分钟。
3.1以前编译内核是为调试内核服务的,现在做华为的项目,
发现需要在实际的机器上运行自己编译的内核,参考网站:
/tips/compiling-linux-kernel-26.html
4.为了降低编译时间,就需要对配置文件进行裁剪,在配置文件
中有好多是本机不需要的模块,参考:
/Linux/kernel_options.html。另外调试内
核与模块无关,所以辨识为M的直接可以不选。
5.剪裁的时候采用“逐步瘦身”法,先剪裁掉某个或某几个模块,
然后在进行编译,若没错,在进行模块裁剪,这样可以最大程
度上保证内核配置的正确性。
6.使用qemu调试需要在编译内核的时候将调试信息添加上,
make menuconfig->kernel hacking->kernel debugging->compile
the kernel with debug info。
三.使用qemu+gdb调试Linux内核
(1)qemu–s –S –hda ./ubuntu10.04.img
–kernel ./arch/x86/boot/bzImage–append root=/dev/sda
-s表示运行虚拟机时将1234端口开启成调试端口;
-S表示“冷冻”虚拟机,等待调试器发出继续运行命令;
-kernel表示要调试的内核镜像;
-append root=/dev/sda表示传递给内核的参数。
(2)在另一个终端上运行gdb命令
gdbvmlinux
target remote localhost:1234
若到此没什么问题,你就可以发挥自己的聪明才智进行内核源代码的调试了。
四.GDB基本命令
1.list
/old-gnu/Manuals/gdb-5.1.1/html_node/gdb_46.html
2.GDB command
/TUTORIALS/GDB-Commands.html