《Linux设备节点创建》内核kobject上报uevent过滤规则Word文档格式.docx
《《Linux设备节点创建》内核kobject上报uevent过滤规则Word文档格式.docx》由会员分享,可在线阅读,更多相关《《Linux设备节点创建》内核kobject上报uevent过滤规则Word文档格式.docx(19页珍藏版)》请在冰点文库上搜索。
15.
len;
16.
char
buf[4096];
17.
iovec
iov;
18.
msghdr
msg;
19.
i;
20.
21.
memset(&
sa,0,sizeof(sa));
22.
sa.nl_family=AF_NETLINK;
23.
sa.nl_groups=NETLINK_KOBJECT_UEVENT;
24.
sa.nl_pid
=
0;
//getpid();
both
is
ok
25.
msg,0,sizeof(msg));
26.
iov.iov_base=(void
*)buf;
27.
iov.iov_len=sizeof(buf);
28.
msg.msg_name=(void
*)&
29.
msg.msg_namelen=sizeof(sa);
30.
msg.msg_iov=&
31.
msg.msg_iovlen=1;
32.
33.
sockfd=socket(AF_NETLINK,SOCK_RAW,NETLINK_KOBJECT_UEVENT);
34.
if(sockfd==-1)
35.
printf("
socket
creating
failed:
%s\n"
strerror(errno));
36.
if(bind(sockfd,(struct
sockaddr
sa,sizeof(sa))==-1)
37.
bind
error:
38.
while
(1){
39.
memset(buf,0,sizeof(buf));
40.
len=recvmsg(sockfd,&
msg,0);
41.
if(len<
0){}
42.
//printf("
receive
error\n"
);
43.
else
32||len>
sizeof(buf))
44.
invalid
message"
45.
for(i=0;
i<
i++)
46.
if(*(buf+i)=='
\0'
)
47.
buf[i]='
\n'
;
48.
received
%d
bytes\n%s\n"
len,buf);
49.
}
50.}
51.
52.int
main(int
argc,char
**argv)
53.{
54.
MonitorNetlinkUevent();
55.
return
56.}
Android.mk
[plain]
1.LOCAL_PATH:
$(call
my-dir)
2.include
$(CLEAR_VARS)
3.
4.LOCAL_SRC_FILES:
\
5.
testnet.c
6.
7.LOCAL_SHARED_LIBRARIES
:
8.
libutils
9.
10.LOCAL_MODULE:
testnet
11.
12.LOCAL_MODULE_TAGS
optional
14.include
$(BUILD_EXECUTABLE)
二、如下是添加打印后的信息(Android用户空间udev为ueventd,属于init的一个软连接)
1.总线驱动
root@android:
/data/tank#insmodtestbus.ko
1.//内核模块加载成功,会上报netlink
2.TK------->
>
kobject_uevent.c>
kobject_uevent_env
3.kobject:
'
testbus'
(bf02d1c8):
4.TK------->
kobject_uevent_env>
netlink_broadcast
5.//总线注册上报netlink
6.TK---testlddbus.c----->
ldd_bus_init
7.TK--------->
bus.c>
bus_register,,,bus->
name
ldd
8.TK-------_>
kobject.c>
kset_register
9.TK-------_>
kset_register>
kobject_uevent
10.TK------->
11.kobject:
ldd'
(cfcdb1c8):
12.TK------->
13.//设备注册由于没有分配主设备号,不上报netlink
14.TK-------_>
core.c>
device_register
15.TK-------_>
device_add
16.TK-------_>
device_add>
17.TK------->
18.TK-------_>
drivers/base/core.c>
dev_uevent_filter>
ktype
0xc032137c,&
device_ktype
0xc032137c
19.TK-------->
dev->
uevent_suppress
0
20.TK-------->
bus
0x0
21.TK-------->
class
22.kobject:
ldd0'
(bf02d074):
23.kobject:
kobject_uevent_env:
filter
function
caused
the
event
to
drop!
24.//用户空间ueventd的处理,2个uevent事件
25.init:
TK-------_>
uevent.c>
ueventd_main>
ufd.fd
4
26.init:
device.c.>
handle_device_fd
27.init:
TK------------>
device.c>
handle_device_event>
uevent->
major
-1,uevent->
minor
-1
28.init:
and
29.init:
30.init:
31.received
83
bytes
32.add@/module/testbus
33.ACTION=add
34.DEVPATH=/module/testbus
35.SUBSYSTEM=module
36.SEQNUM=649
38.received
66
39.add@/bus/ldd
40.ACTION=add
41.DEVPATH=/bus/ldd
42.SUBSYSTEM=bus
43.SEQNUM=650
drivers/base/bus.c
1.int
bus_register(struct
bus_type
*bus){
2.
retval
kset_register(&
priv->
subsys);
/*
4.
lib/kobject.c
kset_register(struct
kset
*k){
kobject_uevent(&
k->
kobj,
KOBJ_ADD);
7.
*/
bus_create_file(bus,
&
bus_attr_uevent);
devices_kset
kset_create_and_add("
devices"
NULL,
subsys.kobj);
drivers_kset
drivers"
12.}
2.插入设备
/data/tank#insmodtestdev.ko
1.//内核模块加载会上报netlink
testdev'
(bf0334e0):
5.//没有主设备号,不会上报netlink
6.TK---testdev.c----->
mini_init
7.TK-------_>
mini'
(bf0333dc):
12.TK-------_>
13.TK-------->
14.TK-------->
0xbf001130
15.TK---testlddbus.c----->
ldd_uevent
dev_uevent>
-12
17.kobject:
uevent()
returned
18.//用户空间ueventd的处理,1个uevent事件
19.init:
20.init:
21.init:
22.init:
23.received
24.add@/module/testdev
25.ACTION=add
26.DEVPATH=/module/testdev
27.SUBSYSTEM=module
28.SEQNUM=651
3.设备驱动
/data/tank#insmodtestdriver.ko
1.//内核模块成功加载,会上报netlink
testdriver'
(bf039c34):
5.//类注册会上报netlink(class_creat)
6.TK---testdriver.c----->
driver_init
7.Tk--------->
driver.c>
driver_register
8.TK---------_>
bus_add_driver
9.TK---testbus.c----->
ldd_match
10.TK---testbus.c----->
11.TK---testlddbus.c----->
ldd_drv_probe
12.TK----testdriver.c------>
driver_probe
mini
13.TK-------_>
15.TK------->
16.kobject:
mymodule'
(cfee5b68):
18.//有主设备号时设备注册上报netlink
device_create
20.TK-------_>
21.TK-------_>
22.TK-------_>
23.TK------->
24.kobject:
mymod0'
(caa4e724):
25.TK-------_>
26.TK-------->
27.TK-------->
28.TK-------->
0xcaade760
29.TK-------_>
30.TK------->
31.//驱动注册都会上报netlink
32.TK---------_>
bus_add_driver>
33.TK------->
34.kobject:
(c8aa48c0):
35.TK------->
36.//用户空间ueventd的处理,4个uevent事件
37.init:
38.init:
39.init:
40.init:
41.init:
42.init:
43.init:
248,uevent->
44.init:
TK------_