vault backup: 2026-03-14 16:54:50

This commit is contained in:
2026-03-14 16:54:50 +03:00
parent 16abecc376
commit c2341e02b8
+21 -16
View File
@@ -9,8 +9,8 @@ https://devdotnet.org/post/rabota-s-gpio-v-linux-chast-6-biblioteka-libgpiod/
Способы управления: Способы управления:
1. Userspace driver -прямое управление 1. Userspace driver -прямое управление
2. Libgpiod - управление через библиотеку 2. Libgpiod - управление через библиотеку (API для Python и C/C++)
3. 3. Python library
#### User Space #### User Space
Прямой доступ к регистрам, минуя медленные системные вызовы. Прямой доступ к регистрам, минуя медленные системные вызовы.
Посредством открытия `/dev/mem` и мапирование базового адреса GPIO. Посредством открытия `/dev/mem` и мапирование базового адреса GPIO.
@@ -19,7 +19,8 @@ https://devdotnet.org/post/rabota-s-gpio-v-linux-chast-6-biblioteka-libgpiod/
2. Нет контроля конкуренции (может управлять несколько процессов) 2. Нет контроля конкуренции (может управлять несколько процессов)
3. Можно сломать драйвер 3. Можно сломать драйвер
4. Нет безопасности 4. Нет безопасности
Пример работы с GPIO
```cpp title:userspace_gpio_control.cpp ```cpp title:userspace_gpio_control.cpp
#include <iostream> // вывод сообщений #include <iostream> // вывод сообщений
@@ -94,6 +95,8 @@ GPIO_BASE – смещение в файле (физический адрес).
} }
``` ```
---
#### libgpiod - library control #### libgpiod - library control
Library General Purpose Input/Output device - Библиотека и набор утилит в Linux для управления пинами GPIO (ввод/вывод общего назначения) через символьные устройства (`/dev/gpiochip*`) или контроллеры GPIO Library General Purpose Input/Output device - Библиотека и набор утилит в Linux для управления пинами GPIO (ввод/вывод общего назначения) через символьные устройства (`/dev/gpiochip*`) или контроллеры GPIO
Состав библиотеки: Состав библиотеки:
@@ -114,11 +117,8 @@ pkg-config --cflags --libs libgpiod
``` bash ``` bash
g++ -o gpio_control gpio_control.cpp -lgpiod g++ -o gpio_control gpio_control.cpp -lgpiod
``` ```
``
3. Компиляция: Пример работы с GPIO
4. API для Python и C/C++
``` cpp title:libgpiod_control.cpp ``` cpp title:libgpiod_control.cpp
``` ```
@@ -127,21 +127,26 @@ g++ -o gpio_control gpio_control.cpp -lgpiod
`/sys/bus/i2c/devices/` `/sys/bus/i2c/devices/`
По умолчанию шина отключена. По умолчанию шина отключена.
Включить можно следующими способами: Включить можно следующими способами:
1. `sudo raspi-config` ``` bash
2. Корректировкой `/boot/firmware/config.txt` sudo raspi-config
```
Или от корректировкой `/boot/firmware/config.txt`
1. Необходимо раскомментировать параметр `dtparam=i2c_arm=on` 1. Необходимо раскомментировать параметр `dtparam=i2c_arm=on`
Затем в устройство должно появиться в `/dev` как `i2c-1` Затем в устройство должно появиться в `/dev` как `i2c-1`
Набор утилит для работы с шиной i2c: `i2c-tools`
Состав библиотеки:
-
Для работы с шиной и периферией есть библиотека `i2c-tools`
## SPI ## SPI
E
Команды для работы: Команды для работы:
`cat /proc/device-tree/model` - модель платы для которой device tree создан ```bash
`ls /proc/device-tree/` - дерево устройств, которое kernel получил от GPU
`ls /sys/bus/platform/devices` - вывод устройств, которые kernel создал на основе DT ```
`lsmod` - просмотр загруженных модулей св
## Commands ## Commands
Система: Система: