Перейти к основному содержимому

4 записи с тегом "armbian"

Посмотреть все теги

Перенос blue-led на GPIO2B4 в Armbian

· 1 мин. чтения
dmn
maintainer

Перевод blue-led на GPIO2B4

Перевод blue-led на GPIO2B4 (Аrmbian). (В предыдущем примере GPIO3B3 попало на SPI1-CLK)

Файл конфигурации


root@rockpi-s:~# cat blue-led-gpio2b4-1.dts

/dts-v1/;
/plugin/;

/ {
fragment@0 {
/* у вас узел именно под /leds */
target-path = "/leds/blue-led";
__overlay__ {
gpios = <&gpio2 12 0>; /* GPIO2_B4, ACTIVE_HIGH */
linux,default-trigger = "heartbeat";
default-state = "on";
status = "okay";
};
};
};

#napi #dts

Перенос heartbeat диода на пользовательский GPIO через overlay

· 2 мин. чтения
dmn
maintainer

Как перенести "софтовым" методом heartbit (диод активности) с встроенного GPIO на свободный  

По умолчанию диод на GPIO находится на  GPIO0A5, у нас в NAPI его нет на "гребёнке",  подтому мы его перекинем на GPIO3B3, который есть на "гребёнке" и ничем не занят.

Научимся делать user-overlay к ядру 

Добавляем оверлей в Armbian

Сделать файл blue-led-gpio3b3-2.dts и добавить его как оверлей 

armbian-add-overlay blue-led-gpio3b3-2.dts

Команда сама скомпилирует dtbo, перенесем его в нужную папку и добавит запись в файл armbianEnv.txt.

Останется только перегрузится и убедиться, что диод "прикрепился" к нашему пину (визуально он станет сразу помигивать). Как проверить на каком GPIO оказался диод - в конце поста.

Файл dts для Armbian

/dts-v1/;
/plugin/;

/ {
fragment@0 {
     /* у вас узел именно под /leds */
     target-path = "/leds/blue-led";
     __overlay__ {
         gpios = <&gpio3 11 0>;      /* GPIO3_B3, ACTIVE_HIGH */
         linux,default-trigger = "heartbeat";
         default-state = "on";
         status = "okay";

         /* убрать pinctrl у конкретного LED, чтобы не валилось на -22 */
         /delete-property/ pinctrl-names;
         /delete-property/ pinctrl-0;
     };
};
};

Добавляем оверлей NapiLinux

Необходимо скомпилировать из dts файла, dtbo файл через утилиту dtc на любом Linux-хосте.

dtc -@ -I dts -O dtb -o blue-led-gpio3b3.dtbo blue-led-gpio3b3.dts

Делаем папку 

mkdir /boot/overlay-user Получившийся файл dtbo (blue-led-gpio3b3.dtbo) закинуть  в  /boot/overlay-user

Добавить строчку в файл /boot/uEnv.txt

user_overlays=blue-led-gpio3b3 Файл dts для NapiLinux

/dts-v1/;
/plugin/;

/ {
fragment@0 {
     /* у вас узел именно под /leds */
     /* target-path = "/leds/blue-led"; */
     target-path = "/gpio-leds/blue-led";
     __overlay__ {
         gpios = <&gpio3 11 0>;      /* GPIO3_B3, ACTIVE_HIGH */
         linux,default-trigger = "heartbeat";
         default-state = "on";
         status = "okay";

     };
};
};

Проверка на каком gpio blue-led 

hexdump -v -e '1/4 "0x%08X "' -e '"\n"' /proc/device-tree/gpio-leds/blue-led/gpios
Должно выдать: <phandle gpio3, 0x0000000B, 0x00000000>

#gpio #napi #dts

Установка Zigbee2mqtt на NAPI-C (P)

· 1 мин. чтения
dmn
maintainer

Устанавливаем на NAPI-C (P) Zigbee2mqtt

  1. Устанавливаем Аrmbian

  2. Ставим пакеты

