Архитектура ПО контроллера Wirenboard

Материал из Wiren Board
Версия от 13:08, 21 ноября 2021; Explorerol (обсуждение | вклад) (Сделал уточнение про собственные сервисы и организацию ПО)

Это черновик страницы. Последняя правка сделана 21.11.2021 пользователем Explorerol.

Все программное обеспечение (ПО) контроллера можно разделить на операционную систему (ОС), специализированное ПО и пользовательские программы. Основа внутреннего ПО контроллера является операционная система система Debian Linux (в версии Wirenboard 6 установлен Debian Linux 9 Stretch). Она выполняет основные функции загрузки, конфигурирования, контроля и управления. Специализированное ПО дополняет операционную систему и осуществляет взаимодействие с портами ввода-вывода, периферийными устройствами и модулями контроллера, диагностику работы контроллера, обеспечивает доступ к контроллеру через веб-интерфейс дает возможность написания пользовательских сценариев (правил управления) и другие важные функции, не входящие спектр задач операционной системы.

Специализированное ПО в основном представляет набор специальных программ и драйверов выполняющих в фоновом режиме отдельную задачу управления, диагностики или контроля. Большинство таких программы и драйверы зарегистрировано с ОС Linux в виде сервисов (служб) - программ, которые работают в фоновом режиме, запускаются автоматически при старте системы и контролируются операционной системой. Имена собственных сервисов контроллера Wirenboard обычно имеют префикс "wb-". Каждый сервис выполняет отдельную задачу. Если функции, которые обеспечивает сервис не используются, то сервис можно временно остановить или даже отключить совсем для освобождение ресурса процессора контроллера.

Список всех запущенных сервисов и статус их работы можно посмотреть с помощью команды

systemctl list-units --type=service

Перечень собственных сервисов контроллера Wirenboard приведен в таблице ниже.

Основная концепция работы контроллера - обмен информацией по протоколу MQTT через брокер (сервис) Mosquitto. Драйверы получают данные с устройств и публикуют их в виде MQTT-топиков в определенном формате. Другие службы читают эти данные и производят дальнейшие действия с ними: выводят в веб-интерфейс, запускают правила и т.д. Схематично взаимодействие сервисом можно представить в виде следующей схемы:

Архитектура ПО контроллера Wirenboard

Работу каждого сервиса можно продиагностировать командой systemctl status имя_сервиса

Например, чтобы узнать, работает ли драйвер serial-устройств, нужно выполнить команду:

 systemctl status wb-mqtt-serial

В обычном режиме, когда идет опрос устройств статус сервиса должен быть active (running), а полный вывод команды такой:

● wb-mqtt-serial.service - MQTT Driver for serial devices
   Loaded: loaded (/lib/systemd/system/wb-mqtt-serial.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2021-11-21 11:25:41 MSK; 24min ago
 Main PID: 2315 (wb-mqtt-serial)
   CGroup: /system.slice/wb-mqtt-serial.service
           └─2315 /usr/bin/wb-mqtt-serial

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

Однако нужно иметь в виду, что не все сервисы работают постоянно, некоторые из них (например, wb-hwconf-manager) вызываются только при необходимости. Поэтому при работе контроллера в основном этот сервис имеет статус active (exited).

Если требуется остановить сервис (например, остановить сервис wb-mqtt-serial для опроса устройств вручную с помощью утилиты modbus_client), то сервисы можно принудительно останавливать:

 systemctl stop имя_сервиса

Запускать

 systemctl start имя_сервиса

И перезапускать

 systemctl restart имя_сервиса


Нужно понимать, что такое ручное вмешательство может нарушить нормальную работу контроллера, а процесс управления может быть остановлен. Поэтому не следует выполнять данные действия, если вы не до конца понимаете, что делаете, или если контроллер управляет ответственным оборудованием или непрерывным процессом! Работа некоторых системных сервисов (например, ssh) контролируется операционной системой, при их остановке контроллер будет автоматически перезагружен!








Список сервисов контроллера Wirenboard и их назначение

Имя сервиса Описание
avahi-daemon.service Avahi mDNS/DNS-SD Stack
bluetooth.service Bluetooth service
cgmanager.service Cgroup management daemon
cron.service Regular background program processing daemon
dbus.service D-Bus System Message Bus
dnsmasq.service dnsmasq - A lightweight DHCP and caching DNS server
getty@tty1.service Getty on tty1
hostapd.service LSB: Advanced IEEE 802.11 management daemon
kmod-static-nodes.service Create list of required static device nodes for the current kernel
knxd.service KNX Daemon
mosquitto.service Mosquitto MQTT v3.1/v3.1.1 Broker
netplug.service LSB: Brings up/down network automatically
networking.service Raise network interfaces
nginx.service A high performance web server and a reverse proxy server
ntp.service LSB: Start NTP daemon
rsyslog.service System Logging Service
serial-getty@ttymxc0.service Serial Getty on ttymxc0
ssh.service OpenBSD Secure Shell server
systemd-fsck-root.service File System Check on Root Device
systemd-fsck@dev-mmcblk0p6.service File System Check on /dev/mmcblk0p6
systemd-journal-flush.service Flush Journal to Persistent Storage
systemd-journald.service Journal Service
systemd-logind.service Login Service
systemd-modules-load.service Load Kernel Modules
systemd-random-seed.service Load/Save Random Seed
systemd-modules-load.service Load Kernel Modules
systemd-random-seed.service Load/Save Random Seed
systemd-remount-fs.service Remount Root and Kernel File Systems
systemd-sysctl.service Apply Kernel Variables
systemd-tmpfiles-setup-dev.service Create Static Device Nodes in /dev
systemd-tmpfiles-setup.service Create Volatile Files and Directories
systemd-udev-trigger.service udev Coldplug all Devices
systemd-udevd.service udev Kernel Device Manager
systemd-update-utmp.service Update UTMP about System Boot/Shutdown
systemd-user-sessions.service Permit User Sessions
user@0.service User Manager for UID 0
watchdog.service watchdog daemon
wb-configs-early.service prepare mounts and symlinks to config files
wb-configs.service watch config files
wb-gsm-rtc.service LSB: initscript to use GSM modem integrated RTC
wb-homa-ism-radio.service LSB: MQTT driver for WB HomA for RFM69 ISM radio
wb-hwconf-manager.service LSB: Hardware configuration with Device Tree overlays
wb-init.service LSB: board-specific initscript
wb-mqtt-adc.service MQTT Driver for ADC
wb-mqtt-confed.service LSB: Configuration Editor Backend
wb-mqtt-db.service Wiren Board database logger
wb-mqtt-gpio.service MQTT Driver for GPIO-controlled switches
wb-mqtt-knx.service LSB: : Wiren Board MQTT KNX bridge
wb-mqtt-logs.service Wiren Board journald to MQTT gateway
wb-mqtt-mbgate.service Wiren Board MQTT to Modbus TCP gateway
wb-mqtt-opcua.service Wiren Board MQTT to OPC UA gateway
wb-mqtt-serial.service MQTT Driver for serial devices
wb-mqtt-w1.service Kernel 1-Wire MQTT driver for WB-HomA
wb-prepare.service initialize filesystems at first boot
wb-repart.service prepare partitions at first boot
wb-rules.service MQTT Rule engine for Wiren Board
wb-systime-adjust.service Compensation of systime in PPM from value, stored in device-tree (with opposite sign)
wb-watch-update.service LSB: Firmware update monitor