每天学点GDB 12

时间:2022-03-09 20:13:08
本文介绍在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
 
创建必要的目录
  1. 裝置檔

    為了使用 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
 
开始内核调试之旅吧