2013-11-02 2 views
3

Предположим, что gpio X можно экспортировать в sysfs в качестве входного вывода, после этого в/sys/class/gpio/будет создан каталог с именем gpioX. gpioX/содержит несколько файлов, таких как «значение», которое представляет текущее состояние gpio X (высокий или низкий).Как обновляется sysfs при изменении состояния GPIO?

Что происходит (в пространстве ядра), когда сигнал, подаваемый на контакт X, меняет свое состояние (например, от низкого до высокого)?

Я имею в виду, что до перехода gpioX/value содержит «низкий», но после этого он будет содержать «высокое» значение. Как этот файл обновляется ОС?

Я думаю, что требуется механизм прерывания. Использует ли механизм прерывания для обновления sysfs?

ответ

5

Как файл обновляется ОС? Я думаю, что требуется механизм прерывания.

Это не требует механизма прерывания, если он не поддерживает опрос (man poll) или альтернативные асинхронные уведомления. По крайней мере, с большинством версий, /sys/class/gpio/ только считывает уровень GPIO, когда кто-то читает файл.

sysfs, debugfs, configfs, PROCFS, и т.д., виртуальные файловые системы. Когда вы получаете доступ к файлу, код в ядре Linux запускается для предоставления значения. sysfs предоставляет только файл, такой как интерфейс; это не значит, что это подставил с фактическим состоянием. Состояние - это уровень GPIO, который можно прочитать в любое время.

gpio_value_show() представляется текущей реализацией. То, что вы описываете с прерываниями, возможно. Это можно сделать с помощью функции sysfs_set_active_low() или sysfs файл /sys/class/gpio/gpioN/edge. Запись в файл может возвращать ошибку, если GPIO не поддерживает прерывания. См. gpio.txt для получения дополнительной информации (особенно для конкретной версии Linux).

Смежные вопросы