netlink_kernel_create 函数出错

Error in netlink_kernel_create function

我刚开始学习 Linux 开发,出于培训目的,我编写了一个简单的可加载内核模块。当我尝试通过发出以下命令添加它时 - make -C /lib/modules/$(uname -r)/build M=$PWD modules

我收到以下错误:

错误:函数“netlink_kernel_create”的参数过多 nl_sk = netlink_kernel_create(&init_net, NETLINK_EXAMPLE, 0, recv_msg, NULL, THIS_MODULE);

你得到这个错误是因为 netlink_kernel_create 接受三个参数但你传递了 6.

static inline struct sock *
netlink_kernel_create(struct net *net, int unit, struct netlink_kernel_cfg *cfg)
{
        return __netlink_kernel_create(net, unit, THIS_MODULE, cfg);
}

netlink_kernel_create

自 2.6 内核以来,许多函数的实现和签名都发生了变化,并且在内核版本之间仍在变化,因此请务必检查。

修复:

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

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