Заголовки не работают на уровне ядра в коде eBPF

Так что я разрабатываю что-то на eBPF.

Мне нужно было использовать заголовок unistd.h, потому что я хотел использовать функцию сна.

Тем не менее, я понял, что когда я печатаю

#include <unistd.h>

эти заголовки не включаются, и я получаю сообщение об ошибке:

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

Я думал, что где-то сделал что-то не так в коде, поэтому я попытался включить этот заголовок в пример из учебника, и это тоже не сработало.

Таким образом, из кода, который я прикрепил ниже, я попытался установить задержку в одну секунду, прежде чем сообщение будет опубликовано.

Кто-нибудь имел такую ​​же проблему и как-то нашел способ использовать этот заголовок внутри кода C?

Я был бы очень признателен, если бы кто-нибудь смог мне помочь!

Бесконечно благодарен!

Я попытался обновить ядро ​​и переместил все файлы заголовков в каталог ёusr / local / includeё, потому что в Интернете было сказано, что это место, где компилятор сначала проверяет заголовки, но все равно не работает.

Вот код, который я пробовал, но не сработал.

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()

1 ответ

Я думаю, что вы хотите, что-то вроде, https://github.com/iovisor/bcc/blob/master/examples/networking/xdp/xdp_drop_count.py Поиск "сон" в этом коде.

Как сказал @Ctx, функция происходит, когда запускается системный вызов клона. Там нет никакого смысла в sleep(), и вы не можете сделать это в ядре, вызывающем sleep().

Возможно, вы захотите понять приведенный выше пример, чтобы увидеть, как он устанавливает интервалы для печати материала. Надеюсь, это поможет.

Другие вопросы по тегам