diff --git a/Config.in b/Config.in
index f9375be0a21cf7ba7cd8badb1fc2c58b21e04c6b..61a46b453205a63612f5feb43d5e0b4415af4e45 100644
--- a/Config.in
+++ b/Config.in
@@ -155,6 +155,15 @@ menu "Global build settings"
 		help
 			This removes all ipkg/opkg status data files from the target directory before building the root fs
 
+	config COLLECT_KERNEL_DEBUG
+		bool
+		prompt "Colllect kernel debug information"
+		select KERNEL_DEBUG_INFO
+		default n
+		help
+			This collects debugging symbols from the kernel and all compiled modules.
+			Useful for release builds, so that kernel issues can be debugged offline later.
+
 	comment "Kernel build options"
 
 	config KERNEL_DEBUG_FS
diff --git a/include/kernel-build.mk b/include/kernel-build.mk
index 7c5d1fbe9cd5b9a88c759ecfda8dfe5f778e6146..648e65848a41cc8e78ad61949a682a34a3594d66 100644
--- a/include/kernel-build.mk
+++ b/include/kernel-build.mk
@@ -44,6 +44,19 @@ define Download/kernel
   MD5SUM:=$(LINUX_KERNEL_MD5SUM)
 endef
 
+ifdef CONFIG_COLLECT_KERNEL_DEBUG
+  define Kernel/CollectDebug
+	rm -rf $(KERNEL_BUILD_DIR)/debug
+	mkdir -p $(KERNEL_BUILD_DIR)/debug/modules
+	$(CP) $(LINUX_DIR)/vmlinux $(KERNEL_BUILD_DIR)/debug/
+	-$(CP) \
+		$(STAGING_DIR_ROOT)/lib/modules/$(LINUX_VERSION)/* \
+		$(KERNEL_BUILD_DIR)/debug/modules/
+	$(FIND) $(KERNEL_BUILD_DIR)/debug -type f | $(XARGS) $(KERNEL_CROSS)strip --only-keep-debug
+	$(TAR) c -C $(KERNEL_BUILD_DIR) debug | bzip2 -c -9 > $(BIN_DIR)/kernel-debug.tar.bz2
+  endef
+endif
+
 define BuildKernel
   $(if $(QUILT),$(Build/Quilt))
   $(if $(LINUX_SITE),$(call Download,kernel))
@@ -86,6 +99,7 @@ define BuildKernel
 
   $(LINUX_DIR)/.image: $(STAMP_CONFIGURED) $(if $(CONFIG_STRIP_KERNEL_EXPORTS),$(KERNEL_BUILD_DIR)/symtab.h) FORCE
 	$(Kernel/CompileImage)
+	$(Kernel/CollectDebug)
 	touch $$@
 	
   mostlyclean: FORCE