Ошибка в функции netlink_kernel_create

Я только начал изучать разработку 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);

1 ответ

Решение

Вы получаете эту ошибку, потому что 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, и продолжают меняться между выпусками ядра, поэтому всегда проверяйте.

Fix:

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

nl_sk = netlink_kernel_create(&init_net, NETLINK_EXAMPLE, &cfg);
Другие вопросы по тегам