Я отслеживаю события всех устройств, подключенных к хосту. В 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 ответ1

1

события генерируются самим ядром (то есть драйверами ядра).

udev получает их по netlink(7), используя семейство NETLINK_KOBJECT_UEVENT, группа 1. Затем он добавляет различные дополнительные поля из правил & hwdb и повторно передает расширенные события в группу 2 kobject-uevent, где libudev наконец получает их.

Можно запускать события вручную (например, записав "add" или "change" в файл данного устройства /sys/…/uevent ), но обычно этого не происходит, кроме случаев использования "udevadm trigger".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .