kgdb在内核2.6.26中加入,用于调试内核。kdb是内建的内核调试器,由SGI开发。

两者差异是:

  • 使用kgdb需要两个机器,通过网络连接,其中客户端使用gdb。而kdb可以直接在目标机器上调试。
  • Kgdb支持C代码级别调试,可以识别内核数据结构,而kdb只能识别汇编级别。

  这里两台机器(使用的是两台VBox的虚拟机),一个是目标机器(被调试内核的机器),另一台是开发机器(连接被调试内核的机器)。

要使用kgdb,需要重新编译下内核,先修改相关配置:

[*] Compile the kernel with debug info

[*] KGDB: kernel debugger  --->

[*]   KGDB_KDB: include kdb frontend for kgdb

CONFIG_DEBUG_INFO选项使得编译中生产调试信息。

CONFIG_STRICT_KERNEL_RWX选项会阻止内核的某些断点,所以禁止(4.15.15中并未看到此项)。并增加KDB。最后查看.config配置文件包含如下:

CONFIG_FRAME_POINTER=y

CONFIG_KGDB=y

CONFIG_KGDB_SERIAL_CONSOLE=y

CONFIG_KGDB_KDB=y

CONFIG_DEBUG_INFO=y

然后进行编译安装,make –j2 && make modules_install && make install

1.   内核参数

在内核启动参数中添加,表示启动,通过串口ttyS0来实现kgdb调试。

 kgdbwait kgdboc=ttyS0,115200

kgdbwait可以让kgdb在内核启动阶段等待一个调试器链接进来,系统此刻是挂住的。

注:kgdboc表示kgdb over concole,是配置gdb和kgdb通信的首选机制。

也可以运行过程中使能或禁止命令,如下:

echo ttyS0 > /sys/module/kgdboc/parameters/kgdboc

echo "" > /sys/module/kgdboc/parameters/kgdboc

使能kgdb后要禁止内核执行,执行如下,触发一个中断:

echo g > /proc/sysrq-trigger

目标机器挂住后,就是开发机器链接到目标机器上去了。下面来看下整个过程。

2.   kgdb调试过程

1.        先将加目标机器编译生成的linux复制到开发机器上。

2.        在目标机器上添加启动参数:kgdbwait kgdboc=ttyS0,115200

3.        然后关闭机器,设置串口的端口,设置虚拟使能端口,如下,然后启动目标机器,机器将会挂住在启动阶段。。接着在开发机器上设置端口如下,最后启动开发机器:

4.        在开发机器进行调试#gdb ./vmlinux

这个vmlinux 就是从目标机器复制过来的。

执行如下:

# gdb ./vmlinux

GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1

Copyright (C) 2016 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.  Type "show copying"

and "show warranty" for details.

This GDB was configured as "x86_64-linux-gnu".

Type "show configuration" for configuration details.

For bug reporting instructions, please see:

<http://www.gnu.org/software/gdb/bugs/>.

Find the GDB manual and other documentation resources online at:

<http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".

Type "apropos word" to search for commands related to "word"...

Reading symbols from ./vmlinux...done.

(gdb) target remote /dev/ttyS0

Remote debugging using /dev/ttyS0

0xffffffff98145410 in ?? ()

(gdb)

这样连上了目标主机了。

输入continue命令,继续内核执行。

收工。

关于如何调试内核及内核模块,请看下回分析。

3.   参考

http://oliveryang.net/2015/08/using-kgdb-debug-linux-kernel-1/

https://www.kernel.org/doc/html/v4.15/dev-tools/kgdb.html

