诗筝彩绮
诗筝彩绮
发布于 2026-07-10 / 3 阅读
0
0

在 Arch Linux 上配置 eBPF 开发环境

配置 eBPF 环境

1. 更新系统

sudo pacman -Syu

2. 安装基础工具

sudo pacman -S linux-tools base-devel
  • linux-tools:基础开发工具
  • base-devel:基础编译工具

3. 安装核心依赖

sudo pacman -S clang llvm linux-headers bpf
  • clangllvm:用于编译 eBPF 程序
  • linux-headers:内核头文件
  • bpf:提供 libbpf 库

推荐安装与当前内核版本对应的 linux-headers

sudo pacman -S "linux$(uname -r | awk -F. '{ printf "%d%02d", $1, $2 }')-headers"

4. 安装调试工具

sudo pacman -S bpftrace perf
  • bpftrace:高级 eBPF 跟踪工具
  • perf:性能分析工具(支持 eBPF)

5. 安装 BCC 工具集(可选)

sudo pacman -S bcc bcc-tools python-bcc
  • bcc:BPF Compiler Collection
  • bcc-tools:预置的 BCC 工具(如 execsnoopopensnoop
  • python-bcc:Python 绑定

验证 eBPF 环境

1. 验证内核支持

  • 检查内核配置:
grep -E "BPF|BTF|TRACING" /boot/config-$(uname -r)

Manjaro Linux 使用 zcat /proc/config.gz | grep -E "BPF|BTF|TRACING"

  • 确保以下选项为 ym
CONFIG_BPF=y
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_JIT=y
CONFIG_DEBUG_INFO_BTF=y

测试 eBPF 环境

示例 1:使用 bpftrace

sudo bpftrace -e 'BEGIN { printf("Hello eBPF!\n"); }'

Ctrl+C 退出,看到输出即为成功。

示例 2:编译简单 eBPF 程序

  1. 新建 hello.c
    #include <linux/bpf.h>
    #include <bpf/bpf_helpers.h>
    
    SEC("tracepoint/syscalls/sys_enter_execve")
    int hello(void *ctx) {
        char msg[] = "Hello eBPF!\n";
        bpf_trace_printk(msg, sizeof(msg));
        return 0;
    }
    
    char _license[] SEC("license") = "GPL";
    
  2. 编译:
    clang -target bpf -O2 -g -c hello.c -o hello.o
    
  3. 加载并运行:
    sudo bpftool prog load hello.o /sys/fs/bpf/hello
    sudo cat /sys/kernel/debug/tracing/trace_pipe
    

常见问题

  1. 权限不足

    • 使用 sudo 或为用户添加 CAP_BPF 权限:
    sudo setcap cap_bpf+ep /path/to/your/program
    
  2. 头文件缺失

    • 确保已安装 linux-headers
  3. 内核版本过低

    • Arch Linux 默认使用最新内核,若需自定义内核,请启用 CONFIG_BPF 相关选项。

进阶工具(可选)

  • libbpf: Arch 官方仓库的 bpf 包已包含。
  • CO-RE 支持:直接使用 clang -target bpf 编译即可(Arch 的 LLVM 版本已支持)。

通过以上步骤,你应该能够在 Arch Linux 上顺利开展 eBPF 开发!

其他

  1. 生成 vmlinux.h 文件
bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h

评论