如何为我的 Linux 内核获取 bpf_helpers.h header 文件?

How can I get the bpf_helpers.h header file for my Linux kernel?

我正在 Ubuntu 机器上开发 eBPF 程序:

$ 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 用于辅助函数定义。我用 headers:

安装了一个新内核
apt-get update -y
apt-get install -y linux-image-4.18.0-16-generic linux-headers-4.18.0-16-generic

headers包括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

我如何为我的内核获取这个文件,为什么它没有包含在发行版中 headers?

我可以检查特定版本的 Linux 内核或从 master 获取文件,但发行版可能对上游进行了更改,这让我这样做很不舒服。

bpf_helpers.hnot distributed with the kernel headers,但带有 libbpf。

您可以在 Ubuntu 上安装 libbpf:

apt install libbpf-dev

或者您可以从 https://github.com/libbpf/libbpf 的源安装它。

在 Ubuntu 我安装了 libbpf-dev 来获得 header:

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