将多个文件的 eBPF 程序编译成单个 bpf 目标文件

问题描述 投票:0回答:1

我正在用 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 目标文件?

linux makefile clang llvm ebpf
1个回答
1
投票

编译器通常不支持将来自不同目标文件的 eBPF 代码链接到一个文件中,因为有一些特定于 eBPF 程序的处理要做,但 libbpf(自 v0.4.0 起)和 bpftool(v5.13 起)支持) 依赖于这个库。特别是,您可以使用以下命令从多个对象生成包含 eBPF 字节码的单个对象文件:

$ bpftool gen object <output_file> <input_file> [<input_file> ...]

有关详细信息,请参阅相关的 bpftool 文档

© www.soinside.com 2019 - 2024. All rights reserved.