我有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 包,这比自己重新编译整个内核要轻松得多:
如果没有匹配的 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
可以安装以正确安装调试信息符号的包。