能提问题一下uvent是什么么?

更新里面多了uvent,不太明白是什么所以请求各位指点一下。

1. Uevent的功能
Uevent是Kobject的一部分,用于在Kobject状态发生改变时,例如增加、移除等,通知用户空间程序。用户空间程序收到这样的事件后,会做相应的处理。
该机制通常是用来支持热拔插设备的,例如U盘插入后,USB相关的驱动软件会动态创建用于表示该U盘的device结构(相应的也包括其中的kobject),并告知用户空间程序,为该U盘动态的创建/dev/目录下的设备节点,更进一步,可以通知其它的应用程序,将该U盘设备mount到系统中,从而动态的支持该设备。
2. Uevent在kernel中的位置
Uevent的机制是比较简单的,设备模型中任何设备有事件需要上报时,会触发Uevent提供的接口。Uevent模块准备好上报事件的格式后,可以通过两个途径把事件上报到用户空间:一种是通过kmod模块,直接调用用户空间的可执行文件;另一种是通过netlink通信机制,将事件从内核空间传递给用户空间。

3. Uevent的内部逻辑解析
3.1 Source Code位置
Uevent的代码比较简单,主要涉及kobject.h和kobject_uevent.c两个文件,如下:
include/linux/kobject.h
lib/kobject_uevent.c
3.2 数据结构描述
kobject.h定义了uevent相关的常量和数据结构
kobject_action定义了event的类型
4.uevent是sysfs向用户空间发出的消息。
5.uevent用户空间部分
uevent的用户空间程序有两个,一个是udev,一个是mdev。 udev通过netlink监听uevent消息,它能完成两个功能: 自动加载模块 ;根据uevent消息在dev目录下添加、删除设备节点。
另一个是mdev,mdev在busybox的代码包中能找到,它通过上节提到的uevent_helper函数被调用。
6.其他
kobject代表sysfs中的目录。

ktype代表kobject的类型,主要包含release函数和attr的读写函数。
kset包含了subsystem概念,kset本身也是一个kobject,所以里面包含了一个kobject对象。另外,kset中包含kset_uevent_ops,里面主要定义了三个函数
int (*filter)(struct kset *kset, struct kobject *kobj); const char *(*name)(struct kset *kset, struct kobject *kobj);
int (*uevent)(struct kset *kset, struct kobject *kobj, struct kobj_uevent_env
*env);
这三个函数都与uevent相关。filter用于判断uevent是否要发出去。name用于得到subsystem的名字。uevent用于填充env变量。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-03
解决Windows 系统下,出现 ioerror:cannot watch more than 1024 sockets的。实验性功能,要看测试反馈的效果
第2个回答  2015-07-09
是一个带DOS命令的设置工具,具体使用方法看“电脑DOS命令使用方法”。
第3个回答  2015-06-05
解决Windows 系统下,出现 ioerror:cannot watch more than 1024 sockets的。实验性功能,要看测试反馈的效果。
第4个回答  2015-07-01
解决Windows 系统下,出现 ioerror:cannot watch more than 1024 sockets的。实验性功能,要看测试反馈的效果
相似回答