- 论坛徽章:
- 0
|
本帖最后由 tzyhpcom 于 2013-04-24 13:19 编辑
最近在研究netlink。内核是2.6.32-5。在内核模块中使用netlink_kernel_create函数时一直提示error: too few arguments to function netlink_kernel_create。我看到本机内核即2.6.32中头文件中的此函数定义是:- extern struct sock *netlink_kernel_create(struct net *net,
- int unit,unsigned int groups,
- void (*input)(struct sk_buff *skb),
- struct mutex *cb_mutex,
- struct module *module);
复制代码 我是这样调用的(貌似不缺少参数吧。。。。。。):- nl_sk = netlink_kernel_create(&init_net,NETLINK_TEST,0,&input,0,THIS_MODULE);
复制代码 我的整个内核模块是这样写的:- #include <linux/module.h>
- #include <linux/init.h>
- #include <linux/types.h>
- #include <linux/sched.h>
- #include <net/sock.h>
- #include <linux/netlink.h>
- #define NETLINK_TEST 17;
- struct sock *nl_sk = NULL;
- void input(struct sk_buff *skb){
- struct nlmsghdr *nlh = NULL;
- unsigned char *payload = NULL;
- /*接收数据打印到内核消息*/
- nlh = (struct nlmsghdr *)skb->data;
- payload = NLMSG_DATA(nlh);
- printk("%s\n",payload);
- }
- static int __init test_netlink(void){
- printk("hi,netlink\n");
- nl_sk = netlink_kernel_create(&init_net,NETLINK_TEST,0,input,0,THIS_MODULE);
- return 0;
- }
- static void __exit exit(void){
- sock_release(nl_sk->sk_socket);
- printk("bye,netlink\n");
- }
- module_init(test_netlink);
- module_exit(exit);
复制代码 make文件是这样的:(make文件之前一直这样用的,编译其他内核模块时没有出过错)
test = netlink_module
obj-m := $(test).o
KERNELDIR = /lib/modules/`uname -r`/build
PWD = `pwd`
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
install:
insmod $(test).ko
uninstall:
rmmod $(test).ko
clean:
rm -rf *.o *.mod.c *.ko
rm -rf Module.symvers .*cmd .tmp_versions
但是make的时候就出错了,
/root/projects/netlink/netlink_module.c:33: error: expected “)” before “;” token
/root/projects/netlink/netlink_module.c:33: error: too few arguments to function “netlink_kernel_create”
33行就是netlink_kernel_create函数所在的那一行。
怎么回事啊?求大神解答指教!!!!!! |
|