Files
obsidian-vault-/Linux/Linux SBC - Hardware.md
T

63 lines
2.7 KiB
Markdown

#linux #GPIO #i2c #spi #hardware
Все устройства в Linux живут тут:
`/dev`
## GPIO
#userspase #libgpiod
Полезная информация:
https://devdotnet.org/post/rabota-s-gpio-v-linux-chast-6-biblioteka-libgpiod/
Способы управления:
1. **User Space** - прямой доступ к регистрам, минуя медленные системные вызовы. Посредством открытия `/dev/mem` и мапирование базового адреса GPIO.
==Подводные камни:==
1. Обход GPIO Subsystem
2. Нет контроля конкуренции (может управлять несколько процессов)
3. Можно сломать драйвер
4. Нет безопасности
2. **libgpiod** (Library General Purpose Input/Output device) - Библиотека и набор утилит в Linux для управления пинами GPIO (ввод/вывод общего назначения) через символьные устройства (`/dev/gpiochip*`) или контроллеры GPIO
1. Установка:
sudo apt-get update
sudo apt-get install -y libgpiod-dev libgpiod-doc gpiod
2. Проверка корректности установки:
pkg-config --cflags --libs libgpiod
3. Включает в себя:
1. **gpiodetect**
2. **gpioinfo**
3. **gpioset**
4. **gpioget**
4. Компиляция:
g++ -o gpio_control gpio_control.cpp -lgpiod
5. API для Python и C/C++
## I2C. Integrates
`/sys/bus/i2c/devices/`
По умолчанию шина отключена.
Включить можно следующими способами:
1. `sudo raspi-config`
2. Корректировкой `/boot/firmware/config.txt`
1. Необходимо раскомментировать параметр `dtparam=i2c_arm=on`
Затем в устройство должно появиться в `/dev` как `i2c-1`
Для работы с шиной и периферией есть библиотека `i2c-tools`
## SPI
Команды для работы:
`cat /proc/device-tree/model` - модель платы для которой device tree создан
`ls /proc/device-tree/` - дерево устройств, которое kernel получил от GPU
`ls /sys/bus/platform/devices` - вывод устройств, которые kernel создал на основе DT
`lsmod` - просмотр загруженных модулей св
## Commands
Система:
`vcgencmd get_config int` - параметры, которые передает GPU
`cat /etc/os-release` - просмотр версии системы