我现在在学内核模榈谋嘈?但是连一个最简单的HELLO WORLD都通不过: 我是REDHAT7.0内核是2.2.16. 我的程序如下 #include <linux/module.h> #include <linux/kernel.h> #if CONFIG_MODVERSIONS==1 #define MODVERSIONS #include <linux/modversions.h> #endif int init_module() { printk("hello,world "); return 0; } void cleanup_module() { printk("short is the life of a kernel module "); } Makefile为 CC=gcc MODCFLAGS := -Wall -DMODULE -D__KERNEL__ -DLINUX
hello.o: hello.c /usr/include/linux/version.h $(CC) $(MODCFLAGS) -c hello.c 然后编译提示头文件有错 我发现我的modversions.h为以下内容 #error Modules should never use kernel-headers system headers, #error but headers from an appropriate kernel-source
我用源码src中的modversions.h代替,然后又把源码中的models目录拷贝过来结果虽然编译通过,但是一运行就提示 hello.o:kernel -module version mismatch hello.o was compiled for kernel version 2.4.0-0.26 while this kernel is version 2.2.16-22 望高手指点,不要跟我说升级内核,因为我要做的东西必须要在2.2.16下运行 如果我只是包含#include <linux/module.h> #include <linux/kernel.h> 两个头文件,然后用gcc -c -O3 hello.c编译又提示什么版本号出错
!!I KNOW WHY!! Hmmm... You are programming in kernel and its version is 2.2.16, so you should do following: (I HAVE JUST SAID IT :< )
cd /usr/include mv linux linux.bak mv asm asm.bak ln -s /usr/src/linux/include/linux linux ln -s /usr/src/linux/include/asm asm