У меня есть встроенная система, для которой кто-то написал модуль ядра. Я ни в коем случае не новичок в написании модулей ядра, но из того, что я знаю из «документации» модуля и его грубого потока, я знаю, что он следит за прерыванием, которое он запросил с помощью request_irq
, делает некоторые ошибки и устанавливает файл атрибута sysfs в соответствии с ним:
static ssize_t v_detect_show(struct device *dev, struct device_attribute *attr, char *buf)
{
/*
struct platform_device *pdev = to_platform_device(dev);
struct can_detection_config* config = platform_get_drvdata(pdev);
*/
struct can_detection_config* config = dev_get_drvdata(dev);
if (gpiod_get_value_cansleep(config->detect_gpio))
strcpy(buf, "plugged\n");
else
strcpy(buf, "unplugged\n");
return strlen(buf);
}
static DEVICE_ATTR_RO(v_detect);
Я знаю, что это каким-то образом заканчивается в файле /sys/bus/platform/devices/can-detect/v_detect
, так что это атрибут sysfs. Мой вопрос заключается в том, как я могу отслеживать изменение состояния файла без опроса в моем приложении Qt / C ++. Я пытался использовать QFileSystemWatcher
, но при выводе state v_detect
до и после отключения дата изменения остается неизменной. Также попытался использовать QSocketNotifier
для проверки изменений в дескрипторе файла: QSocketNotifier notifier(v_detect.handle(), QSocketNotifier::Read);
Но эта вещь просто запускает без остановки и забивает мою очередь событий.
Любая идея о том, как этого добиться, очень оценили.