Ubuntu20.04运行make kselftest-install报bpf_helper_defs.h缺失如何解决
问题场景
运行环境为Ubuntu 20.04操作系统,执行make kselftest-install命令编译内核自测组件时出现编译报错:
../../../lib/bpf/bpf_helpers.h:11:10: fatal error: 'bpf_helper_defs.h' file not found
问题原因
bpf_helper_defs.h不属于系统预装的通用头文件,是内核源码树中编译tools/libbpf组件时自动生成的派生头文件。直接执行kselftest相关构建目标时,如果没有提前构建libbpf前置依赖,或者系统预装的libbpf开发包版本与当前内核源码版本不匹配(Ubuntu 20.04官方源的libbpf-dev版本普遍偏低,无法匹配较新内核源码的构建要求),就会触发该文件找不到的错误。
解决步骤
- 先安装基础编译依赖,不要安装源内的低版本libbpf-dev:
sudo apt update sudo apt install build-essential libelf-dev clang llvm libcap-dev pahole - 回到内核源码根目录,提前编译libbpf组件生成缺失的头文件:
执行完成后可进入make -C tools/lib/bpftools/lib/bpf/目录检查,确认存在bpf_helper_defs.h文件即可。 - 再回到内核源码根目录执行kselftest安装命令,不要直接在kselftest子目录单独执行构建,避免构建路径识别错误:
如果只需要编译bpf相关的自测用例,可追加# 可根据需要替换O参数后的输出目录路径,提前创建对应目录 mkdir -p ./kselftest_out make kselftest-install O=./kselftest_outTARGETS=bpf参数。 - 如果上述步骤执行后仍报错,检查内核源码完整性,执行以下命令拉取全量子模块内容后重试:
git submodule update --init --recursive
内容的提问来源于stack exchange,提问作者li_jessen
相关产品推荐
相关产品推荐

