qemu debug linux内核,在qemu环境中用gdb调试Linux内核

简介

对用户态进程,利用gdb调试代码是很方便的手段。而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试。其实我们也可以利用一些手段对Linux内核代码进行gdb调试,qemu就是一种。qemu是一款完全软件模拟(Binary translation)的虚拟化软件,在虚拟化的实现中性能相对较差。但利用它来在测试环境中gdb调试Linux内核代码,是熟悉Linux内核代码的一个好方法。本文旨在介绍怎么利用qemu搭建Linux的gdb调试环境。其中主要包括了如何编译Linux内核,如何利用gdb远程连接qemu启动的gdbserver,进而进一步进行内核代码调试。

环境

Linux Distribution: Ubuntu 14.04.5 TLS

调试内核版本:3.18.6 (本文将内核编译成x86 32位架构来做演示)

编译内核

下载3.18.6版本内核源代码。

# wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.6.tar.xz

# xz –d linux-3.18.6.tar.xz

#tar –xvf linux-3.18.6.tar# cd linux-3.18.6

编译选项

不同的架构有不同的默认文件,比如x86平台,可以在arch/x86/configs找到相关文件:i386_defconfig。通过执行make i386_defconfig 即可基于这个文件生成.config文件,在此基础上可以再运行make menuconfig 来进行个别的调整。更多的细节请参考:Documentationkbuildkconfig.txt。 总之,无论怎么配置,最终都是为了生成.config文件。这些宏最终将影响Makefile中参与编译的文件。

代码的编译选项配置很多,这里主要做如下两处配置:

让系统内核在32位架构中运行 //只是为了演示,非必须

开启”Compile the kernel with debug info”选项 //如果要让内核可调试,这个选项必选

# makei386_defconfig //32位架构

#make menuconfig // 调整编译选项

注意:默认make menuconfig会报错如下,因为最小系统不支持图形显示。

# makemenuconfig

HOSTCC scripts/kconfig/mconf.o

Infile included from scripts/kconfig/mconf.c:23:0:

scripts/kconfig/lxdialog/dialog.h:38:20: fatal error: curses.h: No such fileor directory

#include CURSES_LOC^compilation terminated.

解决方法:

# apt-get install libncurses5-dev -y

在内核编译选项中,开启如下”Compile the kernel with debug info”

Kernel hacking —>

Compile-time checks and compiler options —>

[ ] Compile the kernel with debug info

示意图如下,利用键盘选中debug选项,然后敲”Y”勾选:

282db4950342878c35f0b0f4571a61fe.png

到此为止,gdb调试Linux内核代码的基本环境已经搭建完成,可以利用断点来调试启动启动中的细节。后面将介绍如何构建initramfs文件系统,能让qemu运行的Linux系统更像“完整的系统”。

来源:心诚则零c

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年3月25日
下一篇 2021年3月25日

相关推荐