headers 无法在 eBPF 代码的内核级别上工作

headers not working at a kernel level on eBPF code

所以我正在 eBPF 上开发一些东西。

我需要使用 unistd.h header 因为我想使用睡眠功能。

然而,当我输入

时,我意识到
#include <unistd.h>

这些 header 未包含在内,我会收到一条错误消息:

warning : implicit delcaration of function 'sleep' is invalid in C99 [-Wimplicit-Function-declaration] sleep (1);

我认为我在代码的其他地方做错了,所以我尝试将 header 包含在教程的示例中,但它也没有那样工作。

因此,根据我在下面附加的代码,我尝试在消息发布之前延迟一秒钟。

有没有人遇到过同样的问题并且找到了在 c 代码中使用 header 的方法?

如果有人能给我一些帮助,我将不胜感激!

万分感谢!

我尝试更新内核并将所有 header 文件移动到 ёusr/local/includeё 目录,因为它在互联网上说这是编译器首先检查 headers 但仍然没有工作的地方。

这是我试过但没有用的代码。

from bcc import BPF
BPF(text = 'int kprobe__sys_clone(void *ctx)
{
  #include <unistd.h>

  sleep(1);
  bpf_trace_printk("Hello World!\n");
  return 0;
}
').trace_print()

我想你想要的是,https://github.com/iovisor/bcc/blob/master/examples/networking/xdp/xdp_drop_count.py 在该代码中搜索 "sleep"。

正如@Ctx 所说,该函数在触发克隆系统调用时发生。 sleep() 在那里没有意义,你也不能在内核调用 sleep() 中这样做。

你可能想了解上面的例子,看看它是如何设置间隔来打印东西的。希望对您有所帮助。