您的位置:首页 > 运维架构 > Linux

ubuntu14.04下qemu调试linux内核

2015-01-21 17:08 309 查看

编译内核

解压缩内核【这里使用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/gdb
vim 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执行下一个语句
。。。



参考链接:

利用qemu进行内核源码级调试
Re: [Qemu-discuss] remote 'g' packet reply is too long

linux下,如何下载安装gdb最新版
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: