我正在尝试开发一个模块来在内核和用户空间应用程序之间进行通信。我尝试了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 < net/sock.h > 编译终止。
我试图搜索错误,但大部分搜索结果都返回 sys/socket.h 文件,而不是 net/sock.h
有人可以指出出了什么问题吗?