#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