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天,特此记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值