我想从ftrace在rapberry pi 3上输出的函数地址获取内核源代码文件名和内核函数的行号。
我在树莓派3上尝试过addr2line -e /boot/kernel8.img [function address]
,但返回了addr2line: /boot/kernel8.img: File format not recognized
。
注意:
kernel8.img
是我编译的自定义内核。我从https://github.com/raspberrypi/linux.git
克隆内核源代码,检出到rpi-4.18.y
,打开CONFIG_DEBUG_INFO
,然后运行make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j4
。此编译工作是在ubuntu x86_64 linux内核4.15.0-23-generic上执行的。 kernel8.img的类型如下。
$ file kernel8.img
kernel8.img: MS-DOS executable
谢谢
答案 0 :(得分:0)
您需要针对addr2line
文件(即未压缩/原始内核二进制文件)运行vmlinux
。 /boot/kernel8.img
最有可能是zImage
(即压缩内核)。
编译后,您可以在内核源代码的根目录中找到vmlinux
文件。