当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]调试内核问题时,能够跟踪内核执行情况并查看其内存和数据结构是非常有用的。Linux 中的内置内 核调试器 KDB 提供了这种功能。

KDB 入门指南

调试内核问题时,能够跟踪内核执行情况并查看其内存和数据结构是非常有用的。Linux 中的内置内 核调试器 KDB 提供了这种功能。在本文中您把了解怎么样使用 KDB 所提供的功能,以及怎么样在 Linux 机器上安装和设置 KDB。您还把熟悉 KDB 中可以使用的命令以及设置和显示选项。

Linux 内核调试器(KDB)允许您调试 Linux 内核。这个恰如其名的工具实质上是内核代码的补丁,它允许高手访问内核内存和数据结构。KDB 的主要优点之一就是它不需要用另一台机器进行调试:您可以调试正在运行的内核。

设置一台用于 KDB 的机器需要花费一些工作,因为需要给内核打补丁并进行重新编译。KDB 的用户应当熟悉 Linux 内核的编译(在一定程度上还要熟悉内核内部机理),但是如果您需要编译内核方面的帮助,请参阅本文结尾处的参考资料一节。

在本文中,我们把从有关下载 KDB 补丁、打补丁、(重新)编译内核以及启动 KDB 方面的信息着手。然后我们把了解 KDB 命令并研究一些较常用的命令。最后,我们把研究一下有关设置和显示选项方面的一些详细信息。

入门

KDB 项目是由 Silicon Graphics 维护的(请参阅参考资料以获取链接),您需要从它的 FTP 站点下载与内核版本有关的补丁。(在编写本文时)可用的最新 KDB 版本是 4.2。您把需要下载并应用两个补丁。

一个是“公共的”补丁,包含了对通用内核代码的更改,另一个是特定于体系结构的补丁。补丁可作为 bz2 文件获取。例如,在运行 2.4.20 内核的 x86 机器上,您会需要 kdb-v4.2-2.4.20-common-1.bz2 和 kdb-v4.2-2.4.20-i386-1.bz2。

这里所提供的所有示例都是针对 i386 体系结构和 2.4.20 内核的。您把需要根据您的机器和内核版本进行适当的更改。您还需要拥有 root 许可权以执行这些操作。

把文件复制到 /usr/src/linux 目录中并从用 bzip2 压缩的文件解压缩补丁文件:


#bzip2 -d kdb-v4.2-2.4.20-common-1.bz2

#bzip2 -d kdb-v4.2-2.4.20-i386-1.bz2


您把获得 kdb-v4.2-2.4.20-common-1 和 kdb-v4.2-2.4-i386-1 文件。

现在,应用这些补丁:


#patch -p1 <kdb-v4.2-2.4.20-common-1

#patch -p1 <kdb-v4.2-2.4.20-i386-1


这些补丁应该干净利落地加以应用。查找任何以 .rej 结尾的文件。这个扩展名表明这些是失败的补丁。如果内核树没问题,那么补丁的应用就不会有任何问题。

接下来,需要构建内核以支持 KDB。第一步是设置 CONFIG_KDB 选项。使用您喜欢的配置机制(xconfig 和 menuconfig 等)来完成这一步。转到结尾处的“Kernel hacking”部分并选择“Built-in Kernel Debugger support”选项。

您还可以根据自己的偏好选择其它两个选项。选择“Compile the kernel with frame pointers”选项(如果有的话)则设置 CONFIG_FRAME_POINTER 标志。这把产生更好的堆栈回溯,因为帧指针寄存器被用作帧指针而不是通用寄存器。

您还可以选择“KDB off by default”选项。这把设置 CONFIG_KDB_OFF 标志,并且在缺省情况下把关闭 KDB。我们把在后面一节中对此进行详细介绍。

保存配置,然后退出。重新编译内核。建议在构建内核之前执行“make clean”。用常用方式安装内核并引导它。

初始化并设置环境变量

您可以定义把在 KDB 初始化期间执行的 KDB 命令。需要在纯文本文件 kdb_cmds 中定义这些命令,该文件位于 Linux 源代码树(当然是在打了补丁之后)的 KDB 目录中。该文件还可以用来定义设置显示和打印选项的环境变量。文件开头的注释提供了编辑文件方面的帮助。使用这个文件的缺点是,在您更改了文件之后需要重新构建并重新安装内核。

激活 KDB

如果编译期间没有选中 CONFIG_KDB_OFF,那么在缺省情况下 KDB 是活动的。否则,您需要显式地激活它 - 通过在引导期间把 kdb=on 标志传递给内核或者通过在挂装了 /proc 之后执行该工作:


??#echo "1" >/proc/sys/kernel/kdb


倒过来执行上述步骤则会取消激活 KDB。也就是说,如果缺省情况下 KDB 是打开的,那么把 kdb=off 标志传递给内核或者执行下面这个操作把会取消激活 KDB:


??#echo "0" >/proc/sys/kernel/kdb

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

在Zynq MPSoC开发中,实现PS端Linux与PL端自定义IP核的AXI互联是构建高性能异构系统的关键环节。这种互联方式充分发挥了ARM处理器的软件优势与FPGA的硬件加速能力,为复杂应用提供了强大的计算平台。

关键字: Zynq MPSoC Linux

在物联网与智能设备飞速普及的当下,嵌入式系统的安全性与稳定性愈发关键。实时操作系统(RTOS)凭借其高确定性、低延迟的特性,成为工业控制、医疗设备、航空电子等安全敏感领域的核心支撑。而内存保护单元(MPU)作为硬件级安全...

关键字: Linux Windows

3月10日消息,2026年开年,一个名为OpenClaw的开源项目以闪电般的速度席卷了GitHub。它在短短一天内就斩获了9000颗星

关键字: OpenClaw Linux

3月6日消息,在摩根士丹利会议上,NVIDIA CEO黄仁勋分享了关于Agentic AI(代理式人工智能)转折点的见解,并将开源软件OpenClaw评价为“当代最重磅的软件发布”。

关键字: OpenClaw Linux

Linux内存管理是操作系统的核心机制之一,通过虚拟内存与物理内存的分离设计,实现了多进程内存隔离、高效资源利用和系统稳定性保障。

关键字: Linux 内存

在Linux系统中,进程管理是内核的核心功能之一,其核心目标是通过高效的调度机制和进程切换技术,实现多任务并发执行。

关键字: Linux CPU

内核是操作系统的核心,它作为应用程序与硬件设备之间的"中间人",负责进程调度、内存管理、硬件通信和系统调用等关键功能。Linux和Windows作为全球使用最广泛的两大操作系统,其内核设计理念、架构和运行机制存在本质差异...

关键字: Linux Windows

在Linux系统中,当开发者使用mmap()系统调用将磁盘文件映射到进程的虚拟地址空间时,一个看似简单的指针操作背后,隐藏着操作系统内核与硬件协同工作的复杂机制。这种机制不仅突破了传统文件IO的效率瓶颈,更重新定义了内存...

关键字: Linux 文件IO 内存映射

在Linux驱动开发领域,持续集成与持续部署(CI/CD)流水线通过自动化流程将代码变更快速转化为可靠部署,而KernelCI与LTP测试套件的深度集成则成为保障驱动稳定性的关键技术组合。本文将从原理分析、应用场景及实现...

关键字: CICD流水线 Linux

在Linux系统中,动态库(共享库)是程序运行的重要组成部分。当程序需要调用动态库时,系统必须能够找到这些库文件的位置。

关键字: 动态库 Linux
关闭