免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4179 | 回复: 5
打印 上一主题 下一主题

[内核模块] netlink_kernel_create一直出现error: too few arguments 错误 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-04-24 13:14 |只看该作者 |倒序浏览
本帖最后由 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中头文件中的此函数定义是:
  1. extern struct sock *netlink_kernel_create(struct net *net,
  2.                                           int unit,unsigned int groups,
  3.                                           void (*input)(struct sk_buff *skb),
  4.                                           struct mutex *cb_mutex,
  5.                                           struct module *module);
复制代码
我是这样调用的(貌似不缺少参数吧。。。。。。):
  1. nl_sk = netlink_kernel_create(&init_net,NETLINK_TEST,0,&input,0,THIS_MODULE);
复制代码
我的整个内核模块是这样写的:
  1. #include <linux/module.h>
  2. #include <linux/init.h>
  3. #include <linux/types.h>
  4. #include <linux/sched.h>
  5. #include <net/sock.h>
  6. #include <linux/netlink.h>

  7. #define NETLINK_TEST 17;
  8. struct sock *nl_sk = NULL;

  9. void input(struct sk_buff *skb){
  10.         struct nlmsghdr *nlh = NULL;
  11.         unsigned char *payload = NULL;
  12.         /*接收数据打印到内核消息*/       
  13.         nlh = (struct nlmsghdr *)skb->data;
  14.         payload = NLMSG_DATA(nlh);
  15.         printk("%s\n",payload);       
  16. }

  17. static int __init test_netlink(void){
  18.         printk("hi,netlink\n");
  19.         nl_sk = netlink_kernel_create(&init_net,NETLINK_TEST,0,input,0,THIS_MODULE);
  20.         return 0;
  21. }
  22. static void __exit exit(void){
  23.         sock_release(nl_sk->sk_socket);
  24.         printk("bye,netlink\n");
  25. }
  26. module_init(test_netlink);
  27. 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函数所在的那一行。
怎么回事啊?求大神解答指教!!!!!!

论坛徽章:
0
2 [报告]
发表于 2013-04-24 15:48 |只看该作者
好好看了下。。。。。。
实在很郁闷。。。。。。
  1. #define NETLINK_TEST 17;
复制代码
后面不小心加了个分号!!!!!!!!
各位以我为鉴啊。。。。。。

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
3 [报告]
发表于 2013-04-25 08:35 |只看该作者
回复 2# tzyhpcom
呵呵。很多小的错误会浪费很多调试时间啊。。。

   

论坛徽章:
0
4 [报告]
发表于 2013-04-26 14:21 |只看该作者
回复 3# 瀚海书香
对啊!以后要谨慎些!!


   

论坛徽章:
0
5 [报告]
发表于 2013-04-27 16:08 |只看该作者
最近我也在学习这个,发现有点抽象,有点不大理解:说netlink的用户态的程序在编译时是和kernel没关系的,而像系统调用,在编译时要静态的链接到kernel。请问楼主是怎么理解的?

论坛徽章:
0
6 [报告]
发表于 2013-04-29 10:31 |只看该作者
回复 5# fummk
这个我也没怎么深入研究啊,最近在做东西用到这个了,等做完东西了再好好深究下。。。。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP