Я пытаюсь разработать модуль для связи между ядром и приложением Userspace. Я попробовал ответ, предоставленный в https://stackoverflow.com/a/25071310/4190159
Проблема в том, что у меня есть следующий код:
#include <net/sock.h>
#include <net/netlink.h>
#include <linux/skbuff.h>
#include <string.h>
#define MY_GROUP 1
struct sock* socket;
struct sk_buff* socket_buff;
static void nl_receive_callback (struct sk_buff *skb)
{
nlmsg_free(skb);
}
static void kernel_send_nl_msg(void)
{
struct nlmsghdr *nlsk_mh;
char* msg = "hello kernel";
socket = netlink_kernel_create(&init_net, NETLINK_USERSOCK, 1, nl_receive_callback, NULL, THIS_MODULE);
socket_buff = nlmsg_new(256, GFP_KERNEL);
nlsk_mh = nlmsg_put(socket_buff, 0, 0, NLMSG_DONE, strlen(msg), 0);
NETLINK_CB(socket_buff).pid = 0; // kernel pid
NETLINK_CB(socket_buff).dst_group = MY_GROUP;
strcpy(nlmsg_data(nlsk_mh), msg);
nlmsg_multicast(socket, socket_buff, 0, MY_GROUP, GFP_KERNEL);
return;
}
Когда я пытаюсь скомпилировать вышеупомянутый код, используя:
gcc netlink_module.c -o netlink.o
Я получаю следующую ошибку:
netlink_module.c: 2: 10: фатальная ошибка: net / sock.h: такого файла нет или
каталог #include
компиляция прекращена.
Я пытался найти ошибку, но большая часть результатов поиска возвращается для файла sys / socket.h, а не для net / sock.h
Может кто-то указать, что идет не так?