调试Linux内核操作指南(withing kgdb)

简介:


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.        然后关闭机器,设置串口的端口,设置虚拟使能端口,如下,然后启动目标机器,机器将会挂住在启动阶段。a7c94a3eb7b48aeac30ffcc10697e05ff28e4073。接着在开发机器上设置端口如下,最后启动开发机器:c5baee9155705c9bed3302bc1e72598cda8eb96a

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

 

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
7月前
|
安全 网络协议 Linux
深入理解Linux内核模块:加载机制、参数传递与实战开发
本文深入解析了Linux内核模块的加载机制、参数传递方式及实战开发技巧。内容涵盖模块基础概念、加载与卸载流程、生命周期管理、参数配置方法,并通过“Hello World”模块和字符设备驱动实例,带领读者逐步掌握模块开发技能。同时,介绍了调试手段、常见问题排查、开发规范及高级特性,如内核线程、模块间通信与性能优化策略。适合希望深入理解Linux内核机制、提升系统编程能力的技术人员阅读与实践。
664 1
|
7月前
|
Ubuntu Linux
Ubuntu 23.04 用上 Linux 6.2 内核,预计下放到 22.04 LTS 版本
Linux 6.2 带来了多项内容更新,修复了 AMD 锐龙处理器设备在启用 fTPM 后的运行卡顿问题,还增强了文件系统。
|
7月前
|
Ubuntu Linux
Ubuntu 23.10 现在由Linux内核6.3提供支持
如果你想在你的个人电脑上测试一下Ubuntu 23.10的最新开发快照,你可以从官方下载服务器下载最新的每日构建ISO。然而,请记住,这是一个预发布版本,所以不要在生产机器上使用或安装它。
|
7月前
|
传感器 监控 Ubuntu
10 月发布,Ubuntu 23.10 已升级到 Linux Kernel 6.3 内核
硬件方面,Linux 6.3 引入了在 HID 中引入了原生的 Steam Deck 控制器接口,允许罗技 G923 Xbox 版赛车方向盘在 Linux 上运行;改善 8BitDo Pro 2 有线控制器的行为;并为一系列华硕 Ryzen 主板添加传感器监控。
|
7月前
|
Ubuntu Linux
Ubuntu24.04LTS默认采用Linux 6.8内核,实验性版本可通过PPA获得
IT之家提醒,当下的 Ubuntu 23.10 也是一个“短期支持版本”,该版本将在今年 7 月终止支持,而今年 4 月推出的 Ubuntu 24.04 LTS 长期支持版本将获得 5 年的更新支持。
|
7月前
|
监控 Ubuntu Linux
什么Linux,Linux内核及Linux操作系统
上面只是简单的介绍了一下Linux操作系统的几个核心组件,其实Linux的整体架构要复杂的多。单纯从Linux内核的角度,它要管理CPU、内存、网卡、硬盘和输入输出等设备,因此内核本身分为进程调度,内存管理,虚拟文件系统,网络接口等4个核心子系统。
424 0
|
7月前
|
Web App开发 缓存 Rust
|
7月前
|
Ubuntu 安全 Linux
Ubuntu 发行版更新 Linux 内核,修复 17 个安全漏洞
本地攻击者可以利用上述漏洞,攻击 Ubuntu 22.10、Ubuntu 22.04、Ubuntu 20.04 LTS 发行版,导致拒绝服务(系统崩溃)或执行任意代码。
|
7月前
|
Ubuntu 机器人 物联网
Linux Ubuntu 22.04 LTS 测试版实时内核已可申请
请注意,在启用实时内核后您需要手动配置 grub 以恢复到原始内核。更多内容请参考: