diff --git a/target/linux/generic-2.6/patches-2.6.28/985-cris-headers.patch b/target/linux/generic-2.6/patches-2.6.28/985-cris-headers.patch
new file mode 100644
index 0000000000000000000000000000000000000000..3baa4cac590b8f0acedf287aaecc383f7bc35fc2
--- /dev/null
+++ b/target/linux/generic-2.6/patches-2.6.28/985-cris-headers.patch
@@ -0,0 +1,29 @@
+diff -urN linux-2.6.28.clean/arch/cris/include/arch-v10/arch/Kbuild linux-2.6.28.mod/arch/cris/include/arch-v10/arch/Kbuild
+--- linux-2.6.28.clean/arch/cris/include/arch-v10/arch/Kbuild	2008-12-25 00:26:37.000000000 +0100
++++ linux-2.6.28.mod/arch/cris/include/arch-v10/arch/Kbuild	2009-04-07 09:39:12.000000000 +0200
+@@ -1,3 +1,5 @@
++header-y += elf.h
++header-y += ptrace.h
+ header-y += user.h
+ header-y += svinto.h
+ header-y += sv_addr_ag.h
+diff -urN linux-2.6.28.clean/arch/cris/include/asm/Kbuild linux-2.6.28.mod/arch/cris/include/asm/Kbuild
+--- linux-2.6.28.clean/arch/cris/include/asm/Kbuild	2008-12-25 00:26:37.000000000 +0100
++++ linux-2.6.28.mod/arch/cris/include/asm/Kbuild	2009-04-07 10:53:34.000000000 +0200
+@@ -1,11 +1,14 @@
+ include include/asm-generic/Kbuild.asm
+ 
+-header-y += arch-v10/
+-header-y += arch-v32/
++header-y += ../arch-v10/arch/
++header-y += ../arch-v32/arch/
+ 
++header-y += elf.h
+ header-y += ethernet.h
++header-y += page.h
+ header-y += rtc.h
+ header-y += sync_serial.h
++header-y += user.h
+ 
+ unifdef-y += etraxgpio.h
+ unifdef-y += rs485.h
diff --git a/toolchain/kernel-headers/Makefile b/toolchain/kernel-headers/Makefile
index 37f87dd37b4b654d784294ac4b372e71b857874e..47737b0064c218923b1378bb4926824eea83f61d 100644
--- a/toolchain/kernel-headers/Makefile
+++ b/toolchain/kernel-headers/Makefile
@@ -38,11 +38,6 @@ KMAKE := $(MAKE) -C $(HOST_BUILD_DIR) \
 	KBUILD_HAVE_NLS=no \
 	CONFIG_SHELL=$(BASH)
 
-define Host/Prepare/pre/cris
-	ln -sf $(HOST_BUILD_DIR)/include/asm-cris/arch-v10 $(HOST_BUILD_DIR)/include/asm-cris/arch
-	ln -sf $(HOST_BUILD_DIR)/include/asm-cris/arch-v10 $(HOST_BUILD_DIR)/arch/cris/arch
-endef
-
 define Host/Prepare/pre/powerpc
 	if [ -d $(HOST_BUILD_DIR)/include/asm-ppc ]; then \
 		mkdir -p $(PKG_BUILD_DIR)/include/asm-powerpc/; \
@@ -79,7 +74,16 @@ define Host/Prepare/lzma
 endef
 
 # XXX: the following are needed to build a cris toolchain
-define Host/Prepare/post/cris
+ifeq ($(strip $(call CompareKernelPatchVer,$(KERNEL_PATCHVER),lt,2.6.28)),1)
+  define Host/Prepare/pre/cris
+	ln -sf $(HOST_BUILD_DIR)/include/asm-cris/arch-v10 $(HOST_BUILD_DIR)/include/asm-cris/arch
+	ln -sf $(HOST_BUILD_DIR)/include/asm-cris/arch-v10 $(HOST_BUILD_DIR)/arch/cris/arch
+  endef
+
+  define Host/Prepare/post/cris
+	$(CP) \
+		$(HOST_BUILD_DIR)/include/linux/user.h \
+		$(BUILD_DIR_TOOLCHAIN)/linux-dev/usr/include/linux/
 	$(CP) \
 		$(HOST_BUILD_DIR)/include/linux/user.h \
 		$(BUILD_DIR_TOOLCHAIN)/linux-dev/usr/include/linux/
@@ -88,6 +92,11 @@ define Host/Prepare/post/cris
 		$(HOST_BUILD_DIR)/include/asm-cris/page.h \
 		$(HOST_BUILD_DIR)/include/asm-cris/user.h \
 		$(BUILD_DIR_TOOLCHAIN)/linux-dev/usr/include/asm/
+	$(CP) \
+		$(HOST_BUILD_DIR)/include/asm-generic/memory_model.h \
+		$(HOST_BUILD_DIR)/include/asm-generic/page.h \
+		$(BUILD_DIR_TOOLCHAIN)/linux-dev/usr/include/asm-generic/
+
 	mkdir -p $(BUILD_DIR_TOOLCHAIN)/linux-dev/usr/include/asm/arch
 	$(CP) \
 		$(HOST_BUILD_DIR)/include/asm-cris/arch/elf.h \
@@ -95,11 +104,17 @@ define Host/Prepare/post/cris
 		$(HOST_BUILD_DIR)/include/asm-cris/arch/ptrace.h \
 		$(HOST_BUILD_DIR)/include/asm-cris/arch/user.h \
 		$(BUILD_DIR_TOOLCHAIN)/linux-dev/usr/include/asm/arch/
+  endef
+else
+  define Host/Prepare/post/cris
 	$(CP) \
-		$(HOST_BUILD_DIR)/include/asm-generic/memory_model.h \
-		$(HOST_BUILD_DIR)/include/asm-generic/page.h \
-		$(BUILD_DIR_TOOLCHAIN)/linux-dev/usr/include/asm-generic/
-endef
+		$(HOST_BUILD_DIR)/include/linux/user.h \
+		$(BUILD_DIR_TOOLCHAIN)/linux-dev/usr/include/linux/
+	ln -snf $(BUILD_DIR_TOOLCHAIN)/linux-dev/usr/include/arch-v10/arch \
+		$(BUILD_DIR_TOOLCHAIN)/linux-dev/usr/include/arch
+	$(SED) '/#include <asm\/page\.h>/d' $(BUILD_DIR_TOOLCHAIN)/linux-dev/usr/include/asm/user.h
+  endef
+endif
 
 define Host/Prepare/post/mips
 	$(call Host/Prepare/lzma)