问题标签 [kgdb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
debugging - 嵌入式 Linux 内核调试
我正在工作场所的专有董事会上工作。Linux 映像(从 yocto 构建)被复制到 eMMC 并从 eMMC 启动。在内核启动中面临一些问题。有什么方法可以在启动时调试 linux 内核?
gdb - KGDB,远程连接错误
我对 KGDB 非常陌生,当我从主机连接目标时遇到问题,出现以下错误。
p> #我下面的程序是:
#确保串行连接双向工作。您可以使用:
您应该会在机器的两侧看到消息。如果不是,则电缆或驱动程序可能存在一些问题。
编译内核
在内核配置中启用 KGDB*、KGDB_SERIAL*、KGDB_USB*、DEBUG_INFO、DEBUG_INFO_DWARF4、MAGIC_SYSRQ。在 TARGET 上编译并安装。
这里的主要目的是启用 KGDB 功能并在 vmlinux 中保留调试信息。
代理-代理设置
agent-proxy 充当 TARGET 串行端口的代理。它拆分串行端口以进行多路复用。一个用于主控制台 I/O,另一个用于 GDB 会话。因此,我们可以同时处理两者。您应该在 HOST 机器上运行代理代理。
这将重定向:
- TARGET 的控制台到 HOST:5550
- TARGET 到 HOST:5551 的 kgdb 监听端口
开始调试
首先,打开主控制台:
通过以下方式进入 kdb 模式:
(你应该看到 KGDB: Registered I/O driver kgdboc,否则会失败)
当我在目标任务中键入 kgdb 时,出现错误,因为权限被拒绝,如下所示
...,我将不胜感激逐步明确的答案...,在此先感谢
android - 调试Android内核时的下一步错误
我正在研究 Android 上的 Linux 内核源代码。于是我在Android模拟器(基于qemu的模拟器)上搭建了一个调试环境。但是,当我使用 gdb 调试内核时,下一个命令总是跳转到错误代码。这是示例:
fs/read_write.c:527 处的断点。在下一个 (n) 时,调试器应在 fs/read_write.c:528 或 fs/read_write.c:529 处停止。但出乎意料的是,它跳到了 lib/iomap.c:73。
为什么会出现这个问题?
我从
https://android.googlesource.com/kernel/goldfish
而且,我结帐分支 android-goldfish-4.4-dev
我用一些配置构建了内核:
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_INFO=y
CONFIG_KGDB=y
CONFIG_FRAME_POINTER=y
\# CONFIG_DEBUG_RODATA
未设置\# CONFIG_RANDOMIZE_BASE
未设置
我像这样启动了模拟器:
avd Pixel2XL-x86_64 是 x86_64 架构,我将内核构建为 x86_64。
有人说这是GCC O2优化造成的。我参考了内核黑客:GCC优化以获得更好的调试体验(-Og)
但是,没用。
debugging - gdb 回溯 kgdb 设置中未显示函数名称
我已经使用以下链接在两个 VMWare 虚拟机之间建立了 KGDB 的调试环境:
https://embeddedguruji.blogspot.com/2018/12/debugging-linux-kernel-using-kgdb-part-1.html
当我运行回溯时,我没有得到函数名称。我在这里缺少什么?
linux - linux页面地址'0xdead0000~~'是什么意思?
我使用 kgdb 调试 linux 内核并打印 *page。结果显示一些以“0xdead”开头的地址
喜欢,{lru = {next = 0xdead000000000100, prev = 0xdead000000000122},
这些页面是什么意思?一个空页面?还是有意义的东西?
谢谢你。
linux - 是否有关于如何调试经过测试并包含所有必要步骤的 Linux 内核的简短 A 到 Z 描述?特别是。约克托?
通过 rs-232 使用 kgdb 调试 Linux 内核需要几个准备步骤。我发现了很棒的文档,但是没有一个完全独立的源代码,它总结了所需的所有步骤,没有解释很长时间,并且已经过测试。并且还涵盖了 Yocto。
是否有任何来源可以在一个简短的描述中涵盖所有所需的内容?
IE:
- 启动 GDB 的目录中需要哪些文件(例如内核感知、源代码、vmlinux)以及如何获取这些文件,放在哪里?
- 何时何地从哪里获得跨 gdb?
- 需要所有内核配置选项,也包括不明显的选项(如 CONFIG_RANDOMIZE_BASE)
- 如何配置串口
- 解释闯入被调试者和调试器以开始的来回工作。
- 解释停止到处运行的内核的一种坚如磐石的选择。
- 解释如何完成这项工作,不仅适用于 PC-PC 调试,还适用于 Yocto 目标。
c - 如何在远程机器上调试 Linux 内核?
如何在远程机器上调试自定义 Linux 内核?
我有一台带有定制 Linux 内核的远程机器,最初来自 5.6.8。内核下的系统遇到了我想要修复的问题。与 kgdb 相关的选项是
该kgdboc
模块是内置编译的。kgdb的文档描述了如何使用带串口的终端。以下是它在远程机器上的配置方式:
使用ssh
我发出
运行后gdb vminux
我应该使用哪个端口连接到远程内核?
linux-kernel - 启动后重新初始化 KGDB 串口
我一直在与这个问题斗争一段时间,并慢慢放弃它。我正在我的 Beaglebone Black 板上与 Yocto 合作。我希望能够使用 KGDB 来调试内核模块和内核本身。我已修改设备树以专门为 KGDB 启用 UART1,并修改内核设置以启用 KGDB。
在早期引导期间,引导加载程序将串行端口配置为 115200n8 设置并停止执行,等待来自我的主机的 GDB 通过串行端口连接到 BeagleBone 并允许其单步执行代码。当我允许代码继续执行时,问题稍后会出现。我运行 GDB 的主机停止响应,并且似乎不再与 Beaglebone 连接。一旦我使用终端登录到 Beaglebone,我发现 KGDB 的串行端口设置已更改为某些默认值,波特率为 9600。什么可能导致这种变化?linux 初始化的哪一部分可能会影响我的串口设置?我对 Linux 及其概念仍然很陌生,因此将不胜感激。
谢谢。
debugging - 如何在调试时防止中断从我的代码中跳出?
我目前正在调试 linux 内核,它已使用 kgdb 正确设置。
我为我要调试的函数设置了一个断点,一旦我运行需要这个内核函数来做某事的程序,就会发生中断,这是想要的。但每当我尝试使用“n”或“si”单步执行代码时,我总是会立即进入 arch/x86/include/asm/apic.h,然后运行一些中断处理代码和计时器。我知道内核被高度并行化,因此它必须在执行时移动到其他代码中,但是是否可以更舒适地单步执行该函数?
我想要达到的目标:
前:
-> A 行
B线
后:
A线
-> B 行
我现在拥有的:
前:
-> A 行
B线
后:
A线
...在这里跳转到不同的代码
c - addr2line 如何使用虚拟地址进行内核空间调试?
我正在尝试addr2line
将“pc”寄存器值从内核oops(示例)转换为内核代码中的一行。我相信程序计数器的值代表一个虚拟地址。
现在Stack Overflow 上的这篇文章说我们通常提供 addr2line 的偏移量而不是虚拟地址。VA 只能在地址空间随机化关闭时使用。这对内核也适用吗?我相信它应该。
幻灯片 14 上的这个嵌入式 Linux 会议演讲也使用程序计数器值跳转到代码行,但我相信这只有在地址空间随机化关闭时才有效。否则,一旦虚拟内存被初始化,内核可能会被随机重定位。在这种情况下,从 oops 中选择的任何虚拟地址对 addr2line 都没有任何意义。这都是理论。我现在有两个问题:
- 我的理解正确吗?如果没有,请纠正我。
- 我们如何关闭内核的地址空间随机化,以便可以预测符号的位置?