eBPF入门系列:Cilium ebpf本地开发环境配置

一、环境搭建与 ebpf 示例代码调试

本地环境

  • Golang 1.20.8

  • Ubuntu 22.04 (5.15.0-84-generic)

1、安装依赖

# llvm版本不低于11
$ apt install clang llvm

2、配置环境变量

$ export BPF_CLANG=clang

3、将 Cilium ebpf 项目克隆到本地

$ git clone https://github.com/cilium/ebpf.git

4、测试

进入 examples/kprobe 目录,删除已经生成的大小端文件

$ cd examples/kprobe
$ rm bpf_bpf*

执行 go generate 生成大小端依赖文件

执行 go build 生成二进制文件,执行二进制文件:

$ sudo ./kprobe
2023/11/16 06:06:04 Waiting for events..
2023/11/16 06:06:05 sys_execve called 0 times
2023/11/16 06:06:06 sys_execve called 0 times
2023/11/16 06:06:07 sys_execve called 0 times
2023/11/16 06:06:08 sys_execve called 0 times

打印的结果为执行 sys_execve 的次数,若正确输出则说明环境搭建成功。

二、创建自己的 eBPF 项目

建立自己项目文件夹并进入

$ mkdir YOUR_PATH && cd YOUR_PATH

cilium/ebpf 项目 examples 目录相关文件复制过来

$ cd CILIUM_EBPF_PATH/examples   # 替换为自己的Cilium eBPF路径
$ cp -r headers/ YOUR_PATH       # 头文件目录
$ cp kprobe/main.go YOUR_PATH    # Go主程序
$ cp kprobe/kprobe.c YOUR_PATH   # eBPF C程序

初始化 go 项目

$ go mod init ebpf-test && go mod tidy

生成 eBPF C 程序对应的 go 数据结构,每次 C 程序有更新时需要重新执行。go generate 执行有报错时优先检查 C 程序头文件路径是否正确

$ go generate
Compiled /home/mars/devSpace/ebpf/bpf_bpfel.o
Stripped /home/mars/devSpace/ebpf/bpf_bpfel.o
Wrote /home/mars/devSpace/ebpf/bpf_bpfel.go
Compiled /home/mars/devSpace/ebpf/bpf_bpfeb.o
Stripped /home/mars/tmp/devSpace/ebpf/bpf_bpfeb.o
Wrote /home/mars/devSpace/ebpf/bpf_bpfeb.go

go build 执行完成则证明配置成功。

参考

Cilium-eBPF-搭建与使用

Getting Started with eBPF in Go

Last updated