我正在监控连接到主机的所有设备的事件。Linux 有 udev 守护进程,它监听所有设备特定事件,如在线、离线、添加、删除和改变。
我使用linux提供的一个函数udev_device_get_action,用于获取该设备上的事件/操作。
在我的机器上,我不断得到改变事件从此函数返回的代码变量。[它返回字符指针]
我检查了 Linux 代码的功能udev_device_get_action,它只是返回行动来自 udev 设备结构。
UDEV_EXPORT const char *udev_device_get_action(struct udev_device *udev_device)
{
if (udev_device == NULL)
return NULL;
return udev_device->action;
}
那么,我怎么知道这些变化事件到底来自哪里呢?
答案1
uevents 由内核本身生成(即由内核驱动程序生成)。
udev 接收它们 网络链接(7),使用家族 NETLINK_KOBJECT_UEVENT,组 1。然后,它从规则和 hwdb 添加各种额外字段,并将扩展的 uevent 重新广播到 kobject-uevent 组 2,libudev 最终在其中接收它们。
可以手动触发 uevents(例如,通过将“添加”或“更改”写入给定设备的/sys/…/uevent
文件),但是通常不会这样做,除非使用“udevadm trigger”。