最近在做工程时,用到了内核间通信,需要把内核部分得到发送至用户空间。下面给出demo例子:
分为内核部分和用户空间部分:
首先在内核部分增加一个netlink消息类型
#define NETLINK_URL 23
创建内核的netlink socket
static struct sock *nlfd;
struct netlink_kernel_cfg cfg = {
.groups = 1, //组播标识,当前只有1个组
.input = netlink_receive,//接收回调函数
};
nlfd = netlink_kernel_create(net, NETLINK_URL, &cfg);
if (nlfd == NULL) {
printk(KERN_INFO "netlink kernel create failed\n");
return -ENOMEM;
}
向用户空间广播报文
int send_urlinfo_to_usrspace(struct sk_buff *skb, char *url)
{
struct sk_buff *info;
struct nlmsghdr *nlh;
struct packet_info *data;
int ret;
if(unlikely(nlfd== NULL))
return 0;
if (!netlink_has_listeners(nlfd, 1))
return 0;
info = alloc_skb(NLMSG