当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > 使用KGDB在QEMU上调试内核

使用KGDB在QEMU上调试内核 时间:2018-09-25      来源:未知

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

参考:

//kernel.org/pub/linux/kernel/people/jwessel/kgdb/

setting up kgdb using kvmqemu

上一篇:QT 5.3开发及移植(4)

下一篇:NDK环境配置

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部