LINUX.ORG.RU

Включение GPIO (Raspberry Pi 4) в Fedora [Вопрос]

 , , , ,


0

2

Доброго всем времени суток!

Описание

Недавно обзавёлся «Малиной» (Raspberry Pi 4 с 8Гб) и установил на неё ОС Fedora Linux (aarch64) 37 Workstation Edition. Точнее, установил ОС на MicroSD (32 Гб), которую затем вставил в плату Малины.

Отмечу, что плата Raspberry имеет интерфейс ввода/вывода GPIO, которым мне бы и хотелось воспользоваться. Скопипастив пример кода получения/отправки данных по пинам GPIO, я заметил, что работа с этими пинами осуществляется через взаимодействиями с файлами в «/sys/class/gpio/» (Вот ссылка на описание работы с файлами)

Но, я обнаружил, что у меня в «/sys/class/» нет папки «gpio» (что логично для не «родная» ОС). Погуглив «linux no gpio folder», обнаружил следующие советы по данной ситуации:

The sysfs interface (/sys/class/gpio/…) is optional. Make sure your kernel configuration has the CONFIG_GPIO_SYSFS option enabled and rebuild. (Ссылка)

Собственно, ещё и в первой ссылке, как раз, и рекомендуют установить следующие переменные конфигурации:

  • CONFIG_GPIOLIB=y
  • CONFIG_GPIO_SYSFS=y

На вопрос «А как на Федоре установить переменные конфигурации??» мне помогла эта статья (там предлагают воспользоваться grubby)

Я выполнил следующие команды в терминале:

sudo grubby --update-kernel=ALL --args="CONFIG_GPIOLIB=y"

sudo grubby --update-kernel=ALL --args="CONFIG_GPIO_SYSFS=y"

Затем, перезапустил ОС. Но, после перезапуска ОС, по пути «/sys/class/», всё также нет папки «gpio».

Конкретный вопрос

Как на Федоре, установленной на Raspberry Pi 4, добиться появления папки «gpio» с последующей корректной работе с её пинами GPIO?

Это опции сборки самого ядра. Для их применения ядро надо пересобрать. Как это сделать именно в fedora, я не подскажу. Тебе нужна именно она? Если нет, то прошей рекомендуемый производителем дистрибутив, как советуют выше.

apt_install_lrzsz ★★★
()
Ответ на: комментарий от vbr

Тогда я всё-таки постараюсь перекомпилировать ядро. Правда, дополнительно проверю, что нужно ещё изменить /добавить, чтобы пересобранное ядро не только создало эти папки, но и стало работать с GPIO. Наверное, добавления одних лишь переменных конфигурации будет недостаточно. Об успехах пересборки и как это делается отпишусь в этой теме.

LordKmon
() автор топика
Ответ на: комментарий от Novator

@apt_install_lrzsz @Novator

Мне надо освоить Asta Linux, но если купить Астру, то её установочный диск/флешка/ключ придёт только через пару недель. А хотелось уже сразу хоть в чем-то начать тренироваться в Линуксе. Под Raspberry Pi 4 из «линуксообразных» ОС корректно ставится и поддерживается пока только Fedora.

LordKmon
() автор топика
Ответ на: комментарий от LordKmon

До этого, у меня ни разу не было ни «Малины», ни Линукса. Поэтому, опыта работы с GPIO вообще раньше не было.

Если от GPIO нужно только чтение/запись портов ввода-вывода, то это делается напрямую через отображаемые регистры или специальные ассемблерные команды (зависит от микропроцессора), при этом обычно надо вызвать специальную функцию разрешающую доступ к этим портам из пользовательского пространства.

Чуть выше стоит доступ через что-то запускаемое в ядре и доступное пользователю как символьное устройство, или тот же sysfs, сейчас часто используют либу libgpiod.

raspopov
()
Ответ на: комментарий от LordKmon

Мне надо освоить Asta Linux

CE версия скачивается бесплатно, а коммерческая SE версия отличается предопределёнными профилями настройки безопасности и комплектом утилит для «секретности», которые никому не нужны. И всё это обычный Debian, настолько обычный, что официально можно подключить его репу, обновиться и ничего не сломается. Кстати репы и CE, и SE доступны свободно.

raspopov
()
Ответ на: комментарий от LordKmon

Под Raspberry Pi 4 из «линуксообразных» ОС корректно ставится и поддерживается пока только Fedora.

Как так? У них же несколько разных сборок раньше было официально доступно.

https://www.raspberrypi.com/software/

https://emteria.com/blog/raspberry-pi-4-os

apt_install_lrzsz ★★★
()
Ответ на: комментарий от hbars

