From 6483a9f7391ac1844e702c8c00fc2e8a85a1caf1 Mon Sep 17 00:00:00 2001
From: jow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Sun, 8 Jan 2012 15:23:11 +0000
Subject: [PATCH] include: calculate md5sum over sorted kernel config symbol
 list and incorperate it into the kernel metapackage version, make kmods
 depend on this specific version. The aim of this change is to invalidate
 kmods which are built against a different kernel config on the opkg metadata
 level. Manual copying and insmod of custom *.ko files, e.g. for development
 purpose, is still possible.

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@29686 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 include/kernel-defaults.mk | 1 +
 include/kernel.mk          | 6 +++++-
 package/kernel/Makefile    | 2 +-
 3 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/include/kernel-defaults.mk b/include/kernel-defaults.mk
index 5fd27ae7c..52ce03776 100644
--- a/include/kernel-defaults.mk
+++ b/include/kernel-defaults.mk
@@ -89,6 +89,7 @@ define Kernel/Configure/Default
 	$(call Kernel/SetInitramfs)
 	-$(_SINGLE)$(MAKE) $(KERNEL_MAKEOPTS) oldconfig prepare scripts
 	rm -rf $(KERNEL_BUILD_DIR)/modules
+	$(SH_FUNC) grep '=[ym]' $(LINUX_DIR)/.config | LC_ALL=C sort | md5s > $(LINUX_DIR)/.vermagic
 endef
 
 define Kernel/CompileModules/Default
diff --git a/include/kernel.mk b/include/kernel.mk
index 1af072d6b..c0d8ef8a2 100644
--- a/include/kernel.mk
+++ b/include/kernel.mk
@@ -13,6 +13,7 @@ ifeq ($(DUMP),1)
   KERNEL?=<KERNEL>
   BOARD?=<BOARD>
   LINUX_VERSION?=<LINUX_VERSION>
+  LINUX_VERMAGIC?=<LINUX_VERMAGIC>
 else
   ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
     export GCC_HONOUR_COPTS=s
@@ -35,6 +36,9 @@ else
   KERNEL_BUILD_DIR ?= $(BUILD_DIR_BASE)/linux-$(BOARD)$(if $(SUBTARGET),_$(SUBTARGET))$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX))
   LINUX_DIR ?= $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)
 
+  LINUX_VERMAGIC:=$(strip $(shell cat $(LINUX_DIR)/.vermagic 2>/dev/null))
+  LINUX_VERMAGIC:=$(if $(LINUX_VERMAGIC),$(LINUX_VERMAGIC),unknown)
+
   LINUX_UNAME_VERSION:=$(if $(word 3,$(subst ., ,$(KERNEL_BASE))),$(KERNEL_BASE),$(KERNEL_BASE).0)
   ifneq ($(findstring -rc,$(LINUX_VERSION)),)
     LINUX_UNAME_VERSION:=$(LINUX_UNAME_VERSION)-$(strip $(lastword $(subst -, ,$(LINUX_VERSION))))
@@ -130,7 +134,7 @@ define KernelPackage
     SECTION:=kernel
     CATEGORY:=Kernel modules
     DESCRIPTION:=$(DESCRIPTION)
-    EXTRA_DEPENDS:=kernel (=$(LINUX_VERSION)-$(LINUX_RELEASE))
+    EXTRA_DEPENDS:=kernel (=$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC))
     VERSION:=$(LINUX_VERSION)$(if $(PKG_VERSION),+$(PKG_VERSION))-$(if $(PKG_RELEASE),$(PKG_RELEASE),$(LINUX_RELEASE))
     $(call KernelPackage/$(1))
     $(call KernelPackage/$(1)/$(BOARD))
diff --git a/package/kernel/Makefile b/package/kernel/Makefile
index 13a305d7a..e094c601e 100644
--- a/package/kernel/Makefile
+++ b/package/kernel/Makefile
@@ -35,7 +35,7 @@ define Package/kernel
   CATEGORY:=Kernel
   DEFAULT:=y
   TITLE:=Virtual kernel package
-  VERSION:=$(LINUX_VERSION)-$(LINUX_RELEASE)
+  VERSION:=$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC)
   URL:=http://www.kernel.org/
 endef
 
-- 
2.20.1