我正在一个项目上工作的eBPF代码与一个文件,它是越来越长,我希望我可以分割成多个文件。我试图建立多个文件到bpf目标文件,然后将它们链接到一起成为一个目标文件。这是我正在使用的Makefile,
KDIR ?= /lib/modules/$(shell uname -r)/build
CLANG ?= clang
LLC ?= llc
ARCH := $(subst x86_64,x86,$(shell arch))
BIN := a.o
CLANG_FLAGS = -I. -I$(KDIR)/arch/$(ARCH)/include \
-I$(KDIR)/arch/$(ARCH)/include/generated \
-I$(KDIR)/include \
-I$(KDIR)/arch/$(ARCH)/include/uapi \
-I$(KDIR)/include/uapi \
-include $(KDIR)/include/linux/kconfig.h \
-D__KERNEL__ -D__BPF_TRACING__ -Wno-unused-value -Wno-pointer-sign \
-D__TARGET_ARCH_$(ARCH) -Wno-compare-distinct-pointer-types \
-Wno-gnu-variable-sized-type-not-at-end \
-Wno-address-of-packed-member -Wno-tautological-compare \
-O2 -emit-llvm
all: $(BIN)
a.o: program.c program.h
$(CLANG) $(CLANG_FLAGS) -g -c $< -o - | \
$(LLC) -march=bpf -mcpu=$(CPU) -filetype=obj -o $@
clean:
rm -f *.o
如何修改这个Makefile以编译和链接来自多个C文件的eBPF目标文件?
1条答案
按热度按时间gmxoilav1#
编译器通常不支持将不同对象文件中的eBPF代码链接到一个对象文件中,因为有些特定于eBPF程序的处理要做,但libbpf(从v0.4.0开始)和依赖于此库的bpftool(v5.13)支持。特别是,您可以使用以下命令生成包含多个对象中eBPF字节码的单个对象文件:
有关详细信息,请参阅相关的bpftool文档。