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

Ubuntu20.04下bpftool读取/sys/kernel/btf/vmlinux报错如何解决

故障可能原因

  • bpftool版本不兼容:你当前使用的5.4版本bpftool不支持直接读取raw BTF格式的/sys/kernel/btf/vmlinux文件,该版本的bpftool默认将输入文件识别为ELF格式尝试解析ELF头,因此抛出"failed to get EHDR"的格式错误。直接导出raw BTF为C头文件的功能是在5.8及以上版本的bpftool中才正式支持的。
  • 内核编译阶段BTF生成异常:即使开启了对应内核配置,如果编译时使用的pahole(dwarves包)版本过低,也会导致生成的BTF文件格式不符合规范。Ubuntu 20.04默认源提供的dwarves版本为1.15,生成BTF推荐使用1.17及以上版本的pahole。
  • BTF文件损坏:内核编译或安装过程中出现异常,可能导致/sys/kernel/btf/vmlinux文件本身损坏。

排查与解决方法

  1. 先验证BTF文件本身有效性,执行命令:pahole /sys/kernel/btf/vmlinux,如果可以正常输出内核结构体定义则说明BTF文件无问题,故障原因为bpftool版本过低。
  2. 升级bpftool,可选择任意一种方式:
    • 安装更高版本的系统自带工具:sudo apt install linux-tools-generic,安装完成后用新版本bpftool重新执行导出命令即可。
    • 从源码编译最新版libbpf和bpftool,获得完整功能支持。
  3. 如果pahole验证BTF文件报错,则先升级dwarves包后重新编译内核:
    sudo add-apt-repository ppa:ubuntu-toolchain-r/ppa
    sudo apt update && sudo apt install dwarves
    
    升级完成后重新编译内核,确保CONFIG_DEBUG_INFO_BTF配置生效后再尝试导出。
  4. 临时替代方案:如果不想升级bpftool,可以直接用pahole导出vmlinux.h头文件:pahole --dump_c_header /sys/kernel/btf/vmlinux > vmlinux.h,生成的头文件可直接用于CO:RE开发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:54:04