В этом руководстве описывается, как управлять GPIO с помощью библиотеки libgpiod в Buildroot (Linux 4.19.206). Основанная на процессоре Rockchip RK3568 , плата поддерживает современное управление GPIO через интерфейсы символьных устройств, заменяя устаревший метод sysfs.
1. Описание GPIOD
Libgpiod — это API пользовательского пространства для библиотеки драйверов GPIO (General-Purpose Input/Output) ядра Linux. Он предоставляет простой способ управления линиями GPIO в системах Linux, которые обычно подключаются к цифровым портам ввода/вывода на аппаратных устройствах, таких как светодиоды, кнопки и т. д. С помощью libgpiod приложения могут легко открывать, читать, записывать и настраивать состояние линии GPIO для работы с аппаратными устройствами и поддержки кроссплатформенного программирования. Начиная с Linux 4.8, интерфейс GPIO sysfs устарел. Пользовательское пространство должно использовать libgpiod для взаимодействия с символьным устройством GPIO.
2. Открыть функцию GPIOD
Откройте графический интерфейс конфигурации Buildroot и проверьте следующие параметры.
После регенерации и прошивки новой файловой системы откройте инструмент отладки платы разработки.
Плата разработки создала узел **/dev/gpioN**.
[root@ok3568:/dev]# ls gpio*
gpiochip0 gpiochip1 gpiochip2 gpiochip3 gpiochip4 gpiochip5
На данном этапе плата разработки поддерживает динамическую библиотеку **gpiod**.
[root@ok3568:/usr/lib]# ls libgpiod.so*
libgpiod.so libgpiod.so.0 libgpiod.so.0.3.2
3. Часто используемые команды GPIOD
3.1 gpiodetect выводит список всех контроллеров GPIO в системе.
[root@ok3568:/]# gpiodetect
gpiochip5 [rk817-gpio] (1 строк)
gpiochip4 [gpio4] (32 строки)
gpiochip3 [gpio3] (32 строки)
gpiochip2 [gpio2] (32 строки)
gpiochip1 [gpio1] (32 строки)
gpiochip0 [gpio0] (32 строки)
3.2 gpioinfo: Отображает информацию об устройстве GPIO.
[root@ok3568:/]# gpioinfo
gpiochip5 - 1 строки:
строка 0: безымянный неиспользуемый вход, активный-высокий
gpiochip4 - 32 строки:
строка 0: безымянный неиспользуемый вход, активный-высокий
строка 1: неназванный неиспользуемый вход, активный высокий уровень
строка 2: неназванный неиспользуемый вход, активный высокий уровень
строка 3: неназванный неиспользуемый вход, активный высокий уровень
строка 4: неназванный неиспользуемый вход, активный высокий уровень
строка 5: неназванный неиспользуемый вход, активный высокий уровень
строка 6: неназванный неиспользуемый вход, активный высокий уровень
строка 7: неназванный неиспользуемый вход, активный-высокий
строка 8: неназванный неиспользуемый вход, активный высокий уровень
строка 9: неназванный неиспользуемый вход, активный высокий уровень
строка 10: неназванный неиспользуемый выход, активный высокий уровень
строка 11: неназванный неиспользуемый вход, активный-высокий
строка 12: неназванный неиспользуемый вход, активный-высокий
строка 13: неназванный неиспользуемый вход, активный высокий уровень
строка 14: неназванный неиспользуемый вход, активный-высокий
строка 15: неназванный неиспользуемый вход, активный-высокий
строка 16: неназванный неиспользуемый вход, активный-высокий
...... //Выберите часть информации для печати
3.3 gpioget: Считывает вход GPIO:
[root@ok3568:/]# gpioget gpiochip4 0
1
3.4 gpioset: Устанавливает уровень GPIO
Тест работы команды на примере GPIO3\_A7.
Выход:
[root@ok3568:/sys/class/gpio]# gpioset gpiochip3 7=0 //Установите вывод на низкий уровень; в это время светодиод D6 на плате разработки горит.
[root@ok3568:/sys/class/gpio]# gpioset gpiochip3 7=1 //Установите вывод на высокий уровень; в это время светодиод D6 на плате разработки выключен.
Примечание: В отличие от традиционного sysfs, по умолчанию **gpioset** завершает работу сразу после установки уровня. Состояние GPIO в это время определяется оборудованием и может вести себя по-разному в разных продуктах.
Если требуется постоянный уровень выходного сигнала, укажите рабочий режим как **сигнал**, как показано в следующем примере.
[root@ok3568:/]# gpioset -m сигнал gpiochip0 0=1
//(Нажмите Ctrl+C, чтобы остановить)
3.5 gpiomon: Отслеживает события GPIO:
Тестовый вывод GPIO3\_C1.
[root@ok3568:/]# gpiomon gpiochip3 17
событие: RISING EDGE смещение: 17 метка времени: [1722306410.568497882] // Контакт подключен к источнику питания 3,3 В.
событие: FALLING EDGE смещение: 17 временная метка: [1722306410.568556216] // Контакт отключен от источника питания 3,3 В.
//(Нажмите Ctrl+C, чтобы остановить)
В этой статье представлено подробное введение в процесс управления GPIO на основе libgpiod на плате разработки OK3568, работающей под управлением системы Buildroot, охватывающее настройку среды, использование команд и важные замечания. Целью является предоставление проверенного практического руководства, которое позволяет инженерам быстро применять libgpiod для управления аппаратными линиями GPIO в реальной разработке.