安装步骤
以下是安装步骤表:
| 组件 | 安装方法 | 关键命令/操作 | 主要参考来源与说明 |
|---|---|---|---|
| 编译工具链 | APT安装 | sudo apt install -y git build-essential clang llvm libelf-dev pkg-config |
基础依赖。 |
| Linux内核头文件 | APT安装 | sudo apt install -y linux-headers-$(uname -r) |
编译eBPF程序必需。 |
bpftool |
源码编译 | 详见下方"源码编译bpftool"。 | 在Ubuntu 24.04上,不建议 直接用apt install bpftool,可能出现版本不匹配问题。 |
xdp-tools 和 libxdp |
APT安装 | sudo apt install -y linux-tools-common linux-tools-generic linux-cloud-tools-generic libbpf-dev xdp-tools libxdp-dev |
包含xdpdump等工具和libxdp开发库。 |
说明 :在Ubuntu 24.04上安装 bpftool 较特殊。不建议 直接通过 apt install linux-tools-common 安装,因为可能版本不匹配。建议通过以下步骤源码编译:
bash
# 安装依赖
sudo apt update
sudo apt install -y build-essential libelf-dev binutils-dev pkg-config
# 1. 克隆 bpftool 仓库(包含子模块)
git clone --recurse-submodules https://github.com/libbpf/bpftool.git
cd bpftool/src
# 2. 编译
make
# 3. 安装到系统路径(默认是 /usr/local/bin)
sudo make install
# 应输出类似:bpftool v7.0.0
bpftool --version
环境配置
1. 检查内核配置
AF_XDP和eBPF是内核特性,安装前需确保内核已启用相关配置:
bash
cat /boot/config-$(uname -r) | grep -E "XDP|BPF"
请确保输出中包含 CONFIG_XDP_SOCKETS=y 和 CONFIG_BPF=y 等关键选项。
2. 生成 vmlinux.h 头文件
此文件包含了内核数据结构定义,是编写eBPF程序的常用头文件。确认内核支持BTF后(检查 /sys/kernel/btf/vmlinux 文件是否存在),使用刚安装的 bpftool 生成:
bash
sudo bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h
之后在eBPF内核代码中只需 #include "vmlinux.h"。
开发环境验证
安装完成后,可以通过一个简单的XDP程序测试环境。
-
编写一个测试XDP程序 (如
xdp_pass.c):c#include <linux/bpf.h> #include <bpf/bpf_helpers.h> SEC("xdp") int xdp_pass_func(struct xdp_md *ctx) { return XDP_PASS; } char _license[] SEC("license") = "GPL"; -
编译eBPF程序 :
bashclang -O2 -target bpf -I /usr/include/x86_64-linux-gnu -c xdp_pass.c -o xdp_pass.o -
使用
xdp-tools测试 :
利用xdp-loader(来自xdp-tools)加载程序到网络接口(如eth0),模式选择native:bashsudo xdp-loader load -m native eth0 xdp_pass.o使用
xdpdump(同样来自xdp-tools)监听接口,可以观察到流量正常通过。
后续
- 权限问题 :加载XDP程序通常需要
root权限。如果需要在非特权环境下运行AF_XDP程序,需要进行额外的内核和权限配置。 - 网卡驱动支持 :XDP的
native模式性能最优,但需要网卡驱动程序的支持。你可以通过ethtool -i <网卡名>查看驱动,并查阅相关驱动文档确认支持情况。