apt-get install -y curl curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - apt-get install -y nodejs git make g++ gcc libsystemd-dev tmux apt install -y mosquitto mosquitto-clients corepack enable
  1. Создадим каталог
mkdir /opt/zigbee2mqtt
  1. На случай если ставили не от рута нужно дать права на каталог
sudo chown -R ${USER}: /opt/zigbee2mqtt
  1. Скачиваем гит в каталог
git clone --depth 1 https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
  1. Переходим в каталог:
cd /opt/zigbee2mqtt
  1. Запустим tmux и продолжим сборку в нем:
tmux
  1. Собираем приложение

Запустим сборку в один поток

pnpm install --frozen-lockfile --child-concurrency=1 6.1
  1. После сборки выполняем запуск
cd /opt/zigbee2mqtt
pnpm start
  1. Делаем сервис

Создаем файл

nano /etc/systemd/system/zigbee2mqtt.service

С таким содержимым

[Unit]
Description=zigbee2mqtt
After=network.target

[Service]
Environment=NODE_ENV=production
Type=simple
ExecStart=/usr/bin/pnpm start
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=inherit
StandardError=inherit
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
  1. Выполняем инициализацию и запуск сервиса
systemctl daemon-reload
systemctl enable zigbee2mqtt.service
systemctl start zigbee2mqtt.service
systemctl status zigbee2mqtt.service
journalctl -u zigbee2mqtt.service -f

#napi #zigbee $zigbee2mqtt

Установка и тюнинг чистого Armbian

· 6 мин. чтения
dmn
maintainer

🔥 🔥 🔥 Эта статья устарела, у нас есть готовые образы Armbian в разделе "Скачать" 🔥 🔥 🔥

Тюнинг Armbian для работы с Napi и Сборщик-компакт

подсказка

Эта инструкция для продвинутых пользователи Linux, Вы можете скачать готовый образ, где уже проведены все операции, по ссылке: https://download.napilinux.ru/linuximg/napic/armbian-rockpi-s-snaphots/

Ставим чистый ARMbian для Rock Pi S

Скачайте образ по ссылке

https://download.napilinux.ru/linuximg/napic/armbian-napic-distrib/

или с сайта Armbian:

https://redirect.armbian.com/rockpi-s/Bookworm_current

Имя файла будет похоже на следующее - Armbian_23.5.2_Rockpi-s_bookworm_current_6.1.32.img.xz

Распаковать образ и записать образ на SD-карту

или

Загрузить NAPI c SD карты в NapiLinux, вставить флешку с распакованным файлом образа и записать имидж в NAND по инструкции

Загрузить ARMbian. Войти по SSH (Логин\Пароль root\1234)

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

Проводим тюнинг Armbian

Проведите обновление системы

apt update
apt upgrade

Теперь вы можете ставить любые доступные пакеты в Armbian (Debian) программой apt install packet

Поставить рекомендуемые нами пакеты

telnet
mbpoll
snmpd
snmp
snmp-mibs-downloader
vim
cmake
pkg-config
plocate
gh
mosquitto
mosquitto-clients
python3-pip
python3-dev

Поместите данный список в файл packages.txt (nano packages.txt), выполните команду:

xargs apt-get -y install < packages.txt

Все пакеты должны установиться автоматически !

Теперь у вас есть утилита mbpoll для работы с modbus, pip3 - система установки пакетов для python3, средства для работы с git, средства для компилирования программ (понадобиться ниже).

Перегрузка при панике ядра

Заставим систему перегружаться при панике ядра (маловероятно, но все-таки)

Открыть файл /etc/sysctl.conf

Добавить или раскомментировать строчку

kernel.panic = 5

Сохранить файл

Добавление аппаратных интерфейсов

В Armbian (и других современных Linux) включение аппаратных и нестандартных интерфейсов (uart, i2c, spi) работает через систему подключаемых оверлеев (файлы в формате dtbo - device tree binary). Это бинарные файлы, которые компилируются из исходных текстовых файлов dts (data tree source).

