编译ebpf

先升级内核:

优快云

yum install -y centos-release-scl
yum install -y devtoolset-11-gcc-c++ iperf3
wget http://repo.iotti.biz/CentOS/7/x86_64/netperf-2.7.0-1.el7.lux.x86_64.rpm
rpm -ivh netperf-2.7.0-1.el7.lux.x86_64.rpm
rpm -e gcc-4.8.5  gcc-c++-4.8.5
ln -s /opt/rh/devtoolset-11/root/bin/cc /usr/bin/cc
ln -s /opt/rh/devtoolset-11/root/bin/c++ /usr/bin/c++
ln -s /opt/rh/devtoolset-11/root/bin/gcc /usr/bin/gcc

以下报错解决办法:

CMake Error at CMakeLists.txt:1256 (add_subdirectory):
add_subdirectory given source
"/opt/llvm-14.0.3.src/../third-party/benchmark" which is not an existing
  directory.

https://github.com/llvm/llvm-project/issues/54941

从github上面看到,貌似是cmake的bug或feature

解决方案:

vi CMakeCache.txt
LLVM_INCLUDE_BENCHMARKS:BOOL=OFF
### 在 Ubuntu 22.04 上编译 eBPF 程序的步骤 在 Ubuntu 22.04 上编译 eBPF 程序需要确保开发环境正确配置,并利用内核源码中的 `samples/bpf` 目录或独立的工具链(如 BCC 或 libbpf)来完成编译任务。以下是详细的解决方案: #### 1. 安装必要的依赖 在开始编译之前,需要安装一系列依赖项,包括构建工具、LLVM 和 libbpf 库。这些工具为 eBPF 程序的编译和运行提供了支持。 ```bash sudo apt update sudo apt install -y build-essential llvm clang bpfcc-tools linux-headers-$(uname -r) libbpf-dev ``` 上述命令会安装以下关键组件: - `build-essential`: 提供 GCC 和 Make 等基础构建工具。 - `llvm` 和 `clang`: 用于将 eBPF 程序编译为字节码。 - `bpfcc-tools`: 包含 BCC 工具集,简化 eBPF 开发流程。 - `linux-headers-$(uname -r)`: 当前运行内核的头文件,用于与内核交互。 - `libbpf-dev`: 提供 libbpf 库的开发头文件和工具[^3]。 #### 2. 获取内核源码并构建示例程序 如果计划使用内核自带的 eBPF 示例程序,可以克隆 Linux 内核源码仓库,并导航至 `samples/bpf` 目录。 ```bash git clone https://github.com/torvalds/linux.git cd linux/samples/bpf make ``` 此过程会编译 `samples/bpf` 目录下的所有示例程序,生成的 `.o` 文件即为 eBPF 字节码[^1]。 #### 3. 使用 Clang 编译独立的 eBPF 程序 对于独立编写的 eBPF 程序,可以通过 Clang 编译器直接生成字节码。以下是一个简单的示例程序及其编译命令: ##### 示例程序:跟踪 `clone` 系统调用 ```c #include <linux/bpf.h> #include <bpf/bpf_helpers.h> SEC("kprobe/sys_clone") int kprobe_clone(struct pt_regs *ctx) { bpf_printk("clone called pid=%d\n", bpf_get_current_pid_tgid() >> 32); return 0; } char _license[] SEC("license") = "GPL"; ``` ##### 编译命令 ```bash clang -O2 -target bpf -c program.c -o program.o ``` - `-O2`: 启用优化以提高性能。 - `-target bpf`: 指定目标架构为 eBPF。 - `-c`: 仅编译而不链接。 - `-o program.o`: 输出为目标字节码文件。 通过上述命令,生成的 `program.o` 文件即可加载到内核中运行[^2]。 #### 4. 加载和验证 eBPF 程序 编译完成后,可以使用 `bpftool` 或其他工具加载并验证 eBPF 程序。 ```bash sudo bpftool prog load program.o /sys/fs/bpf/my_program type kprobe sudo bpftool prog show ``` 上述命令将程序加载到内核中,并显示其详细信息。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值