Автоматизированные системы с использованием миникомпьютеров

"...работа и только работа в состоянии созидать ценности."

Генри Форд

Librotech - Автоматизированные системы с использованием миникомпьютеров

      Создание миниатюрных устройств, способных заменить собой громоздкие персональные компьютеры, сегодня очень актуально.

       Результатом данного направления является создание так называемых одноплатных компьютеров, габаритные размеры которых, порой не превышают кредитной карты.  Как правило, они представляют собой полностью готовые изделия и имеют уже предустановленную ОС. 

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

                      Что же из себя представляют одноплатные компьютеры?

     Это миниатюрные устройства, основанные на ARM процессоре, имеющие ОЗУ и ПЗУ. В качестве дополнительных опций могут выступать наличие USB, HDMI, Ethernet разъёмов, аудиовыхода, пинов позволяющих реализовывать RS-232, I2C и прочие интерфейсы, а также поддержка micro-SD. Из наиболее популярных представителей можно упомянуть Raspberry Pi, BeagleBone и Cubieboard. Все они уже давно существуют на рынке, имеют несколько ревизий, невысокую стоимость и активно развивающиеся сообщества.

     Raspberry Pi является одним из первых одноплатных компьютеров. Впервые он был представлен в 2011 году и уже менее через год первые образцы поступили в продажу. За долгое время существования успели выйти различные релизы данного устройства, отличающиеся назначением и характеристиками: A, A+, B, B+, 2B.
    Последняя на сегодняшний день модель 3B оснащена 4-ядерным 64-битным ARM процессором Cortex-A53 с частотой 1,2 Ггц, 1 Гб оперативной памяти LPDDR2-900 SDRAM, встроенным Wi-Fi и Bluetooth 4.0 модулями и достаточно широким выбором интерфейсов. Питается плата от 5V и имеет достаточно скромные габариты.

     Следующим представителем является одноплатный компьютер произведённый в Китае Cubieboard. Так же как и у Raspberry существует большое количество ревизий, последней из которых является Cubiebord 5, построенный на 8-ядерном процессоре ARM Cortex-A7 с частотой 700 МГц.
    Из достоинств платы можно указать наличие 2Гб оперативной памяти DDR3, огромного количества разъёмов, наличие Wi-Fi, Bluetooth 4.0 и инфракрасного порта. Однако, в данном случае пострадали габаритные размеры, которые в 2 раза превышают Raspberry, и цена, превышающая в 2.5 раза стоимость конкурента.

     BeagleBone – одноплатный компьютер, построенный на базе процессора XAM3359AZCZ100 семейства ARM Cortex A8 от Texas Instruments. Оснащён 512 Мб оперативной памяти и от 2 до 4 Гб ПЗУ в зависимости от ревизии. На сегодняшний день наиболее распространённой является версия BeagleBone Black (BBB) Rev C, оснащённая 4 Гб eMMC. Цена и габариты сопоставимы с Raspberry Pi, но, как видно из описания, он проигрывает по характеристикам своим аналогам. В чём же тогда его преимущество?           BeagleBone - полностью открытая платформа (наличие спецификаций и плат в открытом доступе) и обширное сообщество, что делает данный компьютер легко адаптируемым под практически любые задачи.

     Одноплатные компьютеры работают на базе Linux (чаще всего Debian), однако наличие архитектуры ARM делает применение некоторых приложений либо невозможным, либо затруднительным. Это может быть связано с трудностью портирования или с недостаточной мощностью устройств. Большинство программ предполагают сборку приложения из исходников, однако это может занимать продолжительное время, так кроссплатформенный инструмент QT5 собирается около 24 часов. Существуют, конечно, так называемые toolchain-ы, которые позволяют компилировать проекты под любые платформы на стационарном ПК, однако бывают ситуации, когда и они не могут помочь.

     Особенности данных систем:

     1.) Ограниченное количество внутренней памяти. Как правило одноплатные компьютеры комплектуются памятью объёмом от 2 до 4 ГБ с возможностью её расширения с помощью microSD карты. Но порой могут возникнуть ситуации отсутствия или недостаточности объёма карты памяти. Данная проблема решается при помощи сетевой файловой системы NFS(Network File System) или реализации сетевого протокола SMB/CIFS Samba. Данные приложения позволяют использовать расшаренные сетевые ресурсы (папки, принтеры) как Linux, так и Windows систем, а также предоставлять общий доступ к собственным ресурсам.
    Настройка обеих программ примерно одинаковые, однако NFS требует также настройки сервера, что делает её использование более затруднительным, особенно для новичков, поэтому мы рассмотрим использование Samba. Установка сервиса производится при помощи стандартной команды: sudo apt-get install samba. Файл с конфигурацией smb.conf храниться в каталоге /etc/samba/ и прежде чем вносить какие-либо изменения рекомендуется сделать его резервную копию. По умолчанию общий доступ предоставляется к домашним каталогам всех пользователей и принтерам. В файле присутствуют примеры для создания сетевых ресурсов и добавления доступа для пользователей. Также существует графическая оболочка, позволяющая настраивать Samba — system-config-samba.
     Данный способ не должен вызвать никаких проблем, поэтому мы рассмотрим основные команды для настройки через терминал. Для того, чтобы просмотреть доступные ресурсы можно воспользоваться командой smbclient -L hostname -U%, для монтирования ресурса нужно ввести
mount -t cifs //СЕРВЕР/имя_ресурса /mnt/точка_монтирования -o user=имя_пользователя,password=пароль,workgroup=рабочая_группа,ip=IP_сервера.
     При этом параметры password, workgroup и ip являются необязательными. Проблема заключается в том, что подключение действует лишь в пределах одного сеанса, т.е. при каждом включении нужно заново вводить эту команду. Для автоматического монтирования сетевого ресурса можно воспользоваться файлом /etc/fstab, добавив в конце запись вида:
//СЕРВЕР/имя_ресурса /mnt/точка_монтирования cifs username=имя_пользователя,password=пароль 0 0.
     Если вы не хотите хранить имя и пароль в открытом доступе, можно создать отдельный файл, содержащий данные параметры, и указать путь к нему:
//СЕРВЕР/ИМЯ_РЕСУРСА /mnt/точка_монтирования cifs credentials=/путь/к/полномочиям/sambacreds 0 0.

     2.) В процессе использования одноплатного компьютера вам обязательно понадобиться ssh подключение. SSH или Secure Shell является сетевым протоколом, позволяющим получать удалённый доступ к терминалу и файловой системе устройства. Большинство Linux систем имеет предустановленный ssh-клиент (в случае отсутствия его можно установить из репозитория apt-get install ssh ), в то время как на Windows придётся использовать сторонние программы, например, Putty или WinSCP.
    Подключение осуществляется через Ethernet кабель или через USB как, например, у BeagleBone и требует знание ip адреса устройства, имени пользователя и пароля. Для использования ssh на Linux достаточно в консоли ввести: ssh имя_пользователя@ip-адрес_или_сетевое_имя, после чего при необходимости нужно будет ввести пароль.
ssh username@arvo.suso.orgssh username@arvo.suso.or

    3.) Настройки сети. Она осуществляется при помощи графической оболочки, либо при помощи файла /etc/network/interfaces. В качестве параметров указывается ip адрес (address), маска подсети (gateway), шлюз(netmask) и днс-сервер(dns-nameservers). Пример настройки статического ip:
