uevents已经通过netlink socket从内核空间发送到用户空间。
在内核中,必须有一些触发器。
我猜有两种可能性:
硬件中断 - 这意味着,一旦发生硬件中断,内核会向用户空间发送事件,表明发生了一些事件。
软件轮询 - 这意味着,总有一个守护进程可以检查这些文件系统以查看是否有任何更改。如果是,请将这些信息更新到上一层。
有人可以提供您的反馈吗?
由于
答案 0 :(得分:4)
我不同意你的投票方式。 uevent
是基于事件的,因此没有轮询。
在许多情况下触发了uevent,我宁愿开始弄清楚存在什么样的类型?
很少搜索,在这里 - include/linux/kobject.h
enum kobject_action {
KOBJ_ADD,
KOBJ_REMOVE,
KOBJ_CHANGE,
KOBJ_MOVE,
KOBJ_ONLINE,
KOBJ_OFFLINE,
KOBJ_MAX
};
所以它是
KOBJ_MAX
是特殊的,标记和枚举。
实际上有2个函数可以发送uevent - kobject_uevent
和kobject_uevent_env
。使用上面列出的操作调用这些函数。
最后,回答你的问题。没有预定义的情况会触发uevent。如果您搜索kobject_uevent
和kobject_uevent_env
的来电,您会发现它在不同的不相关内核子系统中的各种回调中都会发生。
uevent是统一来自各种不相关驱动程序的通知的内核工具。所以我认为没有众所周知的事情会引发事件。