【发布时间】: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