Ошибка в функции 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);
}
Многие функции изменили как реализацию, так и сигнатуру, начиная с ядра 2.6, и продолжают меняться между выпусками ядра, поэтому всегда проверяйте.
Fix:
struct netlink_kernel_cfg cfg = {
.input = recv_msg,
};
nl_sk = netlink_kernel_create(&init_net, NETLINK_EXAMPLE, &cfg);