AF_XDP开发环境(Ubuntu24.04.3)

安装步骤

以下是安装步骤表:

组件 安装方法 关键命令/操作 主要参考来源与说明
编译工具链 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-toolslibxdp 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=yCONFIG_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程序测试环境。

  1. 编写一个测试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";
  2. 编译eBPF程序

    bash 复制代码
    clang -O2 -target bpf -I /usr/include/x86_64-linux-gnu -c xdp_pass.c -o xdp_pass.o
  3. 使用 xdp-tools 测试
    利用 xdp-loader(来自xdp-tools)加载程序到网络接口(如 eth0),模式选择 native

    bash 复制代码
    sudo xdp-loader load -m native eth0 xdp_pass.o

    使用 xdpdump(同样来自xdp-tools)监听接口,可以观察到流量正常通过。

后续

  • 权限问题 :加载XDP程序通常需要root权限。如果需要在非特权环境下运行AF_XDP程序,需要进行额外的内核和权限配置。
  • 网卡驱动支持 :XDP的native模式性能最优,但需要网卡驱动程序的支持。你可以通过 ethtool -i <网卡名> 查看驱动,并查阅相关驱动文档确认支持情况。
相关推荐
爱写代码的森35 分钟前
鸿蒙三方库 | harmony-utils之ImageUtil图片保存到本地详解
服务器·华为·harmonyos·鸿蒙·huawei
大耳朵-小飞象3 小时前
电力安全运维的智能密码:BACS如何破解设备全生命周期管理难题,让电网安全“看得见、管得住”?
运维·安全·智慧城市·能耗系统·楼宇智控·未来生活
极客侃科技4 小时前
制造企业 MES/APS 选型:SAP PP/DS 集成、ERP-MES 边界划分与一体化架构要点
运维·架构·制造
HLC++4 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室5 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
白露与泡影6 小时前
Arthas 实战指南:从方法耗时定位到 JVM 变量热修改
服务器·jvm·c#
神奇霸王龙7 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
Web极客码7 小时前
WordPress SEO优化:提升网站排名的13个关键步骤
服务器·seo·wordpress
生活爱好者!7 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
groundhappy8 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python