【问题标题】:Why couldn't I get the source code line from addr2line?为什么我无法从 addr2line 获取源代码行?
【发布时间】:2020-11-14 04:03:41
【问题描述】:

我正在尝试从 addr2line 获取 rasbian 5.4.y 内核的源代码行。

我的宿主环境是virtualbox上的ubuntu18.04.2,我正在用arm-linux-gnueabihf-cross-compiler编译内核。

我使用 bcm2711_defconfig 配置编译内核,因为目标机器是 Raspberry Pi 4,遵循官方指南 https://www.raspberrypi.org/documentation/linux/kernel/building.md,具有 32 位 arm arch 配置。我根本没有修改任何内核配置。

我通过使用objdump从vmlinux获得了一个函数的地址(这里是_local_bh_enable,例如),如下所示,

$ arm-linux-gnueabihf-objdump -x linux/vmlinux | grep _local_bh_enable
...
c0227a28 g     F .text  00000098 _local_bh_enable

正如你在上面看到的,我得到 _local_bh_enable 的地址为 0xc0227a28。

然后我运行 addr2line 来获取地址行,但我得到了一些奇怪的结果,如下所示。

$ arm-linux-gnueabihf-addr2line -fe linux/vmlinux -a 0xc0227a28
0xc0227a28
_local_bh_enable
.tmp_vmlinux.kallsyms2.o:?

我不明白那是什么意思。不是应该给源文件名加上行号吗?

我也尝试了许多其他功能,但最终还是使用“.tmp_vmlinux.kallsyms2.o:?”,而不是我期望得到的代码行。

我在这里遗漏了什么吗?请为此提供任何帮助。

提前致谢。

【问题讨论】:

    标签: c linux-kernel embedded-linux


    【解决方案1】:

    我检查了内核配置,发现没有设置 CONFIG_DEBUG_INFO。这似乎是原因。 我正在编译带有 CONFIG_DEBUG_INFO 设置的内核,让我看看它是否工作。

    【讨论】:

    • 我已经确认它在使用 CONFIG_DEBUG_INFO 编译内核后可以工作。 addr2line 现在工作正常。
    猜你喜欢
    • 1970-01-01
    • 2011-08-30
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 2017-05-16
    相关资源
    最近更新 更多