OpenSCADAWiki: Using/PLC/firmwareARM ...

Home | Index | Changes | Comments | Users | Registration | Login  Password:  
 
This is an old revision of Using/PLC/firmwareARM from 2013-06-05 16:32:08..

Прошивка и создание программного окружения ПЛК архитектуры ARM

Широкое распространение во встраиваемых решениях получила архитектура ARM благодаря её сравнительно высокой производительности в сочетании с низким энергопотреблением и ценой. С целью выполнения плановой задачи обеспечения аппаратной многоплатформенности система OpenSCADA была адаптирована к сборке и работе на оборудовании ARM-архитектуры. Так, были выполнены проекты Сборка проекта OpenSCADA для мобильных устройств фирмы Nokia (N800, N900, N950) и Сборка OpenSCADA и прошивки для ARM-контроллеров фирмы ICP DAS (LP-5141). Целью данного раздела является систематизация методик и отслеживание проблем создания сборок OpenSCADA и прошивок программного окружения в целом для различного встраиваемого оборудования архитектуры ARM.


Особенностью ARM архитектуры является отсутствие обязательной аппаратно-зависимой программной системы первичной инициализации и конфигурации оборудования, характерной для x86 архитектур, — BIOS, а структура аппаратной конфигурации обычно содержит: центральный процессор (CPU), встроенную оперативную и флешь-память, а также ряд встроенного оборудования на стандартных шинах системного уровня. При этом флешь и оперативная память находятся в общем адресном сегменте. Инициализация такой системы программным окружением осуществляется загрузкой исполняемого кода непосредственно на встроенную флешь-память.


Для работы вычислительных функций OpenSCADA да и многих сопутствующих библиотек и программ важна производительность вычислений с плавающей точкой. Особенностью процессоров архитектуры ARM является простота ядра процессора и необязательное наличие расширений вроде математического сопроцессора. Как следствие производительность на операциях с плавающей точкой сильно зависит от конкретно взятого процессора, а также способа эмуляции вычислений с плавающей точкой в случае отсутствия сопроцессора вообще. На процессорах ARM-архитектуры встречаются два формата работы с плавающей точкой: FPA и VFP. Формат FPA является устаревшим и встречался в виде аппаратной реализации с ядрами ARM до семейства StrongARM(ARMv4). Ядра ARM семейства XScale(ARMv5TE) вообще не комплектовались математическим сопроцессором. А ядра ARM, начиная с семейства ARM11(ARMv6) комплектуются математическим сопроцессором формата VFP. В тоже время ARM процессора с архитектурой версии ARMv5 до сих пор широко распространены, а значит вопрос производительности математических вычислений для них сводится к производительности эмуляции формата FPA или VFP. В случае с окружением ОС Linux эмуляция FPA обычно осуществляется ядром Linux путём обработки исключений процессора при вызове FPA команд. Программная эмуляция в математической библиотеке обычно встречается с форматом VFP для чего требуется пересборка всех программ. При этом эмуляция FPA посредством исключений хуже по производительности программной эмуляции VFP почти на порядок. Сравнить производительность вычислений с плавающей точкой на разных архитектурах, процессорах и способах эмуляции можно в приложении 1.


Типовое программное окружение на основе ОС Linux для оборудования на основе ARM представляет из себя: Загрузчик UBoot, Ядро Linux и Корневую Файловую Систему (КФС). Загрузчик UBoot грузится в нулевой сектор флешь-памяти, а его настройки хранятся в первом. Со второго сектора загружается код ядра, а сразу после него КФС. КФС обычно оформляется в виде файловой системы JFFS2 или UbiFS, которые оптимизированы для работы на блочных устройствах — флешь памяти с ограниченным ресурсом записи. Примеры разбивки блочного устройства (флешь-памяти) для LP-5141 и TionPro270 представлены ниже:


Корневая файловая система содержит типовое UNIX-дерево с рабочими программами, библиотеками и другими файлами. Основой любой программы или библиотеки являются системные библиотеки GLibC или UClibC. OpenSCADA адаптирована для сборки и работы с "GLibC" версии >= 2.3. "UClibC", созданная как облегчённая версия "GLibC" для встраиваемых систем, содержит ряд ограничений и до сих пор не реализует или содержит ошибки в реализации для ряда функций.


