netlink笔记(udev)

在udev应用层进行下面的步抽:

uevent_netlink_sock = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT); etval = bind(uevent_netlink_sock, (struct sockaddr *) &snl, sizeof(struct sockaddr_nl));

其中snl带了该进程的pid好。

然后就可以通过上面的socket进行发送数据。

但是底层也要有相应的接口:对于上面的 NETLINK_KOBJECT_UEVENT,是我们人为定义的一个数字,和af-inet中的协议号比较象。

使用netlink_kernel_create来创建内核中对应的sock,该函数一般会指定接受函数。

    nfnl = netlink_kernel_create(&init_net, NETLINK_NETFILTER, NFNLGRP_MAX,
                     nfnetlink_rcv, NULL, THIS_MODULE);

和用户空间进行数据通信。

NETLINK_KOBJECT_UEVENT,没有kernel的接受函数,是因为这个协议一般是内核有什么变动,比如添加设备,它只需要向用户空间发送数据就可以了,内核没有接收用户的数据。

kobject_uevent -》kobject_uevent_env-》            netlink_broadcast(uevent_sock, skb, 0, 1, GFP_KERNEL);

send_uevent广播事件到用户空间。调用函数netlink-broadcast

 

 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值