Linux tracing/trace_pipe 文件不可读 (debugfs)

Linux tracing/trace_pipe file not readable (debugfs)

我有写入 trace_pipe 文件的 BPF 程序,即使程序正确执行,我也无法从该文件读取数据。

每当我尝试 cat /sys/kernel/debug/tracing/trace_pipe 时,进程都会卡住,并且没有任何输出显示。

我已经通过 运行 手动挂载了 debugfs:mount -t debugfs none /sys/kernel/debug 当我尝试 cat、tail、vi 或以某种方式读取此文件的内容时,结果是一样的。

“trace_pipe”文件甚至在我挂载 debugfs 后也是不可读的,所以我不认为这与我的 BPF 代码执行有关。

这个文件根本不可读,我想知道我应该怎么做才能阅读它。

我可以确认 debugfs 已正确挂载,并且文件确实存在:

感谢任何有关如何阅读此文件的提示。

所以这只是您的 eBPF 程序中的一个错误。来自你的 link:

int my_pid = 0;

SEC("tp/syscalls/sys_enter_write")
int handle_tp(void *ctx)
{
    int pid = bpf_get_current_pid_tgid() >> 32;

    if (pid != my_pid)
        return 0;

    bpf_printk("BPF triggered from PID %d.\n", pid);

    return 0;
}

具有 if (pid != my_pid) return 0;my_pid = 0,意味着每次您收集的 PID 为非 0 时您都会退出 - 这几乎是 一直 .所以你的程序提前退出,你没有机会执行对 bpf_printk() 的调用并将数据发送到跟踪管道。