Openwrt 自编译后安装官方ipk时产生kernel MD5不兼容的问题处理

目录

环境

原因:

解决方法:

最后

环境

芯片:V3S
软件:基于Openwrt 19.07.3的自编译版本
问题:在安装需要校验kernel版本的ipk时,无法安装,报错:satisfy_dependencies_for: Cannot satisfy the following dependencies for xxxx

原因:

当我们修改了kernel的config文件后,编译时,openwrt会根据kernel的.config文件( $(LINUX_DIR)/.config )计算md5的值,附加在kernel版本号后。同时编译出来的ipk包均会要求基于该版本。

解决方法:

因此需要修改三个地方:

  1.     在openwrt跟目录,编写文件 vermagic ,内容为
    9801ec2dfc48e8fb2cc10a339283e7b0

    该md5是官方编译的md5,不同版本的不同,可以根据安装时的提示获取到需要更改的md5

  2. openwrt/include/kernel-defaults.mk 更改编译规则,不用mkhash md5生成,而直接拷贝根目录下的vermagic文件到linux_dir/.vermagic

diff --git a/include/kernel-defaults.mk b/include/kernel-defaults.mk
index cc1e236..97d7bb1 100644
--- a/include/kernel-defaults.mk
+++ b/include/kernel-defaults.mk
@@ -105,7 +105,9 @@ define Kernel/Configure/Default
 		cp $(LINUX_DIR)/.config.set $(LINUX_DIR)/.config.prev; \
 	}
 	$(_SINGLE) [ -d $(LINUX_DIR)/user_headers ] || $(KERNEL_MAKE) INSTALL_HDR_PATH=$(LINUX_DIR)/user_headers headers_install
-	grep '=[ym]' $(LINUX_DIR)/.config.set | LC_ALL=C sort | mkhash md5 > $(LINUX_DIR)/.vermagic
+	# grep '=[ym]' $(LINUX_DIR)/.config.set | LC_ALL=C sort | mkhash md5 > $(LINUX_DIR)/.vermagic
+
+	cp $(TOPDIR)/vermagic $(LINUX_DIR)/.vermagic
 endef

3.  修改自己编译出来的ipk依赖的md5,即修改package/kernel/linux/Makefile  如果不改这个,编译时生成ipk时,会报错,因为ipk还是依赖于kernel的config文件生成的md5。 这里我们直接读取linux_dir/.vermagic文件。

diff --git a/package/kernel/linux/Makefile b/package/kernel/linux/Makefile
index 39b9e82..51a44d2 100644
--- a/package/kernel/linux/Makefile
+++ b/package/kernel/linux/Makefile
@@ -24,7 +24,9 @@ export SHELL:=/bin/sh
 include $(INCLUDE_DIR)/package.mk
 
 ifeq ($(DUMP),)
-  STAMP_BUILT:=$(STAMP_BUILT)_$(shell $(SCRIPT_DIR)/kconfig.pl $(LINUX_DIR)/.config | mkhash md5)
+#  STAMP_BUILT:=$(STAMP_BUILT)_$(shell $(SCRIPT_DIR)/kconfig.pl $(LINUX_DIR)/.config | mkhash md5)
+  STAMP_BUILT:=$(STAMP_BUILT)_$(shell cat $(LINUX_DIR)/.vermagic)
+
   -include $(LINUX_DIR)/.config
 endif

修改完成后再编译即可,就可以指定使用官方的opkg源或者镜像源,使用涉及到验证kernel版本也不会无法安装了。

最后

本身验证kernel版本也是为了防止用户修改了config文件后,导致一些配置或者文件不匹配,从而导致安装的ipk和kernel无法对应上出错。因此我们在编译openwrt时,对于kernel的配置尽量少改动。必要的功能可以使用ipk进行模块导入。

你可能感兴趣的:(openwrt)