【问题标题】:netlink_kernel_create is not working with latest linux kernelnetlink_kernel_create 不适用于最新的 linux 内核
【发布时间】:2013-04-10 22:10:48
【问题描述】:

我在编译使用 netlink 函数的旧 kernel 模块时遇到编译器错误。

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'

操作系统信息

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

【问题讨论】:

    标签: c kernel netlink


    【解决方案1】:

    只需替换

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

    以下

    struct netlink_kernel_cfg cfg = {
        .input = recv_cmd,
    };
    
    nl_sk = netlink_kernel_create(&init_net, 17, &cfg);
    

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

    【讨论】:

      【解决方案2】:

      那是因为在 3.8 中 netlink_kernel_create 原型已更改:

      netlink_kernel_create(struct net *net, int unit, struct netlink_kernel_cfg *cfg)

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

      您别无选择,只能重写内核模块,删除额外的参数 (THIS_MODULE),并实现 netlink_kernel_cfg 结构。

      【讨论】:

      • 有例子吗?
      • 有了这样一个新内核,可能不会。尽管修改您的实现以适应较新的 API 应该是一个相当简单的过程。不幸的是,这也是我们过去不得不处理的事情(随着 Linux 内核 API 不断发展,而且通常非常不稳定)
      【解决方案3】:
          netlink_kernel_create(struct net *net, int unit, struct netlink_kernel_cfg *cfg)
      
          struct netlink_kernel_cfg cfg = {
              .groups = SELNLGRP_MAX,
              .flags  = NL_CFG_F_NONROOT_RECV,
          };
      
          selnl = netlink_kernel_create(&init_net, NETLINK_SELINUX, &cfg);
          if (selnl == NULL)
              panic("SELinux:  Cannot create netlink socket.");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-29
        • 2011-12-26
        • 2020-12-30
        • 2014-01-28
        • 1970-01-01
        相关资源
        最近更新 更多