使用qemu调试linux内核
使用qemu调试linux内核
2011年03月20日
使用qemu调试linux内核
qemu对gdb的良好支持,使它成为研究和调试linux内核的不错的工具, qemu安装和作为单纯的虚拟机来运行别的系统,在这就不说了,网上已经有很多资料了, 主要是记录一下调试基本内核的过程, 以免自己忘了。
1. 编译内核
2. 编译Busybox
3. 建造虚拟磁盘分区文档
1. 建一个64M的raw格式的虚拟磁盘,大小根据自己的需要设定。
dd if=/dev/zero of=./busybox.img bs=1M count=64 2. 格式化分区
mkfs.ext3 busybox.img
3. 在镜像磁盘上创建根文件系统。
a ) mount分区,将虚拟硬盘分区挂到系统中
mount -o loop busybox.img /mnt/disk
b) 执行下列命令将编译的Busybox的内容复制到 /mnt/disk 目录中, Busybox执行完make install后会生成_install目录
cp -a ./_install/* /mnt/disk/
复制其它一些必要发文件到分区中, 我的主机系统为ubuntu 10.04 ,下面是我分区文件树, 把指向busybox的连接都排除了:
├── bin │ ├── busybox ├── dev │ ├── console │ ├── null │ ├── tty │ ├── ttyS0 │ ├── ttyS1 │ ├── ttyS2 │ ├── ttyS3 │ └── zero ├── etc │ ├── fstab │ ├── init.d │ │ └── rcS │ ├── inittab │ └── profile ├── lib │ ├── ld-2.11.1.so │ ├── ld-linux.so.2 -> ld-2.11.1.so │ ├── libc-2.11.1.so │ ├── libc.so.6 -> libc-2.11.1.so │ ├── libm-2.11.1.so │ ├── libmemusage.so │ └── libm.so.6 -> libm-2.11.1.so ├── linuxrc -> bin/busybox ├── lost+found ├── proc ├── sbin └── usr ├── bin └── sbin
说明:
-s 在1234 接受gdb的调试连接
-S 虚拟机启动后立即暂停,等待gdb的连接。
-kernel 内核文件
-append 内核启动参数, 这里指定的根分区为sda, 而不是sda1 是因为前面我们创建的镜像文件是个分区镜像内不是磁盘镜像里在创建的分区。
-hda 指定第一个盘的文件名。
b) 启动gdb, 连接到localhost的1234端口
c ) gdb连接上后就可以,根调试普通程序一下,打断点,什麽的了