2

我想构建一个支持eBPFCentOS 7内核版本为3.10.0)的应用程序:

if(setsockopt(sock, SOL_SOCKET, SO_ATTACH_BPF, prog_fd, sizeof(prog_f)) {
    ......
}

于是我下载了一个4.0.5版本,在上面进行如下配置:

CONFIG_BPF=y
CONFIG_BPF_SYSCALL=y

然后按照此链接构建和安装4.0.5内核。

执行后make modules_install install发现还是没有SO_ATTACH_BPFin <asm-generic/socket.h>,所以上面的代码无法编译成功。

如何构建 Linux 内核以支持SO_ATTACH_BPF套接字选项?

4

2 回答 2

2

在我的基于 Fedora 21 的设置中,我使用与您链接的步骤非常相似的步骤来编译和安装最新内核。作为附加步骤,我将从内核构建树执行以下操作,以将内核头文件安装到 /usr/local/include 中:

sudo make INSTALL_HDR_PATH=/usr/local headers_install

这将导致股票内核头文件保持安装/usr/include/{linux,asm,asm-generic,...}/usr/local/include/{linux,asm,asm-generic,...}. 在您的测试程序编译期间,根据您使用的构建系统,您可能需要在 gcc/clang 前加上-I/usr/local/include.

于 2015-06-09T17:01:21.117 回答
0

您新安装的内核支持SO_ATTACH_BPF,但您当前的libc软件包现在不支持(正如您提到的,发行版的本机 3.10.0 内核缺乏给定的选项支持)。

您还需要更新libc软件包以在用户空间程序中使用新内核的功能。

于 2015-06-09T09:08:57.917 回答