linux - 为什么 kprobe 在 Centos 7 内核 4.16.6 上不起作用?
问题描述
我在 CentOS 7 (Linux 4.16.6)
root@host # uname -r
4.16.6-1.el7.elrepo.x86_64
在文档之后,我添加了一个 kprobe 来跟踪sys_clone
:
root@host # grep sys_clone /proc/kallsyms
ffffffff81084c70 T sys_clone
root@host # echo 'p:testprobe sys_clone' >/sys/kernel/tracing/kprobe_events
root@host # cat /sys/kernel/tracing/kprobe_events
p:kprobes/testprobe sys_clone
root@host # cat /sys/kernel/tracing/events/kprobes/testprobe/id
1874
现在,如果我启用它,然后通过在另一个终端中运行任何命令来触发它,trace_pipe
则不包含任何数据:
root@host # echo 1 > /sys/kernel/tracing/events/kprobes/testprobe/enable
root@host # cat /sys/kernel/tracing/tracing_on
1
root@host # cat /sys/kernel/tracing/events/kprobes/testprobe/enable
1
root@host # cat /sys/kernel/tracing/events/kprobes/enable
1
root@host # cat /sys/kernel/tracing/trace_pipe
^C <-- it blocks here
内核配置看起来不错:
root@host # grep KPROBE /boot/config-4.16.6-1.el7.elrepo.x86_64
CONFIG_KPROBES=y
CONFIG_KPROBES_ON_FTRACE=y
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KPROBES_ON_FTRACE=y
CONFIG_KPROBE_EVENTS=y
# CONFIG_BPF_KPROBE_OVERRIDE is not set
kprobes 不工作的可能原因是什么?