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

编译sched_tp.ko内核模块时pahole报vmlinux无效参数错误

启用FTrace的ARM64内核模块编译pahole报错排查

操作流程复现

编译带FTrace与调试信息的Linux内核

执行以下命令完成内核编译:

$ cd /path/to/linux-debug-workshop
$ source /path/to/environment-setup-aarch64-poky-linux
$ make training_defconfig
$ ./scripts/config -e CONFIG_FTRACE
$ ./scripts/config -e CONFIG_DEBUG_INFO
$ ./scripts/config -e CONFIG_DEBUG_INFO_DWARF5
$ ./scripts/config -e CONFIG_DEBUG_INFO_BTF
$ ./scripts/config -d CONFIG_DEBUG_INFO_REDUCED
$ make -j$(nproc) Image dtbs modules

编译完成后会在/path/to/linux-debug-workshop目录下生成vmlinux文件。

编译sched_tp.ko内核模块

后续执行以下命令编译模块:

$ cd /path/to/lisa
$ source /path/to/poky/poky/3.1.9/environment-setup-aarch64-poky-linux
$ source init_env
$ ./tools/kmodules/build_module \
/path/to/linux-debug-workshop ./tools/kmodules/sched_tp/

报错信息

编译模块时抛出如下错误:

Building module for ARCH=arm64
make: Entering directory 'linux-debug-workshop/lisa/tools/kmodules/sched_tp'
make -C /linux-debug-workshop M=/linux-debug-workshop/lisa/tools/kmodules/sched_tp modules
make[1]: Entering directory '/linux-debug-workshop'

pahole -F btf,dwarf -E --suppress_force_paddings --show_only_data_members --skip_missing --expand_types_once --expanded_prefix "KERNEL_PRIVATE_" -C file:///linux-debug-workshop/lisa/tools/kmodules/sched_tp/private_types.txt /linux-debug-workshop/vmlinux > _header

pahole: /linux-debug-workshop/vmlinux: Invalid argument

当前环境已确认pahole版本为v1.23。


报错根因

该错误由两个核心问题触发:

  1. pahole版本兼容性缺陷:v1.23版本的pahole对DWARF5格式调试信息的支持存在已知bug,当vmlinux同时开启CONFIG_DEBUG_INFO_DWARF5和CONFIG_DEBUG_INFO_BTF时,pahole无法正确识别aarch64架构vmlinux的调试段格式,执行双格式(btf+dwarf)解析时直接返回参数无效错误。
  2. 交叉编译环境不匹配:编译内核和编译模块时source了不同路径下的poky环境初始化脚本,两次加载的环境中pahole、binutils、交叉编译器版本可能存在差异,会进一步加剧调试信息解析的兼容性问题。

排查解决步骤

按以下顺序操作即可解决问题:

  • 首先验证内核编译产物完整性,执行readelf -S /path/to/linux-debug-workshop/vmlinux | grep -E "(debug_info|BTF)",确认输出中存在.debug_info和.BTF段,排除内核编译阶段调试信息未正确生成的问题。
  • 解决pahole与DWARF5的兼容性问题,二选一即可:
    • 方案1:升级环境内pahole版本到v1.25及以上,该版本已修复DWARF5解析的相关bug,升级后无需修改内核配置。
    • 方案2:临时调整内核调试信息格式为DWARF4,重新编译内核:
      cd /path/to/linux-debug-workshop
      ./scripts/config -d CONFIG_DEBUG_INFO_DWARF5
      ./scripts/config -e CONFIG_DEBUG_INFO_DWARF4
      make -j$(nproc) Image dtbs modules
      
  • 统一交叉编译环境,编译内核和编译内核模块阶段必须source同一份poky环境初始化脚本,禁止混用不同版本的交叉编译工具链。
  • 若上述操作后仍报错,可临时修改tools/kmodules/sched_tp/目录下的Makefile,将pahole调用参数中的-F btf,dwarf改为-F dwarf,跳过BTF格式解析验证是否为BTF段损坏导致的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:24:21