Cilium/eBPF令人無語的加載機制記錄
前段時間編譯bpf c文件,都是用的bpf2go這個go包,這個包雖然很方便,但是指定參數比較困難,
學習到tracee falco這種大型項目都是通過makefile直接編譯bpf代碼,因此打算自己寫Makefile
clang -D__KERNEL__ -D__ASM_SYSREG_H \
-D__BPF_TRACING__ \
-Wunused \
-Wall \
-Wno-frame-address \
-Wno-unused-value \
-Wno-unknown-warning-option \
-Wno-pragma-once-outside-header \
-Wno-pointer-sign \
-Wno-gnu-variable-sized-type-not-at-end \
-Wno-deprecated-declarations \
-Wno-compare-distinct-pointer-types \
-Wno-address-of-packed-member \
-fno-stack-protector \
-fno-jump-tables \
-fno-unwind-tables \
-fno-asynchronous-unwind-tables \
-xc \
-nostdinc \
-I $(LIBBPF_HEADERS)\
-include $(KERN_SRC_PATH)/include/linux/kconfig.h \
-I$(BPF_HEADERS) \
-I$(KERN_SRC_PATH)/include \
-I$(KERN_SRC_PATH)/include/uapi \
-I$(KERN_SRC_PATH)/include/generated \
-I$(KERN_SRC_PATH)/include/generated/uapi \
-I$(KERN_SRC_PATH)/arch/$(linux_arch)/include \
-I$(KERN_SRC_PATH)/arch/$(linux_arch)/include/uapi \
-I$(KERN_SRC_PATH)/arch/$(linux_arch)/include/generated \
-I$(KERN_SRC_PATH)/arch/$(linux_arch)/include/generated/uapi \
-O2 -emit-llvm \
$(BPF_SRC) \
-c -o - | llc -march=bpf -filetype=obj -o $(OUT_BPF)
Makefile寫起來很簡單,生產.o文件也很easy,但是當用cilium/ebpf加載生成的.o文件時,卻報錯
loading objects: %v can't load DemoInfo: load BTF maps: missing BTF
2021/12/24 16:35:05 link func: prog cannot be nil: invalid input
什么情況,我沒有用BTF啊,為啥會報這個錯誤。
于是開始調試bpf2go包,在仔細對比他的編譯參數的時候,終于發現了區別

也就是說生成的.o帶調試信息即可,也就是加上-g參數,坑啊,就不能提示的清晰一些嗎???
于是給Makefile中加入 -g參數,解決了問題,耗時2天,特此記錄。
本文由博客一文多發平臺 OpenWrite 發布!

浙公網安備 33010602011771號