eBPF 开发环境的准备 - 教程
在开始编写eBPF程序之前,我们需要准备一个合适的开发环境,了解eBPF程序的基本开发流程。本节将详细介绍这些主题。
目录
1.安装必要的软件和工具
(1)Linux 内核:由于 eBPF 是一种内核技术,因此您需要拥有相对较新的 Linux 内核版本(最低版本 4.8 及以上,建议版本为 5.15+ 或 6.2+)才能支持 eBPF 功能。
如果可能,安装新版本的 Ubuntu(例如 23.10)会更好。
安装ubuntu的教程大家可以参考这篇文章
https://blog.csdn.net/weixin_52799373/article/details/139055794?fromshare=blogdetail&sharetype=blogdetail&sharerId=139055794&sharerefer=PC&sharesource=ZIAN2&sharefrom=from_link
(2)LLVM 和 Clang:这些工具用于编译 eBPF 程序。安装最新版本的 LLVM 和 Clang 可确保您获得最佳的 eBPF 支持。
使用下面命令安装llvm和clang
sudo apt update
sudo apt install llvm clang
查看安装信息
clang --version
llc --version
2.选择一个合适的开发框架
选择一个合适的开发框架,例如 BCC(BPF 编译器集合)、libbpf、cilium/ebpf 或 eunomia-bpf,之后您就可以开始开发用户空间和内核空间程序了。因为我这边使用的是纯c的ebpf开发,所以使用libbpf开发框架,如果您熟悉别的语言,也可以安装对应的开发框架
使用如下命令安装libbpf
sudo apt update
sudo apt update && sudo apt install -y libbpf-dev libelf-dev clang llvm linux-headers-$(uname -r)
3.下载并安装 eunomia-bpf 开发工具
使用以下步骤下载并安装 eunomia-bpf:
(1)使用wget命令下载ecli工具并设置可执行权限:
wget https://aka.pw/bpf-ecli -O ecli && chmod +x ./ecli
(2)安装eunomia-bpf所需的基本依赖项,包括libelf-dev、zlib1g-dev等开发库:
sudo apt update && sudo apt install -y libelf-dev zlib1g-dev build-essential linux-headers-$(uname -r)
(3)安装ecc编译器
wget --no-check-certificate -O ecc https://github.com/eunomia-bpf/eunomia-bpf/releases/latest/download/ecc
4.Hello World - 最小的 eBPF 程序
我们将从一个简单的 eBPF 程序开始,该程序在内核中打印消息。我们将使用 eunomia-bpf 编译器工具链将其编译成 BPF 字节码文件,然后使用 ecli 工具加载并运行程序。为了示例,我们可以暂时忽略用户空间程序。
创建minimal.bpf.c文件
/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
#define BPF_NO_GLOBAL_DATA
#include
#include
#include
typedef unsigned int u32;
typedef int pid_t;
const pid_t pid_filter = 0;
char LICENSE[] SEC("license") = "Dual BSD/GPL";
SEC("tp/syscalls/sys_enter_write")
int handle_tp(void *ctx)
{
pid_t pid = bpf_get_current_pid_tgid() >> 32;
if (pid_filter && pid != pid_filter)
return 0;
bpf_printk("BPF triggered sys_enter_write from PID %d.\n", pid);
return 0;
}
使用ecc编译程序
./ecc minimal.bpf.c
然后使用 ecli 运行编译后的程序
sudo ./ecli run package.json
运行此程序后,您可以通过查看 /sys/kernel/debug/tracing/trace_pipe 文件来查看 eBPF 程序的输出
sudo cat /sys/kernel/debug/tracing/trace_pipe | grep "BPF triggered sys_enter_write"
运行结果

按 Ctrl+C 停止 ecli 进程后,相应的输出也将停止。
本节对ebpf 开发环境的准备就到此为止了。
浙公网安备 33010602011771号