- 论坛徽章:
- 1
|
今天在调内核态和用户态的通信,参考的是http://www.ibm.com/developerworks/cn/linux/l-netlink/ 里的代码,使用netlink通信。
我用的是linux 3.10.xx版本,和上面文章用的版本可能相差了很多,很多接口函数都不一样,修改一番后,大致如下:
内核先nlfd = netlink_kernel_create(&init_net, NL_SENDINFO, &_cfg);
在kernel_receive里接收用户态数据。
用户态:
skfd = socket(PF_NETLINK, SOCK_RAW, NL_SENDINFO);//创建socket
bind(skfd, (struct sockaddr*)&local, sizeof(local))//绑定地址
sendto(skfd, &message, message.hdr.nlmsg_len, 0,(struct sockaddr*)&kpeer, sizeof(kpeer));//向内核发送数据(自己的pid)
但是编译运行的结果是:
运行用户态程序后,内核的确进入了对应的kernel_receive函数,
但是,在while((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL)这里直接跳出。
不清楚为什么既然进了接收函数,但是取数据时候为空?
请问大婶们这可能是哪里出问题了呢?
|
|