1

我构建了一个自定义内核 3.2-41,需要 kernel-debuginfo-common 和 kernel-debuginfo 包。我在内核 2.6.32-358 的 CentOS 系统上安装了这些软件包。使用新内核可以正常启动系统。我运行 stap 来列出系统调用和内核函数,没有任何问题:

# stap -l 'syscall.*'
# stap -l 'kernel.function("*")'

但是,运行一个简单的 stap 脚本:

# stap -e 'probe "kernel.function("do_fork"){printf("fork is called\n")}'

返回错误:

make[1]: *** No rule to make target`/tmp/stap2QWXn/stap_12cd14bbeaab6bfcaac79c1830a62d98_710.src needed by /tmp/stap2QXn/stap_12cd14bbeaab6bfcaac79c1830a62d98_710.o 
Stop.
make: *** [_module/stap2QWXn] Error 2
WARNING: kbuild exited with status: 2
pass 4: compilation failed. Try again with another '--vp 001' option.

我在 /usr/src/kernels/3.2-41 下解压 3.2-41 的源码。我没有安装 kernel-headers-3.2.41.x86_64.rpm 软件包,因为它试图覆盖 CentOS 2.6.32-258 内核使用的 /usr/include/ 目录。我需要在 /usr/include 中安装头文件吗?这会导致这个问题吗?

4

2 回答 2

0

我的猜测是这与内核版本无关;也许 /tmp 出了点问题(完整?权限问题?)。使用 stap -k 重试(保留 tmpdir)。您应该会看到生成的 stap_..._src.c 文件和其他一些文件。

于 2013-06-07T20:02:05.570 回答
0

确保您安装了最新版本的 gcc。

sudo apt-get update
sudo apt-get install gcc
于 2019-10-15T09:34:37.040 回答