auto eth0
iface eth0 inet static
address 192.168.7.2
netmask 255.255.255.0
dns-nameservers 192.168.0.254 8.8.8.8
gateway 192.168.7.1,
где eth0 имя сетевого адаптера, которое можно узнать введя sudo lshw -C network в строке logical name.
    Подобная запись предполагает настройку сети при запуске системы, что может привести к увеличению времени загрузки. Для решения данной проблемы, можно заменить auto на allow-hotplug. Аналогичным способом можно настраивать не только интернет подключение, но также и локальную сеть.

     4.) Как правило для подобных устройств очень важно время загрузки, именно поэтому стартовый пакет Debian имеет минимальный набор дополнительных программ. Но несмотря на это, время от старта до запуска системы или приложения может быть достаточно большим, что чаще всего связано с запуском различных сторонних программ. Чтобы отследить причину подобного поведения проще всего воспользоваться утилитой bootchart.
    Данное приложение позволяет в графическом виде просмотреть все процессы, запускаемые при старте системы, и длительность их выполнения. Установить его можно из репозитория, после чего в файле /boot/uboot/uEnv.txt необходимо заменить строчку systemd=quiet init=/lib/systemd/systemd на systemd=quiet init=/sbin/bootchartd и перезагрузиться.
    Для получения результата в графическом виде необходимо установить утилиту pybootchartgui и запустить её, после чего он сохраниться в виде файла bootchart.png в текущем каталоге. Чтобы отключить ненужные процессы можно воспользоваться утилитой с простым интерфейсом sysv-rc-conf. Однако нужно быть осторожным, чтобы не убить систему.

     5.) Все одноплатные компьютеры имеют свободные порты GPIO, которые могут настраиваться пользователем. Для того, чтобы инициализировать нужный порт необходимо выполнить команду echo номер_порта > /sys/class/gpio/export, причём в качестве номера порта указывается номер пина процессора, а не его наименование на плате, что не всегда является удобным. Назначение указывается в файле /sys/class/gpio/direction путём записывания в него значений «in» или «out».
     Для чтения-записи пина используется файл /sys/class/gpio/value. Для упрощения доступа к портам существуют различные библиотеки, одной из которых является BeagleBoneBlack-GPIO. Она позволяет достаточно быстро настроить и использовать пины. Например, настройка пина P9_12 как выхода и установление на нём нуля, осуществляется следующим образом:
#include "GPIO/GPIOManager.h"
#include "GPIO/GPIOConst.h"
GPIO::GPIOManager* gp = GPIO::GPIOManager::getInstance();
int pin1 = GPIO::GPIOConst::getInstance()->getGpioByKey("P9_12");
gp->exportPin(pin1);
gp->setDirection(pin1, GPIO::OUTPUT);
gp->setValue(pin1, GPIO::LOW);
Скачать библиотеку: https://github.com/mkaczanowski/BeagleBoneBlack-GPIO.

     Из минусов, как и в случае с Samba, вам придётся инициализировать пины каждый раз при старте системы. Для автоматизации данной процедуры можно воспользоваться файлом /etc/rc.local добавив туда необходимые команды. Некоторые пины уже имеют определённые функции и могут быть настроены иначе. Так для инициализации UART достаточно в файле /boot/uboot/uEnv.txt добавить строку типа: optargs=quiet drm.debug=7 capemgr.enable_partno=BB-UART1,BB-UART4, где BB-UART1,BB-UART4 – 1 и 4 порт соответственно. Для I2C и SPI настройка аналогична.

      6.) И последнее, что мы рассмотрим, это автозагрузка. Существует несколько применений данной функции: автоматизация определённых настроек, запуск скрипта или графического приложения.
     Существует несколько методов решения данных задач, мы же рассмотрим два из них.
     Первый как упоминалось ранее является использование файла /etc/rc.local, который позволяет настроить как выполнение отдельных команд так и скриптов. Для этого нужно просто перечислить их в порядке выполнения. Однако данный способ не подходит для запуска графических приложений, т.к. rc.local выполняется до загрузки графической оболочки.
     Для того чтобы запустить приложение или скрипт после её старта можно воспользоваться следующим способом:
- создать файл с названием типа notification-daemon.desktop с следующим содержанием:
[Desktop Entry]
Name=Notification Daemon
Comment=Display notifications
Exec=/путь/к/приложению
Terminal=false
Type=Application
- поместить его в директорию /home/user/.config/autostart, где user – имя пользователя.            Для запуска нескольких приложений необходимо создать несколько файлов. Недостатком данного метода является то, что скрипт или приложение запускается от имени текущего пользователя, в то время как rc.local выполняется от имени root.

     Данная статья является ознакомительной и предназначена для людей, только начинающих знакомиться с Linux. Для более подробной информации, следует обратиться к официальной документации.