В Armbian есть утилита, которая компилирует и добавляет оверлей из пользовательского файла dts.

Общий алгоритм такой. Нужно скачать или другим образом (через копи\паст) сформировать файл dts (название лучше делать по смыслу файла, например rk3308-spi2.dts) и далее выполнить команду

armbian-add-overlay <файл.dts>

Обязательно перегрузиться.

После этого должно заработать устройство, которое Вы подключили, если оно не конфликтует с другими устройствами. Конфликты зависят от включенных устройствах по умолчанию, от аппаратной конфигурации устройства.

подсказка

Например, в NAPI не может работать одновременно UART1,2 и SPI2 а также UART3 и SPI1

Файлы dts для rk3308 (всех NAPI) доступны по ссылке: https://gitlab.nnz-ipc.net/pub/napilinux/kernel/-/tree/linux6.6/arch/arm64/boot/dts/rockchip/overlay

Список файлов

rk3308-console-on-uart0.dts
rk3308-console-on-uart1.dts
rk3308-console-on-uart2.dts
rk3308-i2c0.dts
rk3308-i2c1-ds1307.dts
rk3308-i2c1-ds3231.dts
rk3308-i2c1.dts
rk3308-i2c2.dts
rk3308-i2c3-m0.dts
rk3308-i2c3-m1.dts
rk3308-i2c3.dts
rk3308-pwm1.dts
rk3308-pwm2.dts
rk3308-pwm3.dts
rk3308-spi-spidev.dts
rk3308-spi1-spidev.dts
rk3308-spi2-spidev.dts
rk3308-uart0.dts
rk3308-uart1.dts
rk3308-uart2.dts
rk3308-uart3.dts
rk3308-usb-pcie-modem.dts
rk3308-usb20-host.dts
rk3308-w1-gpio.dts

rockpis-i2s-out.dts
rockpis-spdif-out.dts
rockpis-v11-spi2-waveshare35b-v2.dts

rockpis-v11-spi2-waveshare35c.dts
rockpis-v12-spi2-waveshare35b-v2.dts
rockpis-v12-spi2-waveshare35c.dts
i2c1-hym8563.dts

Из этого списка примерно понятно какие устройства могут быть добавлены.

подсказка

В Armbian устройства uart0 (консоль), uart1, uart2 добавлены по умолчанию.

Добавим поддержку UART3

подсказка

В "Сборщик-компакт" порт RS485 работает через UART3. Поэтому его надо добавить в ArmBian.

Создадим файл rk3308-uart3.dts (скопируем его содержания из файла по ссылке или ниже)

/dts-v1/;
/plugin/;

/ {
compatible = "rockchip,rk3308";

fragment@0 {
target = <&i2c3>;
__overlay__ {
status = "disabled";
};
};

fragment@1 {
target = <&spi1>;
__overlay__ {
status = "disabled";
};
};

fragment@2 {
target = <&uart3>;
__overlay__ {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&uart3_xfer>;
};
};
};

Сохраним файл и выполним команду

armbian-add-overlay rk3308-uart3.dts

Эта команда автоматически скомпилирует и добавит overlay для UART3 (/dev/ttyS3 в системе).

Проверить что все корректно скомпилировалось, можно проверив каталог /boot/overlay-user, там должен быть соответствующий файл rk3308-uart3.dtbo

root@napi-armbian:~# ls /boot/overlay-user/
rk3308-i2c3-m0.dtbo rk3308-spi2-spidev.dtbo rk3308-uart1.dtbo rk3308-uart3.dtbo
root@napi-armbian:~#

В файле /boot/armbianEnv.txt объявление устройства должно появиться в разделе user-overlays=

root@napi-armbian:~# cat /boot/armbianEnv.txt
verbosity=1
extraargs=swiotlb=1024
overlay_prefix=rk3308
fdtfile=rockchip/rk3308-rock-pi-s.dtb
rootdev=UUID=5ef25166-64ed-4920-8994-f233ab2771c7
rootfstype=ext4
console=serial
user_overlays=rk3308-uart3 rk3308-i2c3-m0 rk3308-spi2-spidev
ethaddr=02:AE:83:87:2D:A0
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u

