在网上找的关于内核空间与用户空间数据传递的例程,编译内核模块时出错
我的linux内核include/linux/netfilter.h中有如下定义:
CODE:
struct nf_sockopt_ops
{
struct list_head list;
int pf;
/* Non-inclusive ranges: use 0/0/NULL to never get called. */
int set_optmin;
int set_optmax;
int (*set)(struct sock *sk, int optval, void __user *user, unsigned int len);
int get_optmin;
int get_optmax;
int (*get)(struct sock *sk, int optval, void __user *user, int *len);
/* Number of users inside set() or get(). */
unsigned int use;
struct task_struct *cleanup_task;
};
编译的出错信息如下:
/home/lwx/u_k_test/imp2/k.c:143: error: variable `imp2_ops' has initializer but incomplete type
/home/lwx/u_k_test/imp2/k.c:145: error: unknown field `hook' specified in initializer
/home/lwx/u_k_test/imp2/k.c:145: warning: excess elements in struct initializer
/home/lwx/u_k_test/imp2/k.c:145: warning: (near initialization for `imp2_ops')
/home/lwx/u_k_test/imp2/k.c:146: error: unknown field `owner' specified in initializer
/home/lwx/u_k_test/imp2/k.c:146: warning: excess elements in struct initializer
/home/lwx/u_k_test/imp2/k.c:146: warning: (near initialization for `imp2_ops')
/home/lwx/u_k_test/imp2/k.c:147: error: unknown field `pf' specified in initializer
/home/lwx/u_k_test/imp2/k.c:147: warning: excess elements in struct initializer
/home/lwx/u_k_test/imp2/k.c:147: warning: (near initialization for `imp2_ops')
/home/lwx/u_k_test/imp2/k.c:148: error: unknown field `hooknum' specified in initializer
/home/lwx/u_k_test/imp2/k.c:148: warning: excess elements in struct initializer
/home/lwx/u_k_test/imp2/k.c:148: warning: (near initialization for `imp2_ops')
/home/lwx/u_k_test/imp2/k.c:149: error: unknown field `priority' specified in initializer
/home/lwx/u_k_test/imp2/k.c:149: warning: excess elements in struct initializer
/home/lwx/u_k_test/imp2/k.c:149: warning: (near initialization for `imp2_ops')
/home/lwx/u_k_test/imp2/k.c: In function `init':
/home/lwx/u_k_test/imp2/k.c:163: warning: implicit declaration of function `nf_register_hook'
/home/lwx/u_k_test/imp2/k.c: In function `fini':
/home/lwx/u_k_test/imp2/k.c:172: warning: implicit declaration of function `nf_unregister_hook'
/home/lwx/u_k_test/imp2/k.c: At top level:
/home/lwx/u_k_test/imp2/k.c:143: error: storage size of `imp2_ops' isn't known
make[2]: *** [/home/lwx/u_k_test/imp2/k.o] 错误 1
make[1]: *** [_module_/home/lwx/u_k_test/imp2] 错误 2
make[1]: Leaving directory `/home/utu-linux_for_s3c2440_V1.5.3'
make: *** [all] 错误 2
在网上搜了一把,找到了dlutmmcl大侠的帖子:
/**
原来这个编译还跟linux源码的内核编译选项有很大的关系
aodv-uu的Makefile中的内核源码必须设置为板上内核的编译源码一致,并且不能修改。
我在kernel-2.4.26-free中的.config的networking options中加入netfilter模块。
**/
按他说的,我的是linux-2.6.13
makemenuconfig
选择 : Networking -> Networking options -> Network packet filtering (replaces ipchains)选项
再回到模块编译,呵呵,成功啦,感谢dlutmmcl大侠,留个记号