КФС и программное окружение на основе Linux может поставляться вместе с ARM-оборудованием и содержать закрытые бинарные библиотеки, модули ядра Linux и т.д. В таком случае независимая сборка и замена исходного программного окружения становится непрактичной поскольку приводит к потере исходной функциональности. Однако, часто встречается ситуация поставки оборудования ARM без исходного программного окружения или с окружением, которое не содержит закрытого кода и которое может быть заменено. Примером первого случая является контроллер LP-5141 и подобные фирмы "ICP DAS", которые содержат бинарную сборку библиотеки API специализированного оборудования (libi8k) и модули ядра Linux для его инициализации. Примером второго случая является одноплатный компьютер Тион-Про270, создание программного окружения и сборки OpenSCADA для архитектуры ARM которого будем рассматривать ниже.

Инструменты сборки ядра Linux и рабочих окружений под разные целевые архитектуры

Сформировать Linux КФС можно на основе готовых пакетов существующего бинарного дистрибутива, пакетов исходных текстов существующего дистрибутива, а также собрать из оригинальных исходных текстов посредством ToolChain в одной из сборочных систем.


Сборка программ или целой КФС для архитектур, отличных от x86 и x86_64, обычно осуществляется посредством кросскомпиляции с использованием утилит (ToolChain) для сборки, линковки и отладки под целевую архитектуру ARM. Для автоматизации этого процесса создан ряд инструментов сборки готовых КФС.

BuildRoot

Данная система сборки является частью проекта создания альтернативной библиотеки функций языка "C" UClibC, поэтому в основном нацелена на сборку окружений с "UClibC", с соответствующими ограничениями. BuildRoot хорошо показал себя в работе на хостовых системах разных версий и позволяет без особых проблем собирать программные окружения на основе Linux.


Получить архив BuildRoot нужной версии можно по ссылке http://buildroot.uclibc.org/downloads. Далее его нужно распаковать в домашней директории обычного пользователя и произвести конфигурацию, настройку и сборку:


В процессе сборки могут возникнуть проблемы следующего рода:

(+) Необходимо указанный пакет загрузить отдельно и поместить его в директорию "./dl" или "./output/dl".
(+) Однозначного решения данной проблемы нет и нужно разбираться с ошибками сборки индивидуально для программы. Ошибка сборки может быть связана, например, с отсутствием выбора отдельного параметра при конфигурации или проблемой сборки программы в данном окружении. Патчи исправления сборки можно помещать непосредственно в директорию описания программы "./package/{имя пакета}/"

PTXDist

Универсальный инструмент сборки ядер, ToolChain и программных окружений на основе Linux фирмы "Pengutronix". PTXDist является мощным и гибким инструментом, однако старые его версии имеют проблемы на современных хостовых системах, что усложняет задачу сборки программных окружений для сравнительно старых, но всё ещё распространённых, аппаратных платформ. Например, сейчас (2012 год) можно встретить новое оборудование с процессорами ARM XScale, ARM9 (ARMv5) времён 2003 года. Однако новыми версиями PTXDist неплохо поддерживаются старые платформы, о чём можно узнать из таблицы поддержки по ссылке: http://www.pengutronix.de/oselas/toolchain/index_en.html.


Для сборки программного окружения (КФС) с помощью PTXDist нужно:


Теперь детальнее в командах:

Тион-Про270

Одноплатный компьютер "Тион-Про270" представляет собой высокоинтегрированную вычислительно-управляющую систему на базе процессора Marvell PXA270 с ARM ядром семейства XScale от фирмы ЗЭО. Данная плата была передана разработчикам проекта OpenSCADA Алексеем Попковым с целью адаптации OpenSCADA.


Все материалы по сборке программного окружения с OpenSCADA и готовые сборки для платы Тион-Про270 можно получить по ссылке: ftp://ftp.oscada.org/OpenSCADA/PLC/TionPro270


TionPro270 (344 Kb)

Плата поставляется производителем оборудования с предустановленным программным окружением на основе Linux™ или Windows CE©. Кроме того все исходные материалы программных окружений доступны на Wiki-ресурсе производителя.


В исходном виде плата попала к разработчикам с минимальным программным окружением, для которого не было возможности собрать OpenSCADA, поэтому программное окружение было полностью загружено по новой. Загрузка программного окружения во flash-память осуществлялась с помощью JTAG-адаптера OLIMEX ARM-USB-OCD и программы OpenOCD версии 0.5.0, сборку которой нужно конфигурировать с параметром "--enable-ft2232_libftdi".


Для загрузки во флешь-память платы использовались готовые сборки загрузчика UBoot-1.3.3 (файл образа u-boot-1.3.3_svn886_520mhz_tion_pro270_64m.bin) и ядра Linux-2.6.22.19. Образ файловой системы JFFS2 КФС собирался с помощь "BuildRoot" и "PTXDist", о чём ниже.


Прошивка оборудования с помощью "OpenOCD" осуществляется от лица суперпользователя командой:

$ openocd -f interface/olimex-arm-usb-ocd.cfg -f tion270.cfg

При этом сценарий прошивки "tion270.cfg" и файлы образов программного окружения, указанные в сценарии прошивки "tion270.cfg", должны находиться в текущей директории. Сценарий прошивки "tion270.cfg" содержит:

Сборка КФС в BuildRoot

С целью избежать возникновения множества проблем сборки, связанных со сборкой с самого начала, была взята конфигурация "buildroot-2009.08" непосредственно от производителя оборудования из Git-репозитория: http://zao-zeo.ru/media/files/linux/buildroot-2009.08.git. С целью сборки в окружении "BuildRoot" были созданы конфигурации в директории "./package/ для библиотеки "LibGD" и OpenSCADA.


Полученная после сборки КФС была загружена во флешь-память платы и успешно запущена. Однако, при запуске выяснилось, что версия "uCLibс" 0.9.30.3 не содержит реализации функции clock_nanosleep(), а также падает в функции timer_settime() для типа уведомления SIGEV_THREAD. Если функцию clock_nanosleep() можно заменить на nanosleep(), то решить проблему функции timer_settime() в рамках данной версии "uCLibс" возможности нет.


Далее был взят образ текущей версии "BuildRoot" на 16.01.2012, и произведена сборка OpenSCADA с "uCLibs" версии 0.9.32.1. Сборка прошла успешно после некоторой адаптации сборочного окружения. OpenSCADA запустилась успешно с некоторыми проблемами, которые были устранены.


В списке ниже приведены возникшие проблемы при сборке и работе OpenSCADA на uCLibC разных версий:

(+) отсутствует реализация функции clock_nanosleep() — необходимо использование версии >= 0.9.32 или замена на nanosleep().
(-) 0.9.30.3: падение на функции timer_settime() для типа уведомления SIGEV_THREADАктуально.
(+) Библиотека OpenSSL "libssl" не содержит зависимости на "libcrypto" — в модуле OpenSCADA.Transport.SSL добавлена прямая зависимость на библиотеку "libcrypto".
(+) Функции семейства printf() некорректно обходят проблему висячих символов '%' — исправлена строка сообщения "Last: %s. Load: %3.1f% (%s from %s)".
(+) Отличная от GLibC обработка взаимоблокировок в рамках одного потока в функциях RW-lock — исправлено взаимоблокирование в модуле OpenSCADA.UI.WebVision, а функция проверки сеансов вынесена в процедуру сервисного вызова.

Сборка КФС в PTXDist

Освоение PTXDist для сборки окружения на TionPro270 осуществлялось посредством изучения опыта изложенного по ссылке http://www.emb-linux.narod.ru/tion-pro-270/index.html. Однако, статья написана достаточно давно и для сборки использовалась версия ptxdist-1.1.1, которая на современном программном окружении фактически не работает, а кроме того часть библиотек, нужных для OpenSCADA, там просто не собирается. В результате за основу была взята версия ptxdist-2011.11.0 и на ней осуществлена сборка.


Перед непосредственной сборкой КФС для данной платы была создана конфигурация ToolChain "arm-xscale-linux-gnueabi_tion270.ptxconfig" на основе существующей "arm-xscale-linux-gnueabi_gcc-4.6.2_glibc-2.14.1_binutils-2.21.1a_kernel-2.6.39-sanitized.ptxconfig" с версиями программ:


Далее был создан клон проекта PTXDist "OSELAS.BSP-Pengutronix-Generic" в директории "TionPro270_RootFS" с конфигурацией платформы "arm-qemu-2011.01.0". Для сборки OpenSCADA создана конфигурация в лице файлов openscada.in и openscada.make, которые были помещены в директорию локальной конфигурации проекта rules/. Кроме OpenSCADA была адаптирована конфигурация программы udev, версия которой оказалась сильно большой для исходной версии ядра Linux-2.6.22, т.е. использованная версия udev была опущена до 141. Новые файлы конфигурации udev также были помещены в директорию rules/, тем самым определив их использование вместо исходной конфигурации.


Сборка КФС прошла успешно и был получен образ ФС jffs2. Полученная КФС была успешно загружена на плату и заработала. OpenSCADA также корректно запустилась и функционирует.

Адаптация

Данная плата содержит ряд аппаратных интерфейсов адаптация которых интересна для OpenSCADA, поэтому в данном разделе будет концентрироваться информация по их адаптации.