Стрелять сюда.

Ранее попадал на подобную страницу, вот что происходит при попытке установки:

cd /Downloads
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb

выдаёт следующую ошибку:

dpkg: ошибка при обработке архива wiringpi-latest.deb (--install):
 архитектура пакета (armhf) не соответствует архитектуре системы (arm64)
При обработке следующих пакетов произошли ошибки:
 wiringpi-latest.deb

Поэтому предположу, что wiringPi пока не доступен для 64-битной Малины.

LordKmon
() автор топика
Ответ на: комментарий от raspopov

это делается напрямую через

Знать бы ещё эти специальный команды или разрешающую функцию… =)

сейчас часто используют либу libgpiod

Я попробую её скачать\установить и отпишусь тут об опыте её использования.

LordKmon
() автор топика
Ответ на: комментарий от raspopov

CE версия скачивается бесплатно, а коммерческая SE версия отличается предопределёнными…

Да, но мне именно и нужна была «секретная», и желательно, с доступом к последним обновлениям. А версия СЕ - кажется, уже перестали бесплатно обновлять «Орел» и «Смоленск».

И всё это обычный Debian, настолько обычный, что официально можно подключить его репу…

Вот это интересно! Спасибо Вам за информацию, думаю, что в будущем очень пригодиться.

LordKmon
() автор топика
Ответ на: комментарий от apt_install_lrzsz

Как так? У них же несколько разных сборок раньше было официально доступно.

Похоже, когда я гуглил «Как установить Linux на Raspberry 4», мне чаще выпадали ссылки такого типа:

The Raspberry Pi 4 is officially supported from Fedora

Fedora 37 Released With Official Raspberry Pi 4 Support

Но та ссылка, которую Вы прислали - очень интересна. И, возможно, я ей воспользуюсь в качестве эксперимента (или запасного плана) для Малины.

LordKmon
() автор топика

Благодаря подсказкам пользователей, в том числе и @raspopov и @nvl, удалось выйти на след библиотеки libgpiod.

А именно, на странице Fedora Docs, действительно, указано что есть поддержка (совместимость с) GPIO, и рекомендацию использования libgpiod.

Это, в свою очередь, дало +10 к Морали при гуглении запроса «fedora install libgpiod». И, чтобы читатель не утруждал себя поиском, вот оптимальный результат выдачи: How To Install libgpiod

Я, например, воспользовался таким путём установки:

sudo dnf makecache --refresh
sudo dnf -y install libgpiod

Конечно, после установки этого пакета, папки «gpio» у меня не появилось по пути «sys/class/», но, буквально, следующий результат поиска подсказал мне, что способ работы с GPIO через них - уже очень сильно устарел.

И там же, а именно здесь, в подробностях расписаны уже актуальные инструменты взаимодействия с пинами GPIO. Например, инструмент gpiodetect (при вызове которого я установил себе libgpiod-utils) позволил всё-таки найти мне в /dev/ папки gpiochip0 и gpiochip1.

Теперь осталось проверить на практике все эти инструменты, чтобы попробовать зажечь LED на спаянной мною схеме. Надеюсь, что всё будет ОК, и затем, опубликовав результаты, я закрою эту тему.

LordKmon
() автор топика
Ответ на: комментарий от LordKmon

Поэтому предположу, что wiringPi пока не доступен для 64-битной Малины.

Я не знаю что там не готово. Мне deb был не нужен потому как wiringpi собирал руками.

hbars ★★★★★
()
Последнее исправление: hbars (всего исправлений: 1)

В итоге, успешно спаяв плату со светодиодом и резистором, я подключил это всё к пинам GPIO (именно к Ground и GPIO2).

Отмечу, что диод загорелся сразу при включении Малины. Вызов команды:

sudo gpioget 0 2

подтвердил, что, скорее всего, изначально все пины находятся в «1» значении.

Отдельно опишу, что аргументы этой команды относятся к «чипу» ( = 0) и указанной «линии» ( =2 ). Соответствие пинов и линий можно узнать командой:

sudo gpioinfo

Далее, следующей командой:

sudo gpioset -m exit 0 2=0

я уже смог уже «круто» выключать сияние диода.

Конечно, сам пока ещё не до конца разобрался во всех этих инструментах, но могу сказать, что,например, команда:

sudo gpioset -m signal -b 0 2=0

изменит состояние пина (линии) до тех пор, пока не будет «убит» соответствующий процесс или не произойдет таинственное «SIGINT or SIGTERM».

Но, в любом случае, изначально поставленную задачу удалось решить! (Ссылка на фото результата)

LordKmon
() автор топика