заголовки не работают на уровне ядра в коде eBPF - PullRequest
0 голосов
/ 28 марта 2019

Итак, я что-то разрабатываю на 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 Ответ

1 голос
/ 08 апреля 2019

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

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

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

...