Как я могу получить файл заголовка bpf_helpers.h для моего ядра Linux?

#linux #linux-kernel #header-files #bpf #ebpf

#linux #linux-ядро #заголовочные файлы #bpf #ebpf

Вопрос:

Я разрабатываю программу eBPF на компьютере с Ubuntu:

 $ uname -a
Linux ubuntu-bionic 4.18.0-16-generic #17~18.04.1-Ubuntu SMP Tue Feb 12 13:35:51 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
  

Для этого мне нужны оба, bpf.h как для ряда определений, так и bpf_helpers.h для определений вспомогательных функций. Я установил новое ядро с заголовками:

 apt-get update -y
apt-get install -y linux-image-4.18.0-16-generic linux-headers-4.18.0-16-generic
  

Заголовки включают bpf.h :

 $ find /usr/src/linux-headers-4.18.0-16 -name bpf.h
/usr/src/linux-headers-4.18.0-16/include/uapi/linux/bpf.h
/usr/src/linux-headers-4.18.0-16/include/linux/bpf.h
  

но не bpf_helpers.h :

 $ find /usr/src/linux-headers-4.18.0-16 -name bpf_helpers.h
  

Как я могу получить этот файл для моего ядра и почему он не включен в заголовки дистрибутива?

Я мог бы проверить определенную версию ядра Linux или получить файл от master, но дистрибутив потенциально мог внести изменения в upstream, что делает меня неудобным при выполнении этого.

Комментарии:

1. Рассматривали ли вы возможность поиска в пакете Ubuntu с исходным кодом Linux, то есть в исходном пакете ядра вашей целевой ОС?

Ответ №1:

bpf_helpers.h распространяется не с заголовками ядра, а с libbpf.

Вы можете установить libbpf на Ubuntu с:

 apt install libbpf-dev
  

Или вы можете установить его из исходных текстов по адресуhttps://github.com/libbpf/libbpf.

Комментарии:

1. Как вы могли определить, что он не распространяется с заголовками ядра? Ваша ссылка просто показывает, что файл находится в определенном месте.

2. Если бы он распространялся с заголовками ядра, он был бы в github.com/torvalds/linux/tree/master/include/uapi/linux , например bpf.h , bpf_common.h и btf.h .

3. После установки вы можете включить файл заголовка bpf_helpers, например, с помощью #include <bpf/bpf_helpers.h> для C

Ответ №2:

В Ubuntu я установил libbpf-dev для получения этого заголовка:

 sudo apt-get install libbpf-dev
  
 $ apt-file list libbpf-dev | grep bpf_helpers.h
libbpf-dev: /usr/include/bpf/bpf_helpers.h