撰于 阅读 21

OpenWrt内核编译时MD5值修改导致的问题及解决方法

根据您的描述,您尝试在编译OpenWrt内核时,将内核的MD5值改成官方的,但遇到了编译错误。您修改了openwrt/include/kernel-defaults.mk文件中的命令,将生成.vermagic文件的命令从使用mkhash md5改为直接复制官方的.vermagic文件。同时,您也修改了package/kernel/linux/Makefile中的STAMP_BUILT变量,将其设置为直接引用.vermagic文件的内容。这些修改的目的是为了确保编译时使用的MD5值与官方发布的一致。然而,编译过程中出现了内核错误,提示模块缺失。具体的错误信息如下:

SHELL= flock /workdir/openwrt/tmp/.root-copy.flock -c 'cp -fpR /workdir/openwrt/build_dir/target-x86_64_musl/linux-x86_64/packages/.pkgdir/kernel/. /workdir/openwrt/staging_dir/target-x86_64_musl/root-x86/'
touch /workdir/openwrt/staging_dir/target-x86_64_musl/root-x86/stamp/.kernel_installed
grep: /workdir/openwrt/build_dir/target-x86_64_musl/linux-x86_64/linux-5.15.167/modules.builtin: No such file or directory
ERROR: module '/workdir/openwrt/build_dir/target-x86_64_musl/linux-x86_64/linux-5.15.167/drivers/md/md-mod.ko' is missing.
make[3]: *** [modules/block.mk:301: /workdir/openwrt/bin/targets/x86/64/packages/kmod-md-mod_5.15.167-1_x86_64.ipk] Error 1
make[3]: Leaving directory '/workdir/openwrt/package/kernel/linux'
time: package/kernel/linux/compile#1.23#0.10#1.31
   ERROR: package/kernel/linux failed to build.
make[2]: *** [package/Makefile:129: package/kernel/linux/compile] Error 1
make[2]: Leaving directory '/workdir/openwrt'
make[1]: *** [package/Makefile:123: /workdir/openwrt/staging_dir/target-x86_64_musl/stamp/.package_compile] Error 2
make[1]: Leaving directory '/workdir/openwrt'
make: *** [/workdir/openwrt/include/toplevel.mk:233: world] Error 2

中间也报了一次内核无法创建的错误。

针对这个问题,可能的原因有:

  1. .vermagic文件的内容不正确,或者不完整,导致内核验证失败。
  2. 复制.vermagic文件的过程中可能出现了问题,导致文件损坏或内容错误。
  3. 编译环境配置不正确,比如缺少必要的模块或依赖。

建议您检查以下几个方面:

  • 确认官方的.vermagic文件内容是否完整且正确。
  • 检查复制.vermagic文件的过程是否成功,并确保文件没有损坏。
  • 查看OpenWrt的编译日志,确认是否有其他错误或警告信息,这可能有助于定位问题。
  • 确保编译环境配置正确,所有必要的模块和依赖都已正确安装。

如果以上步骤无法解决问题,您可能需要重新考虑是否需要手动修改.vermagic文件,或者寻求OpenWrt社区的帮助。


评论已关闭