From 683d65f66220c9c536217de2f74848599f8bb017 Mon Sep 17 00:00:00 2001 From: Rain Park <1162678210@qq.com> Date: Sun, 16 Jul 2023 13:43:10 +0800 Subject: [PATCH 1/2] fix build problem Signed-off-by: Rain Park <1162678210@qq.com> --- Makefile | 2 +- tools/bpftool/Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 7cb1448..6bb4ff3 100644 --- a/Makefile +++ b/Makefile @@ -33,7 +33,7 @@ libbpf: @mkdir -p $(SYSROOT) make -C lib/libbpf all -bpftools: +bpftools: libbpf @mkdir -p $(SYSROOT) make -C tools/bpftool all diff --git a/tools/bpftool/Makefile b/tools/bpftool/Makefile index 69acf25..68f1281 100644 --- a/tools/bpftool/Makefile +++ b/tools/bpftool/Makefile @@ -40,7 +40,7 @@ BPF_CFLAGS += -I$(or ,.) -Ikernel/ -I$(SYSROOT)/include \ SKELS_CFLAGS := -g -O2 -Wall -I$(or ,.) -I$(SYSROOT)/include -I$(TOPDIR)/include/uapi BPF_LDFLAGS += $(EXTRA_LDFLAGS) -L$(SYSROOT)/lib -LIBS = -lelf -lz $(LIBBPF) +LIBS = $(LIBBPF) -lelf -lz ifeq ($(USE_LIBCAP),y) LIBS += -lcap BPF_CFLAGS += -DUSE_LIBCAP From 0c06deb22c3210a6d24cebdd73451023c5de1fce Mon Sep 17 00:00:00 2001 From: Rain Park <1162678210@qq.com> Date: Sun, 16 Jul 2023 13:56:43 +0800 Subject: [PATCH 2/2] add Installation and compilation guide Signed-off-by: Rain Park <1162678210@qq.com> --- README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/README.md b/README.md index bb65300..a74ca4e 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,26 @@ EMF(ebpf-module-framework)是一个基eBPF的应用程序框架,主要用于 注:静态方式比如简单做成类似于C语言的.a即可。动态方式也可以在EMF当中使用dlopen之类的函数去读取动态eBPF模块当中对应的符号表(比如struct module符号,该符号位全局符号)。 +## 构建 + +**依赖:** +- libelf +- zlib + +``` +$ git clone https://github.com/OpenCloudOS/EMF-ebpf-module-framework.git +``` +**Ubuntu:** + +下载依赖包 +``` +$ sudo apt-get install -y make clang zlib1g-dev llvm libelf-dev libbpf-dev libbpfcc-dev linux-tools-$(uname -r) linux-headers-$(uname -r) +``` +编译 +``` +$ make -j$(nproc) +``` + ## EMF模块介绍 EMF支持两种加载模式:一、EMF模块静态链接;二、EMF模块动态加载。通常,在入口函数main启动后(core/emf.c),EMF框架会去主动查找静态模块,分别去执行静态模块的初始化函数和加载函数;然后EMF才会去读取动态模块,并处理动态模块的初始化和加载函数。所以这里有一个优先级的关系,即静态模块的优先级永远高于动态模块的优先级。