编译Arch Linux 5.18内核遇RWX权限段警告及BTF加载失败求助
解决编译Linux 5.18内核时的"LOAD segment with RWX permissions"警告及BTF加载失败问题
按照Arch Linux Wiki传统编译流程从Linus Torvalds仓库编译5.18内核时,出现多个LOAD segment with RWX permissions警告,最终在BTFIDS环节失败,错误信息如下:
MODINFO modules.builtin.modinfo GEN modules.builtin LD .tmp_vmlinux.btf ld: warning: .tmp_vmlinux.btf has a LOAD segment with RWX permissions BTF .btf.vmlinux.bin.o LD .tmp_vmlinux.kallsyms1 ld: warning: .tmp_vmlinux.kallsyms1 has a LOAD segment with RWX permissions KSYMS .tmp_vmlinux.kallsyms1.S AS .tmp_vmlinux.kallsyms1.S LD .tmp_vmlinux.kallsyms2 ld: warning: .tmp_vmlinux.kallsyms2 has a LOAD segment with RWX permissions KSYMS .tmp_vmlinux.kallsyms2.S AS .tmp_vmlinux.kallsyms2.S LD vmlinux ld: warning: vmlinux has a LOAD segment with RWX permissions BTFIDS vmlinux FAILED: load BTF from vmlinux: Invalid argument make: *** [Makefile:1158: vmlinux] Error 255 make: *** Deleting file 'vmlinux'
以下是经过验证的解决方案:
禁用BTF调试信息
进入内核配置界面(make menuconfig),找到CONFIG_DEBUG_INFO_BTF选项,将其设置为n(直接关闭BTF支持)。5.18内核的BTF处理对工具链版本要求较高,禁用后可绕过这个加载错误。如果确实需要BTF,确保pahole是最新版本(执行pacman -Syu pahole更新)。强制链接器移除RWX权限段
编译前设置环境变量,给链接器传递参数消除RWX段:export LDFLAGS="-Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now"之后再正常执行
make编译命令。更新binutils工具链
旧版本的ld可能生成不符合内核要求的权限段,执行以下命令更新到最新版本:sudo pacman -Syu binutils更新后清理之前的编译文件(
make clean)再重新编译。使用Arch官方内核配置作为基础
复制当前系统的官方内核配置到编译目录:cp /usr/lib/modules/$(uname -r)/build/.config ./然后在此基础上用
make menuconfig做自定义修改,避免默认配置中的兼容性问题。
内容的提问来源于stack exchange,提问作者AndreyRz
相关产品推荐
相关产品推荐

