使用KGDB在QEMU上调试内核

本文介绍了如何在QEMU环境中使用KGDB对Linux内核进行调试,包括下载新内核、配置、编译、启动QEMU并启用KGDB等步骤,并分享了一个包含丰富学习资料的150GB资源包。
摘要由CSDN通过智能技术生成

大家好,今天给大家介绍使用KGDB在QEMU上调试内核,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取

Linux是一个非常棒的操作系统, 很多Linux的爱好者, 都想深入的学习它, 市面上的工具也很多, 今天给大家介绍一下怎么用KGDB来调试kernel的方法.

1. 下载新Linux内核

首先去Linux 官方网站 www.kernel.org 下载新的内核源码, 现在新的版本是4.0. 我们以4.2.8为例.

假设缺省工作目录为/home/linux/workspace

$ cd workspace

$ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.2.8.tar.xz

$ tar -xvf linux-4.2.8.tar.xz

$ mv linux-4.2.8 linux

2. 配置内核选择

如果要使能kgdb调试进行调试, 需要使用KGDB over the serial console 作为与gdb通信模块。

$ cd linux

$ make defconfig

$ make menuconfig

选中 KGDB: use kgdb over the serial console 选项

General setup —>

[*] Prompt for development and/or incomplete code/driversKernel hacking —>

[*] Compile the kernel with debug info

[*] Compile the kernel with frame pointers

[*] KGDB: kernel debugger —>

<*> KGDB: use kgdb over the serial console

3. 编译kernel

我们可以使用 -j选项, 根据CPU数来进行并行编译,从而加快编译速度,如果机器CPU是双核4线程, -j后面跟上4.

如:

$ make -j4

如果想要保持linux目录的clear,将编译产生的二进制文件放到另一个目录下,请参考使用下面的命令:

$ mkdir obj

$ cd linux

$ make O=../obj defconfig

$ make O=../obj -j4

编译完成后,复制bzImage和vmlinux到工作目录下备用

$ cp arch/x86/boot/bzImage ~/workspace

$ cp vmlinux ~/workspace

4. 安装qemu

我们用的系统为ubuntu15.04. 也可以直接下载源码进行编译安装.

$ sudo apt-get install qemu

5. 用qemu启动Linux

用qemu启动我们刚刚编译的好的内核文件. 需要使用到根文件系统, 可以下载别人做好的, 也可以根据网上教程自己制作一个根文件系统.

$ qemu -kernel ~/workspace/bzImage -append "root=/dev/sda" -boot c -sda ~/workspace/busybox.img -k en-us

6. 启用KGDB

我们已经使用qume启动Linux系统了, 如果要使用kgdb需要在内核启动时增加参数. 当然也可以在内核启动后echo kgdboc模块的参数来重新设置参数. 这两种方式都可以, 在这里我们采用在内核启动时增加启动参数的方式:(kgdboc=ttyS0,115200 kgdbwait)

$ qemu -kernel ~/workspace/bzImage -append "root=/dev/hda kgdboc=ttyS0,115200kgdbwait" -boot c -sda ~/workspace/busybox.img -k en-us -serial tcp::5566,server

这时,运行qemu的终端将提示等待远程连接到本地端口4321:

QEMU waiting for connection on: tcp:0.0.0.0:4321,server

这时使用另外一个控制台执行:

$ gdb /usr/src/work/vmlinux(gdb) target remote localhost:4321

然后qemu就可以继续正常运行下去,后停止内核,并显示如下信息:

kgdb: Waiting for connection from remote gdb…

这时gdb这边就可以看到如下的提示:

(gdb) target remote localhost:4321Remote debugging using localhost:4321kgdb_breakpoint () at kernel/debug/debug_core.c:983983 wmb(); /* Sync point after breakpoint */(gdb)

开始kernel的旅行吧!!!

注:和上面的文章不同的是,它将qemu的虚拟串口导向到本地的一个”pty”设备上,而前面我们是导向到一个socket端口上.

qemu -serial参数介绍如下:

-serial devRedirect the virtual serial port to host character device dev. The default devices "vc" in graphical mode and "stdio" in non graphical mode. This option can based several times to simulate up to 4 serials ports.

如果gdb提示如下信息:

warning: Invalid remote reply:

可以使用Ctrl+C来终止当前gdb的操作,再次使用下面命令重新连接一次kgdb即可:

(gdb) target remote localhost:4321

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

无偿分享大家一个资料包,

差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。(点击找小助理领取)

扫码进群领资料icon-default.png?t=N7T8https://ad.pdb2.com/l/16QijNiGb32IFIn

  • 28
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值