配置 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
clang和llvm:用于编译 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 Collectionbcc-tools:预置的 BCC 工具(如execsnoop、opensnoop)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"
- 确保以下选项为
y或m:
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 程序
- 新建
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"; - 编译:
clang -target bpf -O2 -g -c hello.c -o hello.o - 加载并运行:
sudo bpftool prog load hello.o /sys/fs/bpf/hello sudo cat /sys/kernel/debug/tracing/trace_pipe
常见问题
-
权限不足:
- 使用
sudo或为用户添加CAP_BPF权限:
sudo setcap cap_bpf+ep /path/to/your/program - 使用
-
头文件缺失:
- 确保已安装
linux-headers。
- 确保已安装
-
内核版本过低:
- Arch Linux 默认使用最新内核,若需自定义内核,请启用
CONFIG_BPF相关选项。
- Arch Linux 默认使用最新内核,若需自定义内核,请启用
进阶工具(可选)
- libbpf: Arch 官方仓库的
bpf包已包含。 - CO-RE 支持:直接使用
clang -target bpf编译即可(Arch 的 LLVM 版本已支持)。
通过以上步骤,你应该能够在 Arch Linux 上顺利开展 eBPF 开发!
其他
- 生成
vmlinux.h文件
bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h