编译内核
- 解压缩内核【这里使用linux-3.10.58】
- make menuconfig:在kernel hacking中选中compile the kernel with debug info【记得提前安装libncurses5-dev】
- make bzImage:编译内核
更新gdb
- 由gdb-7.8.tar.gz下载最新的gdb(7.8)到/opt目录下【目录随意选】
- 解压缩:tar zxvf gdb-7.8.tar.gz
- 修改代码【否则调试内核会出现remote 'g' packet reply is too long的问题】
cd gdb-7.8/gdbvim remote.c按照如图所示修改代码【针对7.8版本】:
代码如下:if (buf_len > 2 * rsa->sizeof_g_packet) { rsa->sizeof_g_packet = buf_len ; for (i = 0; i < gdbarch_num_regs (gdbarch); i++) { if (rsa->regs->pnum == -1) continue; if (rsa->regs->offset >= rsa->sizeof_g_packet) rsa->regs->in_g_packet = 0; else rsa->regs->in_g_packet = 1; } }
- 安装gdb
- 在主目录gdb-7.8下依次运行命令:
./configure
make
make install
启动qemu
- cd ~/linux-3.10.58
- qemu -S -kernel arch/x86/boot/bzImage -m 1024,启动界面如下:
- 同时摁ctrl+alt+2 输入gdbserver tcp::1234,建立并等待gdb连接
- 同时摁ctrl+alt+1返回qemu
- 另外开一个终端到linux-3.10.58主目录下,输入命令:gdb vmlinux
- 在gdb下输入:target remote localhost:1234 连接qemu
- 设置断点【举例:b do_fork】
- 输入命令c开始执行到断点处
- 输入命令n执行下一个语句
- 。。。