每天学点GDB 12

本文介绍在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 ( 1 ) {
    prinf("hello,world
");
    sleep(10);
  }
  return 0;
}
 
编译生成init
#gcc -static -o init hello.c
 
4. 创建根文件系统
  
  dd if=/dev/zero of=myinitrd4M.img bs=4096 count=1024
   mke2fs -t ext3 myinitrd4M.img
   mkdir -p rootfs/dev
   mount -o loop myinitrd4M.img rootfs
   mknod rootfs/dev/console c 5 1
   mknod rootfs/dev/ram b 1 0
   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
 
开始内核调试之旅吧
原文地址:https://www.cnblogs.com/hseagle/p/3294297.html