本文介绍在archlinux环境下,如何进行内核使用gdb配合qemu进行调试。
1. 安装qemu
2. 编译linux kernel
选择最新的内核版本,规避gcc编译出错的问题具体步骤如下
2.1 make mrproper
2.2 make ARCH=i386 menuconfig
选中kernel hacking->compile the kernel with debug info
2.3 make
3.编译简单的init程序
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char** argv) {
while ( ) {
prinf("hello,world\n");
sleep();
}
return ;
}
编译生成init
#gcc -static -o init hello.c
4. 创建根文件系统
dd if=/dev/zero of=myinitrd4M.img bs= count=
mke2fs -t ext3 myinitrd4M.img
mkdir -p rootfs/dev
mount -o loop myinitrd4M.img rootfs
mknod rootfs/dev/console c
mknod rootfs/dev/ram b
cp init rootfs
umount rootfs
创建必要的目录
-
裝置檔
為了使用 command line 以及開機,我們需要新增三項裝置 console 、 null 以及 ttyAMA0 ,在 _install/dev 下鍵入
sudo mknod console c 5 1
sudo mknod null c 1 3
sudo mknod ttyAMA0 c 204 64
5. 运行内核
在一个终端运行
qemu-system-i386 -kernel arch/x86/boot/bzImage -initrd myinitrd4M.img -append "root=/dev/ram init=/bin/ash" -s -S
在另一个终端运行如下命令启动gdb并调试
#gdb vmlinux
gdb)target remote:1234
gdb)break start_kernel
gdb)c
开始内核调试之旅吧