2013-04-10 91 views
9

我正在编译器错误在编译时这是使用网络链路功能,我的老kernel模块工作。netlink_kernel_create不与最新的Linux内核

int 
init_module() 
{ 
    /* Initialize the Netlink kernel interface */ 
    nl_sk = netlink_kernel_create(&init_net, 17, 0, recv_cmd, NULL, THIS_MODULE); 
    if(!nl_sk) 
    { 
      printk(KERN_INFO "failed to initialize system (error: 1001)\n"); 
      return -ENOMEM; 
    } 
.... 

以前它工作正常,但现在我得到这个错误。

error: too many arguments to function 'netlink_kernel_create' 

OS信息

uname -a 

Linux ibrar-ahmed 3.8.0-17-generiC#27-Ubuntu SMP Sun Apr 7 19:39:35 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux 

回答

11

只是下面

struct netlink_kernel_cfg cfg = { 
    .input = recv_cmd, 
}; 

nl_sk = netlink_kernel_create(&init_net, 17, &cfg); 

更换

nl_sk = netlink_kernel_create(&init_net, 17, 0, recv_cmd, NULL, THIS_MODULE); 

,它应该工作。我遇到了同样的问题。

+0

非常感谢您的朋友,它帮助了我很多! – 2013-08-27 14:00:55

6

这是因为在3.8 netlink_kernel_create样机已经改变:

netlink_kernel_create(结构网*网,INT单元,结构netlink_kernel_cfg * CFG)

(和QV http://lxr.linux.no/linux+v3.8/include/linux/netlink.h#L48

你没有选择,只能重写内核模块,并删除额外的参数(THIS_MODULE),以及实现netlink_kernel_cfg结构。

+1

是否有任何可用的例子? – 2013-04-11 20:34:45

+1

有了这样一个新的内核,可能不会。虽然它应该是一个相当简单的过程,将实施修改,以适应新的API。不幸的是,这也是我们过去不得不面对的问题(因为Linux内核API正在不断发展,并且通常很不稳定) – Technologeeks 2013-04-11 21:09:21