eBPF 开发环境的准备 - 教程

在开始编写eBPF程序之前,我们需要准备一个合适的开发环境,了解eBPF程序的基本开发流程。本节将详细介绍这些主题。

目录

1.安装必要的软件和工具

2.选择一个合适的开发框架

3.下载并安装 eunomia-bpf 开发工具

4.Hello World - 最小的 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 开发环境的准备就到此为止了。

posted on 2025-12-14 08:43  ljbguanli  阅读(10)  评论(0)    收藏  举报