Не забудьте перегрузиться !

Теперь должен корректно работать порт UART3, устройство - /dev/ttyS3. Чтобы проверить порт, нужно подсоединить к GPIO UART3 какое либо устройство.

Добавим поддержку SPI2

Особенности оверлея spi2 под ARMbian

Для того, чтобы в модуле NAPI работал SPI2, необходимо отключить uart1 и uart2. Так как в ARMbian они включены в основном файле дерева устройств, то в оверлее spi2 необходимо отключить явным образом uart1, uart2. Правильный файл dts для SPI2 приводим ниже.

  1. Сделайте файл rk3308-spi2-spidev.dts такого содержания:

/dts-v1/;
/plugin/;

/ {
compatible = "rockchip,rk3308";

fragment@0 {
target = <&spi2>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
spidev@0 {
compatible = "rohm,dh2228fv";
status = "okay";
reg = <0>;
spi-max-frequency = <10000000>;
};
};
};

fragment@1 {
target = <&uart1>;
__overlay__ {
status = "disabled";
};
};
fragment@2 {
target = <&uart2>;
__overlay__ {
status = "disabled";
};
};

};

  1. Выполните команду
armbian-add-overlay rk3308-spi2-spidev.dts

Эта команда автоматически скомпилирует и добавит overlay для SPI2.

  1. Перезагрузитесь. Должно появиться устройство /dev/spidev2.0
Нюансы NAPI

Следует обратить внимание на нюансы:

⚠️ Обратите внимание, что некоторые интерфейсы нельзя использовать одновременно. При использовании шины SPI2, необходимо отключить UART2 и UART1.

⚠️ Шина SPI1 в настоящий момент не работает, при необходимости подключения устройств по SPI, используйте SPI2.

подсказка

Установка системного и прикладного ПО

Установим утилиту modpoll

⚠️ Несмотря на то, что в системе присутствует практически такая же утилита mbpoll аргументы у них немного различаются. Мы можем давать примеры на основе утилиты modpoll, поэтому рекомендуем ее тоже установить.

Скачать архив командой

wget https://www.modbusdriver.com/downloads/modpoll.tgz

Распаковать полученный архив

https://www.modbusdriver.com/downloads/modpoll.tgz

Скопировать файл

cp modpoll/arm-linux-gnueabihf/modpoll /usr/bin/

Убедиться, что утилита доступна и запускается

modpoll -h

Скомпилируем mbusd

Mbusd - открытый шлюз Modbus RTU - Modbus TCP

Стянем исходный код с github

git clone https://github.com/3cky/mbusd.git mbusd.git

Проведем компилирование

cd mbusd.git
mkdir -p build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
sudo make install

Проверим, что пакет установился через команду mbusd

Настроим snmpd

Устройство начнет отдавать стандартную информацию о сбе по протоколу SNMP (в дальнейшем это можно использовать, добавив устройства в Zabbix).

Редактируем файл /etc/snmp/snmpd.conf

Находим строку

agentaddress  127.0.0.1,[::1]

Меняем на строку

agentaddress  0.0.0.0,[::1]

Или выполняем команду

sed -i "s/agentaddress  127.0.0.1,[::1]/agentaddress  0.0.0.0,[::1]/g" /etc/snmp/snmpd.conf

Перезапускаем сервис snmpd

service snmpd restart

Убедиться, что он работает можно командой

service snmpd status

Добавим работу с GPIO через gpiod

К сожалению, по умолчанию в Armbian довольно старая версия gpiod, поэтому мы написали статью, как установить свежую версию gpiod и работать с командами пакета.

Как работать с gpio через систему sysfs можно прочитать по ссылке: https://developer.technexion.com/docs/using-gpio-from-a-linux-shell#using-legacy-sysfsbased-gpio