Sam*_*Sam 3 linux udev linux-kernel
uevents 已经通过 netlink 套接字从内核空间发送到用户空间。
在内核中,必须有一些东西触发 uevent。
我猜有两种可能:
硬件中断 - 这意味着,一旦发生硬件中断,内核就会向用户空间发送事件以表示发生了一些事件。
软件轮询——这意味着,总是有一个守护进程来检查这些文件系统,看看是否有任何改变。如果是,则将这些信息更新到上层。
有人可以提供您的反馈吗?
谢谢
我不能同意你关于投票的看法。uevent是基于事件的,所以没有轮询。
触发 uevent 在很多情况下都会发生,我宁愿先弄清楚存在哪些 uevent类型?
很少搜索,你去 - 在include/linux/kobject.h
enum kobject_action {
KOBJ_ADD,
KOBJ_REMOVE,
KOBJ_CHANGE,
KOBJ_MOVE,
KOBJ_ONLINE,
KOBJ_OFFLINE,
KOBJ_MAX
};
Run Code Online (Sandbox Code Playgroud)
所以是
KOBJ_MAX 是特殊的,标记和枚举。
有 2 个函数实际发送 uevent -kobject_uevent和kobject_uevent_env. 这些函数是通过上面列出的操作调用的。
最后,回答你的问题。没有预定义的情况会触发 uevent。如果您搜索的电话kobject_uevent和kobject_uevent_env你会看到,它在不同的无关的内核子系统各种回调发生。
uevent 是内核工具,用于统一来自各种不相关驱动程序的通知。所以我认为没有众所周知的会触发 uevent 的事情列表。