udev - изменить событие с udev_device_get_action
Я наблюдаю за событиями всех устройств, подключенных к хосту. В 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 ответ
События генерируются самим ядром (то есть драйверами ядра).
udev получает их по netlink (7), используя семейство NETLINK_KOBJECT_UEVENT, группа 1. Затем он добавляет различные дополнительные поля из правил & hwdb и повторно передает расширенные события в группу 2 kobject-uevent, где libudev наконец получает их.
Можно запускать события вручную (например, написав "добавить" или "изменить" для данного устройства /sys/…/uevent
файл), но это обычно не делается, за исключением случаев использования "udevadm триггера".