Netlink_kernel_create不使用最新的Linux内核[英] netlink_kernel_create is not working with latest linux kernel

本文是小编为大家收集整理的关于Netlink_kernel_create不使用最新的Linux内核的处理方法,想解了Netlink_kernel_create不使用最新的Linux内核的问题怎么解决?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)

(和q.v. .

您别无选择,只能重写内核模块,然后删除该额外的参数(this_module),并实现Netlink_kernel_cfgstruct.

其他推荐答案

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

本文地址:https://www.itbaoku.cn/post/359233.html