逃逸电子的笔记 https://bbs.21ic.com/?107509 [收藏] [复制] [RSS] 在飞扬的电子尘埃中,寻找自己的天空.  QQ:41140388  EMAIL:zj_sx8192@yahoo.com.cn

日志

netlink 应用笔记

已有 894 次阅读2012-4-9 06:34 |个人分类:嵌入式|系统分类:嵌入式系统

1.使用netlink,用户仅需要在 include/linux/netlink.h 中增加一个新类型的 netlink 协议定义即可。

2.netlink是异步通信机制,在内核态和用户态之间的消息保存在socket缓存队列中,发送消息只是把消息保存在接收者的socket的接收队列,而不需要等待接收者收到消息,但系统调用与 ioctl 则是同步通信机制,如果传递的数据太长,将影响调度粒度。

3.netlink 支持多播,内核模块或应用可以把消息多播给一个netlink组,属于该neilink 组的任何内核模块或应用都能接收到该消息,内核事件向用户态的通知机制就使用了这一特性。

4.内核可以使用 netlink 首先发起会话,但系统调用和 ioctl 只能由用户应用发起调用。

多播例子:
struct sockaddr_nl addr;
Fd=socket(AF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);

addr.nl_family = AF_NETLINK;
addr.nl_pid = getpid();
addr.nl_groups = 1;

bind(Fd,(struct sockaddr *)&addr,sizeof(addr));

iRcvLen = recv(Fd, &szBuf, sizeof(szBuf), 0);





路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)