QEMU+GDB 安装编译调试linux内核

1.首先在QEMU官网下载QEMU最新版的源代码,最好别用apt get install qemu 来安装,这个安装会出现某些问题,GDB远程调试的时候会导致packet过长无法调试。

2.安装一些有用的包。

sudo apt-get install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev

sudo apt-get install git-email

sudo apt-get install libaio-dev libbluetooth-dev libbrlapi-dev libbz2-dev

sudo apt-get install libcap-dev libcap-ng-dev libcurl4-gnutls-dev libgtk-3-dev

sudo apt-get install libibverbs-dev libjpeg8-dev libncurses5-dev libnuma-dev

sudo apt-get install librbd-dev librdmacm-de

sudo apt-get install libsasl2-dev libsdl1.2-dev libseccomp-dev libsnappy-dev libssh2-1-dev

sudo apt-get install libvde-dev libvdeplug-dev libvte-2.90-dev libxen-dev liblzo2-dev

sudo apt-get install valgrind xfslibs-dev

sudo apt-get install libnfs-dev libiscsi-dev

3.编译QEMU

# Switch to the QEMU root directory.

cd qemu

# Prepare a native debug build.

mkdir -p bin/debug/native

cd bin/debug/native

# Configure QEMU and start the build.

../../../configure --enable-debug

make

# Return to the QEMU root directory.

cd ../../..

4.编译内核

sudo apt get install libcurses5-dev

从www.kernel.org下载内核

cd 到内核文件夹

make menuconfig 把kernel hacking里面的compile with debugging info勾上 save 然后退出。

make

这一步时间比较长,完成之后会在/arch/x86/boot/里面生成bzimage文件。

5.GDB调试

然后跑qemu-system-x86_64(这个QEMU不能是apt-get安装的qemu否则会报TCP REMOTE错这个错误非常蛋疼)用-kernel 参数挂载这个bzimage文件 并且-s -S

另外开一个terminal,cd 到linux 主目录下  gdb vmlinux

然后监听1234端口 target remote:1234

然后设置断点 b start_kernel 然后c 就断下来了。

至此QEMU 调试LINUX 内核的基本环境就搭建好了。


接下来要研究的问题就是如何调试呢?比如我在应用层有一个程序 这个程序会有系统调用。那么假如我现在想调试这个程序,并且观测它系统调用进入内核之后的状态,该怎么做呢?直接只用上面提到的那个kernel是做不到的。

由于我现在对LINUX内核理解还不深入。我暂时主要有这么几个想法。

1.LINUX是否可以更换内核。比如我在自己的linux新编译了一个内核,那么是否我可以把老的内核替换掉。也就是说用新的内核依然进入到我的现在的操作系统,这样我就可以直接对这个操作系统进行调试。(目前查阅了一些资料,感觉上是可行的,需要进一步学习linux boot加载的机制,有点类似于嵌入式系统)

2.把应用层的代码弄成机器码或者编译成内核模块的形式 想办法植入到内核里面,然后启动内核直接调。这个方法不需要对操作系统对什么额外的工作。


目前我还不知道这两个方法的可行性,接下来继续做实验。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值