c/c++语言开发共享netlink_kernel_create无法使用最新的Linux内核

我在编译使用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' 

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 

    只需更换

     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); 

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

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

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

    (和qv )

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

    需要了解更多c/c++开发分享netlink_kernel_create无法使用最新的Linux内核,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)

      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."); 

      以上就是c/c++开发分享netlink_kernel_create无法使用最新的Linux内核相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(计算机技术网)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ctvol.com/c-cdevelopment/980297.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