调试Linux内核操作指南(withing kgdb)相关推荐

  1. kgdb调试linux内核以及驱动模块

    kgdb调试linux内核以及驱动模块 本文将简要描述如何配置kgdb进行内核以及驱动模块调试,以嵌入式开发为例,但同样对于其他有需要调试kernel有一定的参考价值.本文实验环境为qemu搭建的ri ...

  2. linux内核单步调试,Linux内核驱动开发之KGDB单步调试内核(kgdboc方式)

    如何单步调试Linux内核一直困扰着linux驱动开发人员,内核有其代码量大.逻辑复杂.与硬件交互的特性.因此,有着不同于应用程序的调试方法,据统计Linux内核开 Linux内核驱动开发之KGDB原 ...

  3. 使用Android模拟器调试linux内核

    使用Android模拟器调试linux内核 为什么需要调试linux内核 如何在Android上调试内核 开发环境 创建模拟器 下载goldfish内核源码 编译goldfish内核 编译内核遇到的问 ...

  4. 使用 ftrace 调试 Linux 内核【转】

    转自:http://blog.csdn.net/adaptiver/article/details/7930646 使用 ftrace 调试 Linux 内核,第 1 部分 http://blog.c ...

  5. Bochs调试Linux内核6 - 启动过程调试 - 跳到bootsect引导程序执行

    接此,​​​​​​Bochs调试Linux内核5 - 启动过程调试 - 认识Bootsect.S_bcbobo21cn的专栏-CSDN博客 看一下,0x00007c11 这里是重复执行串传送:而后一条 ...

  6. Bochs调试Linux内核5 - 启动过程调试 - 认识Bootsect.S

    先参阅 Bochs调试Linux内核 - 定位内核中的变量或数据结构_bcbobo21cn的专栏-CSDN博客​​​​​​ ,运行到<bochs:1>,输入vbreak 0x0000:0x ...

  7. 使用Bochs调试Linux内核初级入门

    之所以能用Bochs调试Linux内核,还是因为Bochs做了一些工作: 安装完成以后如下:如果使用bochs.exe加载操作系统映像,就是在虚拟机中运行操作系统: 如果使用bochsdbg.exe加 ...

  8. 使用openocd调试Linux内核,OpenOCD-JTAG调试

    title: OpenOCD-JTAG调试 tags: ARM date: 2018-10-13 23:36:28 Todo [ ] JTAG 调试linux内核 [ ] linux下使用OpenOC ...

  9. qemu debug linux内核,在QEMU环境中使用GDB调试Linux内核

    简介 对用户态进程,利用gdb调试代码是很方便的手段.而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试.其实我们也可以利用一些手段对Linux内核代码进行gdb调试,qem ...

最新文章

  1. java接监控摄像头接口_离奇!深夜隧道内,12个摄像头突然一个接一个“瞎”了,监控员吓懵了...
  2. SpringBoot简介、SpringBoot 入门程序搭建、与JDBC、Druid、Mybatis和SpringData JPA的整合
  3. LSGO软件技术团队2015~2016学年第十三周(1123~1129)总结
  4. Linux命令-关机,重启
  5. React Native知识7-TabBarIOS组件
  6. 科学计算器 java_用Java编写的标准计算器、科学计算器、时间转换。
  7. 拥有16年开发经验,我都使用了什么工具?[最近更新:2017-10-12]
  8. java冒泡排序 代码简单明了
  9. Python之统计英文字符的个数
  10. 联通光猫IPV6配置
  11. WOW 最简单的插件入门,适合不知道怎么创建XML/自己写的插件始终不生效的
  12. 制作京东快报页面html,仿京东首页的京东快报,自动向上滚动的广告条
  13. 苹果计算机开机进入安全模式,苹果电脑开机步骤
  14. 干货!5招搞定问卷调查差异化分析
  15. 【安装PyTorch报错】InvalidArchiveError(‘Error with archive D:\\anaconda\\pkgs\\pytorch-1.2.0-py3.6····
  16. 《微服务系列:Eureka服务注册发现中心》
  17. cent os 主题安装
  18. 未来五年 LED智慧透明屏未来3大发展趋势
  19. [echarts] 图表自适应宽高大小
  20. 1、Moravec角点检测算法

热门文章

  1. 【方法整理】Oracle 获取trace跟踪文件名的几种常用方式
  2. SQL Server中使用正则表达式
  3. ZeroMQ接口函数之 :zmq_poll - I/O多路技术
  4. 自制MVC之工具类插件一
  5. Unix 的基本命令:
  6. OMS SDK中OPhone应用与BAE JIL中Widget应用的区别
  7. 踢毽也能治胃病,适当的运动带来健康,健康带来快乐
  8. PHP 权威代码风格规范
  9. (转)mq经验总结-转
  10. Gatling教程系列一简单GET请求测试(二)