Плата содержит микросхему преобразования уровней сигнала из RS232 в RS485, которая, однако, не является прозрачной для отправки запросов из программного обеспечения. А именно:


Для решения данной особенности модуль OpenSCADA Transport.Serial был доработан на предмет поддержки такого рода аппаратного управления потоком.


Используя полученное расширение, была осуществлена проверка и подтверждено наличие проблемы программного окружения контроллера LP-5141.

ICP DAS LP-51xx

Фирма ICP_DAS достаточно давно выпускает контроллеры на процессорах ARM архитектуры с предустановленным окружением ОС Linux, как в данном случае LP-5141, что делает интересным создание сборки или новой прошивки с OpenSCADA больше на странице проекта


 (27 Kb)

Nokia N800, N900, N950, N9

Фирма Nokia является одним из мировых лидеров в производстве и продаже мобильных телефонов. В 2005 году фирма Nokia выпустила карманный персональный компьютер (КПК) N770 на основе развитого Linux окружения с собственным окружением рабочего стола (на GTK+) — Hildon под общим названием проекта Maemo. В последствии на основе платформы Maemo было выпущено ещё три мобильных устройства, а именно два КПК «интернет-планшета» N800, N810 и смартфон «интернет-планшет» N900. В 2010 году фирма Nokia объединила свои усилия по работе над Maemo с проектом MobLin фирмы Intel, создав проект MeeGo. На основе платформы MeeGo в 2011 году было выпущено два смартфона N950(прототип) и N9 больше на странице проекта


КПК N800 (657 Kb) Мобильный телефон N900 (448 Kb) Мобильный телефон N950 (412 Kb)

SMH2Gi

Свободнопрограммируемый панельный контроллер "SMH2Gi" представляет собой высокоинтегрированную вычислительно-управляющую систему на базе процессора iMx27 с ядром ARM926EJ-S от фирмы Сегнетикс. Адаптация и сборка OpenSCADA для этого контроллера понадобилась в рамках проекта создания автоматизированной системы управления вакуумной технологической установки.


Все материалы по сборке программного окружения с OpenSCADA и готовые сборки для панельного контроллера можно получить по ссылке: ftp://ftp.oscada.org/OpenSCADA/PLC/Segnetics-SMH2Gi


SMH2Gi (259 Kb)

Панельный контроллер поставляется производителем оборудования с предустановленным программным окружением на основе Linux™ и собственной средой исполнения контроллера "SMLogix". Роль OpenSCADA для данного контроллера рассматривалась как расширенная среда программирования контроллера, интегрированная и программируемая из станции верхнего уровня на основе OpenSCADA. Для сохранения возможности представления и контроля данных, полученных в OpenSCADA, на встроенном дисплее, при этом минимизировав трудозатраты на адаптацию, решено было сохранить исходную среду исполнения "SMLogix" для выполнения задачи представления данных на внутреннем дисплее, а данные транслировать в/из неё посредством локального ModBus/TCP соединения. Впоследствии, для оптимизации ряда задач, был создан модуль источника данных к OpenSCADA DAQ.SMH2Gi с функциями прямого опроса модулей SMH2Gi MC и MR, а также обмена значениями переменных с процессом "logix", посредством разделяемой памяти.


Для сборки исходного программного окружения разработчиком использовался ранее рассмотренный инструментарий PTXDist версии 1.99.12. Собирать ToolChain, угадывая профиль, использованный для сборки исходного программного окружения, не потребовалось поскольку на сайте производителя доступна полная сборочная среда, оформленная в виде образа ОС Linux для виртуальной машины VMWare. Из этого образа был получен готовый ToolChain профиля "gcc-4.3.2-glibc-2.8-binutils-2.18-kernel-2.6.27-sanitized". Поскольку не требовалось собирать КФС полностью, решено было собрать OpenSCADA, используя готовый ToolChain, отдельно. Для сборки OpenSCADA предварительно были собраны библиотеки: "pcre-8.12" и "sqlite-3.7.6.2". Позже, в рамках задачи сборки модулей UI.WebCfgD и UI.WebVision, были собраны библиотеки: "png-1.2.49", "jpeg-8a", "expat-2.0.1", "freetype-2.3.11", "fontconfig-2.6.0" и "gd-2.0.35". Далее OpenSCADA собиралась следующим образом:



В результате был сформирован архив сборки OpenSCADA, который можно выгрузить на панельный компьютер SMH2Gi и там распаковать. Полученное программное окружение OpenSCADA настроено на автоматический запуск при запуске контроллера посредством скрипта инициализации "/etc/init.d/openscada". Сборка OpenSCADA была успешно запущена.


