如何在内核中触发uevents

时间:2014-04-18 03:27:27

标签: linux linux-kernel udev

uevents已经通过netlink socket从内核空间发送到用户空间。

在内核中,必须有一些触发器。

我猜有两种可能性:

  1. 硬件中断 - 这意味着,一旦发生硬件中断,内核会向用户空间发送事件,表明发生了一些事件。

  2. 软件轮询 - 这意味着,总有一个守护进程可以检查这些文件系统以查看是否有任何更改。如果是,请将这些信息更新到上一层。

  3. 有人可以提供您的反馈吗?

    由于

1 个答案:

答案 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_ueventkobject_uevent_env。使用上面列出的操作调用这些函数。

最后,回答你的问题。没有预定义的情况会触发uevent。如果您搜索kobject_ueventkobject_uevent_env的来电,您会发现它在不同的不相关内核子系统中的各种回调中都会发生。

uevent是统一来自各种不相关驱动程序的通知的内核工具。所以我认为没有众所周知的事情会引发事件。