else
KERN_CC = echo KERN_CC not defined - compilation skipped
endif
-c_o_kern_COMPILE = $(KERN_CC) $(kernel_INCLUDES) -idirafter $(kern_GCCLIB_DIR)/include $(LINUX_CFLAGS) $(LINUX_CFLAGS_MODULE) -DOMK_FOR_KERNEL -DEXPORT_SYMTAB -nostdinc
-cc_o_kern_COMPILE = $(KERN_CC) $(kernel_INCLUDES) $(LINUX_CFLAGS) $(LINUX_CFLAGS_MODULE) -DOMK_FOR_KERNEL -DEXPORT_SYMTAB
+c_o_kern_COMPILE = $(KERN_CC) $(kernel_INCLUDES) -idirafter $(kern_GCCLIB_DIR)/include $(LINUX_CPPFLAGS) $(LINUX_CFLAGS) $(LINUX_CFLAGS_MODULE) -DOMK_FOR_KERNEL -DEXPORT_SYMTAB -nostdinc
+cc_o_kern_COMPILE = $(KERN_CC) $(kernel_INCLUDES) -idirafter $(kern_GCCLIB_DIR)/include $(LINUX_CPPFLAGS) $(LINUX_CFLAGS) $(LINUX_CFLAGS_MODULE) -DOMK_FOR_KERNEL -DEXPORT_SYMTAB
KERN_EXE_SUFFIX := $(LINUX_MODULE_EXT)
KERN_LDFLAGS = $(LINUX_LDFLAGS)
ifdef LINUX_ARCH
# this is required to build right "__this_module" structure for 2.6.x kernels
$(1).mod.c:
- echo '#include <linux/module.h>' >$$@
+ echo "\
+ #include <linux/version.h>@\
+ #include <linux/module.h>@\
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,5))@\
+ #include <linux/vermagic.h>@\
+ #include <linux/compiler.h>@\
+ @\
+ MODULE_INFO(vermagic, VERMAGIC_STRING);@\
+ @\
+ #undef unix@\
+ struct module __this_module@\
+ __attribute__((section(\".gnu.linkonce.this_module\"))) = {@\
+ .name = __stringify(KBUILD_MODNAME),@\
+ .init = init_module,@\
+ #ifdef CONFIG_MODULE_UNLOAD@\
+ .exit = cleanup_module,@\
+ #endif@\
+ };@\
+ #endif@\
+ " | tr @ \\n >$$@
+
$(eval $(call COMPILE_c_o_kern_template,$(1).mod.c,$(1).mod.o,-DKBUILD_MODNAME=$(1)))
echo LINUX_CROSS_COMPILE="\$(CROSS_COMPILE)" >>flags
echo LINUX_KERNELRELEASE="\$(KERNELRELEASE)" >>flags
echo LINUX_CFLAGS="\$(CFLAGS)" | sed 's_Iinclude_I"\$(LINUXDIR)/include"_g'>>flags
+ echo LINUX_MODFLAGS="\$(MODFLAGS)"
echo LINUX_CC="\$(CC)" >>flags
echo LINUX_LD="\$(LD) \$(LDFLAGS)" >>flags
echo LINUX_AS="\$(AS)" >>flags
echo LINUX_ARFLAGS="\$(ARFLAGS)" >>\$(obj)/flags
echo LINUX_CROSS_COMPILE="\$(CROSS_COMPILE)" >>\$(obj)/flags
echo LINUX_KERNELRELEASE="\$(KERNELRELEASE)" >>\$(obj)/flags
+ echo LINUX_CPPFLAGS="\$(CPPFLAGS)" | sed 's_Iinclude_I"\$(LINUXDIR)/include"_g'>>\$(obj)/flags
echo LINUX_CFLAGS="\$(CFLAGS)" | sed 's_Iinclude_I"\$(LINUXDIR)/include"_g'>>\$(obj)/flags
+ echo LINUX_CFLAGS_MODULE="\$(CFLAGS_MODULE)" >>\$(obj)/flags
echo LINUX_CC="\$(CC)" >>\$(obj)/flags
- echo LINUX_LD="\$(LD) \$(LDFLAGS)" >>\$(obj)/flags
+ echo LINUX_LD="\$(LD) \$(LDFLAGS) \$(LDFLAGS_MODULE)" >>\$(obj)/flags
echo LINUX_AS="\$(AS)" >>\$(obj)/flags
echo LINUX_MODULE_EXT=".ko" >>\$(obj)/flags
EOF