Linux:性能最高,未找到内核符号

Posted

技术标签:

【中文标题】Linux:性能最高,未找到内核符号【英文标题】:Linux: perf top, kernel symbol not found 【发布时间】:2016-01-13 06:17:57 【问题描述】:

Ubuntu 15.04,编译并安装了 Linux-Next 内核 2015-06-04。

然后启动这个内核,然后运行 ​​perf top,但它显示符号未找到。

如何在 perf 中手动加载内核符号?

root@ubuntu-server:/boot# uname -r
4.1.0-rc6.060402222+

root@ubuntu-server:/proc# ls kall*
kallsyms

root@ubuntu-server:/boot# ls | grep 4.1.0-rc6.060402222
config-4.1.0-rc6.060402222+
initrd.img-4.1.0-rc6.060402222+
System.map-4.1.0-rc6.060402222+
vmlinuz-4.1.0-rc6.060402222+

root@ubuntu-server:/# perf top
No kallsyms or vmlinux with build-id 438e4365574d514672888bcfdd6292dbcf71f38f was found
[kernel.kallsyms] with build id 438e4365574d514672888bcfdd6292dbcf71f38f not found, continuing without symbols
Warning:
A vmlinux file was not found.
Kernel samples will not be resolved.
^C

root@ubuntu-server:/proc# perf top -k /boot/vmlinuz-4.1.0-rc6.060402222+
Warning:
The /boot/vmlinuz-4.1.0-rc6.060402222+ file can't be used: Success
Kernel samples will not be resolved.
^C

在 Linux-next 文件夹中,.config 文件已启用内核调试:

CONFIG_DEBUG_KERNEL=y

【问题讨论】:

您有/proc/kallsyms 文件吗? CONFIG_DEBUG_KERNEL 是否在您的 Linux 配置文件中定义?您是否尝试过选项-k--vmlinux(它们的意思相同)来指定vmlinux 路径? 是的。请参阅我更新的问题。 这回答了三个问题之一:-) 【参考方案1】:

我安装了 perf,然后运行“perf top”,得到以下消息:

警告:

找不到 vmlinux 文件。

不会解析内核样本。

安装“libelf-dev”后,我再次编译perf并进行安装。 最后,我运行“perf top”并得到正确的结果。

在安装perf的过程中,系统会提供一些提示。例如:

config/Makefile:276: 未找到 libelf,禁用“探测”工具,请安装 elfutils-libelf-devel/libelf-dev

config/Makefile:327:未找到 libunwind,禁用 post unwind 支持。请安装 libunwind-dev[el] >= 1.1

config/Makefile:350: 找不到 libaudit.h,禁用“跟踪”工具,请安装 audit-libs-devel 或 libaudit-dev

config/Makefile:364: 俚语未找到,禁用 TUI 支持。请安装 slang-devel 或 libslang-dev

按照这些提示,也许您可​​以解决您的问题。

【讨论】:

以上是关于Linux:性能最高,未找到内核符号的主要内容,如果未能解决你的问题,请参考以下文章

访问未通过 EXPORT_SYMBOL* 导出的 Linux 内核符号

Linux 内核驱动程序构建 (NVidia) 的未定义符号

如何在 Linux 内核模块中找到合适的 DWARF 符号作为地址?

怎么查看linux的内核符号表?

perf 可以在内核中找到符号,但在我的程序中找不到符号。如何解决?

linux内核符号表kallsyms简介