找回密码
 注册
关于网站域名变更的通知
查看: 330|回复: 1
打印 上一主题 下一主题

为什么要用Netlink实现热拔插监控?又是怎样实现的?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-11-5 10:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
新的Linux内核使用udev代替了hotplug作为热拔插管理,虽然有udevd管理热拔插,但有时候我们还是需要在应用程序中检测热拔插事件以便快速地处理,比如在读写SD卡的时候拔下SD卡,那么需要立即检测出该情况,然后结束读写线程,防止VFS崩溃。Netlink是面向数据包的服务,为内核与用户层搭建了一个高速通道,是udev实现的基础。该工作方式是异步的,用户空间程序不必使用轮询等技术来检测热拔插事件。    内核中使用uevent事件通知用户空间,uevent首先在内核中调用netlink_kernel_create()函数创建一个socket套接字,该函数原型在netlink.h有定义,其类型是表示往用户空间发送消息的NETLINK_KOBJECT_UEVENT,groups=1,由于uevent只往用户空间发送消息而不接受,因此其输入回调函数input和cb_mutex都设置为NULL。
1 ^. Y' i0 u0 L" k7 D5 p6 Z7 b2 x: g5 f  S4 f

! C" r. `. F) }% q, f  s#include
7 u7 {# R* s0 K" V4 M2 lstruct sock *netlink_kernel_create(struct net *net,int unit,unsigned int groups,
+ x& Z1 I& P. s, v. v& y! y                                                  void (*input)(struct sk_buff *skb),9 ~3 I( S3 k# W! {/ u# @3 ~1 R
                                                  struct mutex *cb_mutex,' n5 k9 Z: R( Y& m2 e3 k
                                                  struct module *module);! B* y3 P5 k4 V% l' S
! W8 N. L, E0 y( _" F# \/ O

2 R, _, b/ o: b2 g1 ~, K" K5 A( D1 |ue_sk->sk = netlink_kernel_create(net, NETLINK_KOBJECT_UEVENT,
1 A- s& O8 }' W9 n  U! q6 N                                                        1, NULL, NULL, THIS_MODULE);
% I3 C: Q( m0 P/ W9 a$ S3 j
" L: \4 u" K# Z$ @/ s) {* `
) ]7 e3 P2 V- j) E2 r

; ?1 A$ N- K: l5 N5 A) s当有事件发生的时候,调用 kobject_uevent()函数,实际上最终是调用8 N! K; @7 G! x  L$ M
) a3 Y7 `  V/ C2 Z& x' h9 y+ B% J

  q7 p! P+ L8 l  C" y' z. y6 M netlink_broadcast_filtered(uevent_sock, skb , 0, 1, GFP_KERNEL ,
$ v. q5 U) L6 }; _# g+ o% f  n                                        kobj_bcast_filter, kobj);( k# h: O  u4 T$ U6 G
8 z3 q5 A( S, f' R' x" k1 t6 I1 D
0 Y7 }7 y4 Q  q" Q1 d* R- t

! `, F+ d& `2 y: ?% S" Z- x- B完成广播任务。" `2 Y9 ~. p: ?1 W: p) w, P0 ^

, c5 q4 g6 L; l# ]+ e% X
. a  ?2 s& v' _4 T0 F; ~* t2 \
游客,如果您要查看本帖隐藏内容请回复

! }2 j5 D6 B  J& k0 _9 W  Y( A7 `  @9 P  G$ t( h. l, t" @
  i$ q' ^, `. Y9 n0 O. V
$ W" n- J8 d4 F# [
: a/ K& }) u2 b3 |5 B
5 c; j4 ]2 }$ b' j. `

) E$ d' \: }2 B; G( e2 L
  [. \, J6 |; [8 m
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 02:05 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表