You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Cilium加载BPF代码失败:BTF加载报错-22求助

基于Cilium的BPF代码加载BTF报错排查思路

问题背景

我正基于Cilium向内核插入BPF代码,严格遵循官方教程编译,使用提供的Makefile编译后,通过bpftool加载目标文件至内核时持续报错。已安装所有相关依赖并升级内核至最新版本,报错信息如下:

$ sudo bpftool prog load bpf/custom/bytecount.o /sys/fs/bpf/tc/globals/bytecounter /sys/fs/bpf/tc/globals/bytecounter_maps
libbpf: Error loading BTF: Invalid argument(22) 
libbpf: magic: 0xeb9f
version: 1 
flags: 0x0 
hdrlen: 24 
type_off: 0 
type_len: 1164 
stroff: 1164 
str_len: 1234 
btf_total_size: 2422 
[1] STRICT (anon) size=32 vlen=4 
    type typeid=2 bitsoffset=0 
    key typeid=6 bitsoffset=64 
    value typeid=9 bitsoffset=126 
    max_entries type_id=12 bits_offset=192 
...
[25] INT unsigned char size=1 bits_offset=0 nr_bits=8 encoding=(none) 
[26] FUNC_PROTO (anon) return=3 args=(15 ctx) 
[27] FUNC custom_hook type_id=26 vlen != 0 
libbpf: Error loading .BTF into kernel: -22. Error: failed to open object file

排查思路

  • 检查BTF版本兼容性:报错中BTF版本为1,需确认内核是否支持该版本。运行bpftool btf dump file /sys/kernel/btf/vmlinux format raw | head -10查看内核BTF版本,若内核版本过新或过旧可能存在版本不匹配,建议切换到Cilium官方推荐的LTS内核(如5.15、6.1系列)。
  • 验证编译工具链版本:确保clang、llvm版本符合Cilium要求,推荐使用LLVM 14及以上版本。运行clang --version和llvm-config --version检查版本,旧版本生成的BTF可能存在格式问题。
  • 检查BPF对象文件的BTF完整性:用bpftool btf dump file bpf/custom/bytecount.o查看生成的BTF内容,对比内核导出的BTF(/sys/kernel/btf/vmlinux),排查是否存在类型定义冲突或缺失。针对报错里的FUNC custom_hook type_id=26 vlen != 0,需确认代码中custom_hook函数的定义是否符合BPF规范,参数、返回值是否与内核BTF兼容。
  • 修正加载命令逻辑:Cilium自定义BPF程序通常需要通过Cilium专属工具链加载,而非直接用原生bpftool。尝试使用cilium bpf load命令替代手动bpftool命令,避免参数遗漏或格式错误。
  • 确认内核BTF相关配置:检查内核是否开启CONFIG_DEBUG_INFO_BTF=y和CONFIG_DEBUG_INFO_BTF_MODULES=y,运行zcat /proc/config.gz | grep CONFIG_DEBUG_INFO_BTF验证配置,若未开启需重新编译内核开启对应选项。
  • 清理编译缓存重新编译:删除bpf/custom/目录下的.o文件及编译临时文件,重新执行Makefile编译,避免旧BTF缓存导致的格式异常。

内容的提问来源于stack exchange,提问作者Xuan Tuoba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:53:11