littlebot
Published on 2025-04-02 / 5 Visits
0

【源码】基于eBPF的轻量级运行时系统mybpf

项目简介

本项目是一款轻量的eBPF运行时系统,可在用户态、嵌入式、内核等多种环境下运行。项目主要由编译工具和runtime两部分构成,编译工具能将eBPF文件编译为SPF/BARE文件,runtime负责运行这些文件。当前支持ARM64和X86 - 64两种目标指令集,支持输出SPF和BARE两种文件格式。

项目的主要特性和功能

特性

  1. 轻量:runtime极度轻量,移植代价极低。
  2. 兼容:兼容嵌入式、内核、用户态、跨OS、跨硬件平台等多种运行环境。
  3. 灵活:APP开发难度低,部署灵活快速,支持动态加载和卸载APP。
  4. 高性能:可编译为本地指令执行。
  5. 节省空间:BARE和SPF格式文件占用空间小,对资源紧张的嵌入式系统友好。

功能

  1. 支持多种eBPF运行方式,包括字节码解释执行、JIT成本机指令执行、编译为SPF/BARE文件运行。
  2. 编译工具可将eBPF文件编译为SPF/BARE文件。
  3. 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文件 将spfcmdspf_loader.arm64.barespf_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】