使用调试符号编译自定义内核

使用调试符号编译自定义内核

我有Ubuntu 14.04内核Linux-3.14.3-rt51。我需要使用Systemtap,所以我在编译内核时选择了以下选项make menuconfig

常规设置
[*] Kprobes
[*] Kernel->user space relay support (formerly relayfs)

内核入侵
[*] Debug Filesystem
[*] Kernel debugging
[*] Compile the kernel with debug info

但是当我stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}'在内核上运行时,看到以下警告:

WARNING: cannot find module nfs debuginfo: No DWARF information found [man warning::debuginfo]
WARNING: cannot find module sunrpc debuginfo: No DWARF information found [man warning::debuginfo]  

出了什么问题?有人能帮助我吗?

答案1

如果你只需要内核符号来运行 systemtap,最简单的方法是为你的内核安装 dbgsym 包,这比自己重新编译整个内核要轻松得多:

前往如何安装 Ubuntu 内核调试符号

如果没有匹配的 dbgsym 包,您可能需要升级内核。
请参阅apt-cache search 'linux-image.*dbgsym'当前带有调试符号的内核列表。

答案2

您如何将这个自定义内核安装到您的系统上?您使用的确切 CONFIG 参数是什么?

如果您使用原装 Ubuntu 内核,则可以按照以下步骤使用 Systemtap: https://wiki.ubuntu.com/Kernel/Systemtap

make deb-pkg对于自定义内核安装,您可能需要确保调试符号位于 Systemtap 知道要检查的位置。例如,如果您使用构建内核,它将生成一个linux-image-$KVER-dbg可以安装以正确安装调试信息符号的包。

相关内容