背景
Ubuntu22.04 自带内核版本是5.15,今日想编译一个高版本的 5.16.5 内核,不料编译却报错:
CALL scripts/checksyscalls.sh
CALL scripts/atomic/check-atomics.sh
DESCEND objtool
DESCEND bpf/resolve_btfids
CHK include/generated/compile.h
CHK kernel/kheaders_data.tar.xz
GEN .version
CHK include/generated/compile.h
UPD include/generated/compile.h
CC init/version.o
AR init/built-in.a
LD vmlinux.o
MODPOST vmlinux.symvers
MODINFO modules.builtin.modinfo
GEN modules.builtin
LD .tmp_vmlinux.btf
BTF .btf.vmlinux.bin.o
LD .tmp_vmlinux.kallsyms1
KSYMS .tmp_vmlinux.kallsyms1.S
AS .tmp_vmlinux.kallsyms1.S
LD .tmp_vmlinux.kallsyms2
KSYMS .tmp_vmlinux.kallsyms2.S
AS .tmp_vmlinux.kallsyms2.S
LD vmlinux
BTFIDS vmlinux
FAILED: load BTF from vmlinux: Invalid argument
make: *** [Makefile:1161: vmlinux] Error 255
make: *** Deleting file 'vmlinux'
网上搜了下说要将 .config 配置文件中 CONFIG_DEBUG_INFO_BTF=y 改为 CONFIG_DEBUG_INFO_BTF=n。这样编译就不会报错。但是我想要开启这个选项【和ebpf相关的选项】,进一步搜索发现是由于 pahole 这个程序版本太高导致,当前版本是 1.25.
pahole --version
v1.25
解决办法
修改内核源码目录 scripts/pahole-flags.sh 脚本,添加如下几行 shell 代码:
if [ "${pahole_ver}" -ge "124" ]; then
# see PAHOLE_HAS_LANG_EXCLUDE
extra_paholeopt="${extra_paholeopt} --skip_encoding_btf_enum64"
fi
问题解决。文章来源:https://www.toymoban.com/news/detail-751936.html
参考:
https://lore.kernel.org/bpf/20220825171620.cioobudss6ovyrkc@altlinux.org/t/
https://bbs.archlinux.org/viewtopic.php?pid=2067555文章来源地址https://www.toymoban.com/news/detail-751936.html
到了这里,关于Ubuntu 22.04 编译 Linux 5.16.5 内核报错:FAILED: load BTF from vmlinux: Invalid argument的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!