• 每天学点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
     
    开始内核调试之旅吧
  • 相关阅读:
    Codeforces Round #564(div2)
    714
    1471
    UVa 11134
    UVa 1152 -4 Values whose Sum is 0—[哈希表实现]
    UVa 1374
    UVA 1343
    UVa 12325
    Yet Another Number Sequence——[矩阵快速幂]
    River Hopscotch-[二分查找、贪心]
  • 原文地址:https://www.cnblogs.com/hseagle/p/3294297.html
Copyright © 2020-2023  润新知