netlink 应用笔记
已有 910 次阅读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);