|
一个源文件里前面的一段代码
#ifndef __KERNEL__
# define __KERNEL__
#endif
#ifndef MODULE
# define MODULE
#endif
#include<linux/config.h> /* retrieve the CONFIG_* macros */
#if defined(CONFIG_MODVERSIONS) && ! defined(MODVERSIONS)
# define MODVERSIONS
#endif
#if defined(CONFIG_SMP) && ! defined(__SMP__)
# define __SMP__
#endif
#if defined (MODVERSIONS)
# include<linux/modversions.h>
#endif
编译时有如下错误
[zooka@localhost ettouch]$ gcc -o ettouch.o ettouch.c
In file included from ettouch.c:26:
/usr/include/linux/modversions.h:1:2: #error Modules should never use kernel-headers system headers,
/usr/include/linux/modversions.h:2:2: #error but headers from an appropriate kernel-source
有点不明白:如果系统定义了CONFIG_MODVERSIONS的话
就是说内核启动了版本控制,然后定义MODVERSIONS,
使模块也启动版本控制,再包含<linux/modversions.h>,
这个头文件里面包含了内核导出的符号的版本化名字
按照以上的理论,那么上面的预处理程序应该是没错的啊
但在编译的时候就发生上面的错误
打开<linux/modversions.h>来看一下,发现里面就只有上面那两行错误的代码
根本就不是内核导出的符号的版本化名字
但内核里已定义了CONFIG_MODVERSIONS了啊,<linux/modversions.h>却没内容
这点实在想不明白
后来看了一下8139网卡的源代码,发现它是这样处理的
#if defined(MODVERSIONS) && LINUX_VERSION_CODE<0x20300
# include<linux/modversions.h>
#endif
它这里是要内核版本是2.3以前的才包含此头文件
不知大家有没有碰到这种情况,请高手指教
先谢过大家了 |
|