В отношении программного окружения панельного контроллера SMH2Gi в целом нужно сделать несколько замечаний. В контроллере использовано ядро Linux 2.6.29 с расширением жёсткого реального времени, что позволяет удерживать периодичные интервалы времени до 100 мкс. Кроме того, все критичные системные потоки запущены с политикой управления планированием реального времени. При этом, хотя процессор не имеет математического сопроцессора, эмуляция выполнена оптимально в виде SoftVFP. Всё это позволяет в OpenSCADA исполнять высоко-детерминированные задачи управления с периодичностью до 100 мкс и приемлемой вычислительной производительностью.

AS-9260

Плата AS-9260 представляет собой контроллер на базе микросхемы AT91RM9260, ядро ARM9(ARMv7), с набором периферийных устройств. Плата предназначена для разработки (макетирования) проектов на базе микроконтроллеров с ядром ARM926EJ-S производства корпорации Atmel, также может быть использована в качестве управляющего контроллера целевой системы.


AS-9260 (194 Kb)

На плате установлены разъемы USB2.0 (1 Host, 1 Device, Full-speed, 12Mb/s), DBGU, RS-232, RS-485, два 12-контактных разъема для установки модуля интерфейса Ethernet 10/100 Mbps, кроме того, имеется место для установки двух 80 - контактных разъемов типа PLD-80 для подключения внешних модулей с дополнительными интерфейсами.


Периферия платы AS-9260 c процессором AT91sam9260 минимальна:


Загрузчик и ядро можно найти здесь http://www.at91.com/linux4sam. В U-boot устанавливаем загрузку КФС c USB-флеш:


Флеш форматируем под ФС ext2 и на нее заливается КФС Debian Lenny. Запускаем систему и настраиваем интернет соединение nano /etc/network/interfaces:


В /etc/inittab устанавливаем автологин:


Указываем репозиторий для обновления в /etc/apt/sources.list


После обновления скачиваем исходники OpenSCADA и разрешаем зависимости. Нативно откомпилировать скаду не удастся, потому что для этого не хватит ОЗУ. Одно из решений данной ситуации следующее:





Описанный метод далеко не самый лучший, потому ведется работа по его улучшению. Аналогичным образом скада устанавливается на плату AS-9200 c процессором AT91RM9200.

Raspberry Pi

"Raspberry Pi®" — одноплатный компьютер, созданный в целях благотворительности. Предназначен для обучения базовым компьютерным наукам в школах, позиционируется как дешевое решение для начинающих разработчиков. Разрабатывается "Raspberry Pi Foundation".


file:raspberrypi.png

Данная плата была получена для сборки и адаптации OpenSCADA от Лысенко Максима. Плата имеет характеристики:

Аппаратная платформа: ARM11 [ARMv6]
Центральный процессор: Broadcom BCM2835, 700 МГц («турбо-режим» до 1ГГц)
Оперативная память: 256 или 512 Мб, интегрирована в CPU
Постоянная память: флеш карта MMC
Видео подсистема: интегрированное видео ядро Broadcom
Аудио подсистема: интегрирована в CPU
Чипсет: Ethernet и USB: SMSC LAN9512
Электропитание: microUSB, 5 В, от 700 мА
Интерфейсы: HDMI, USB, видео RCA, Stereo Jack 3.5 мм, Ethernet, UART, JTAG, SPI, I2C, DSI, CSI
Вес: 45 г.
Размер: 85,6 × 53,98×17 мм

Для работы с платой был использован специализированный дистрибутив Raspbian “wheezy”. Сборка OpenSCADA осуществлялась для LTS версии 0.8.0.5 и рабочей версии 0.8.1 непосредственно на самой плате. Для сборки пришлось расширить размер области подкачки до 500 Мб, поскольку сборка ряда модулей OpenSCADA современным компилятором (GCC 4.7) и с оптимизацией (-O2) требует много оперативной памяти. Полученные пакеты успешно установились и работали.


Графическое окружение рабочего стола в выбранном дистрибутиве построено на LXDE 0.5.5, которое отображается в полноценном разрешении дисплея через HDMI, или в разрешении 640x480 через композитный видеовыход. OpenSCADA успешно запускается и работает в графическом режиме, однако производительности процессора недостаточно для нормального исполнения динамических моделей OpenSCADA.


file:raspberrypiopenscada.png

 
There are no files on this page.[Display files/form]
There is no comment on this page. [Display comments/form]