项目简介
本项目是一款轻量的eBPF运行时系统,可在用户态、嵌入式、内核等多种环境下运行。项目主要由编译工具和runtime两部分构成,编译工具能将eBPF文件编译为SPF/BARE文件,runtime负责运行这些文件。当前支持ARM64和X86 - 64两种目标指令集,支持输出SPF和BARE两种文件格式。
项目的主要特性和功能
特性
- 轻量:runtime极度轻量,移植代价极低。
- 兼容:兼容嵌入式、内核、用户态、跨OS、跨硬件平台等多种运行环境。
- 灵活:APP开发难度低,部署灵活快速,支持动态加载和卸载APP。
- 高性能:可编译为本地指令执行。
- 节省空间:BARE和SPF格式文件占用空间小,对资源紧张的嵌入式系统友好。
功能
- 支持多种eBPF运行方式,包括字节码解释执行、JIT成本机指令执行、编译为SPF/BARE文件运行。
- 编译工具可将eBPF文件编译为SPF/BARE文件。
- runtime提供多种运行模式,如运行BARE文件、以交互模式运行BARE文件、运行SPF文件等。
安装使用步骤
编译
假设用户已经下载了本项目的源码文件,进入项目目录:
cd mybpf
根据不同的操作系统选择相应的编译脚本:
- 在MACOS机器上:
./build_macos.sh
- 在Linux机器上:
./build_linux.sh
编译结果位于build/out/spf/
目录下。
用法
编译为SPF格式
spfbuilder convert -j ebpf文件名 -o 输出文件名
执行SPF格式文件
spfbuilder run SPF文件名
runtime使用
- bare - cmd:以命令行方式执行BARE文件
bare-cmd file.bare
- bare_interactive:交互模式的bare runtime
- spfcmd:SPF runtime,依赖
spf_loader.bare
文件 将spfcmd
和spf_loader.arm64.bare
、spf_loader.x64.bare
放在一起,执行bare_spf:./spfcmd
加载spf文件:load instance_name file.spf
卸载spf文件:unload instance instance_name
卸载所有spf文件:unload all
触发cmd执行:testcmd [args]
执行bare_spf时,可使用选项-c load.cfg
指定配置文件自动加载APP。
使用示例
``` cd mybpf ./build_mac.sh 或者./build_linux.sh cd build/out/spf_runtime cp ../../../loader/.bare./ cp ../../../example/ulc/test/.o./ ../tool/runbpf con bare test_sub_prog.o -o test_sub_prog.bare ./bare_cmd test_sub_prog.bare ../tool/runbpf con simple test_func_ptr_global.o -o test_func_ptr_global.spf -j ./bare_spf
load test test_func_ptr_global.spf testcmd quit ```
编写APP示例
cd example/ulc/test
创建hello_world.c
文件,内容如下:
```c
include "utl/ulc_user.h"
SEC("tcmd/hello_test")
int main()
{
printf("Hello world!! \n");
return 0;
}
编译成eBPF字节码文件:
clang -O2 -I ../../../h -target bpf -c hello_world.c -D IN_ULC_USER
```
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】