Всем привет.

В данной статье я хочу поделиться двумя новостями. Во первых открытый российский Embox выложил в открытый доступ базовые драйвера для российского процессора семейства KOMDIV64, и данный российский процессор стал более открытым и доступным. А во вторых вдохновившись командой Северстали, которые делают открытую АСУ-ТП, мы запустили на этом открытом российском процессоре открытую среду для МЭК 61499 (4Diac).


Краткая справка.

Семейство KOMDIV64 - семейство 64-разрядных микропроцессоров, разработанных в научно-исследовательском институте системных исследований (НИИСИ). Ядра данной серии процессоров совместимы с архитектурой MIPS-64 и являются оригинальной разработкой НИИСИ. Демонстрироваться работа будет на плате Багет-ПЛК1-01. которая работает на микроконтроллере К5500ВК018.

Начну с короткого видео на котором демонстрируется работа Embox на данном процессоре.

Embox на KOMDIV64

И теперь расскажу как это воспроизвести самостоятельно. Это возможно, ведь все драйвера для работы доступны в нашем репозитории. Конечно потребуется сама плата или ее эмулятор.

Краткая инструкция по сборки описана на нашем вики.

Вам потребуется кросс-компилятор MIPS который вы можете установить из пакетов, либо собрать самостоятельно, либо скачать у нас бинарную. сборку .

Сборка

make confload-platform/niisi/baget_plc1 
make

Загрузка на плату

Пока embox запускается с SD карты на плате и использует встроенный загрузчик, в будущем мы планируем вариант старта прямо из flash памяти

Подготовим загрузочный скрипт, он у нас лежит в репозитории. Имя  barebox.sh

Содержимое простое

#!/bin/sh

###### Embox ######
memcpy -l -s ./embox.bin 0x0 0xffffffff80001000 0x4000000
go 0xffffffff80001000

Этот скрипт нужно скопировать в папку boot/barebox/ на SD карте. Туда же нужно положить файл embox.bin, образ собранного embox

sudo cp build/base/bin/embox.bin <path to SD>/boot/barebox/ 

Запуск

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

Мигаем светодиодом из консоли

Традиционно проверим работу таймера командой ticker -c 10 а также включим светодиод с помощью команды pin. На плате 2 светодиода подключенных к порту D (пины 4 и 5), актив��ый уровень у них низкий

зажечь светодиод

pin GPIOD 5 reset

Погасить светодиод

pin GPIOD 5 set

Ethernet

на плате есть разъем ethernet и мы будем использовать сеть ниже.
пока просто посмотрим настройки командой ifconfig

Содержимое образа

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

    include embox.driver.serial.ns16550(reg_width=1)
    include embox.driver.serial.ns16550_diag(base_addr=0x1ff70000)
    include embox.driver.serial.ns16550_ttyS0(base_addr=0x1ff70000, irq_num=20)
    include embox.driver.serial.ns16550_ttyS1(base_addr=0x1b510000, irq_num=21)
    include embox.driver.diag(impl="embox__driver__serial__ns16550_diag")

    include embox.driver.interrupt.niisi.sc64_intc_v2

    @Runlevel(2) include embox.driver.clock.niisi.sc64_timer_v2
    include embox.kernel.time.jiffies(cs_name="sc64_timer_v2", period=100)

    @Runlevel(2) include embox.driver.gpio.niisi.sc64_gpio_mcu

    @Runlevel(2) include embox.driver.net.sc64_tulip

есть еще драйвера для SPI и I2C, все драйвера открыты и доступны у нас в репозитории.

4Diac на Embox

4Diac это свободная реализация среды программирования и рантайм для стандарта МЭК 61499 принятого в АСУ-ТП. Данный стандаhт может применяться и в других сферах, например робототехнике.

Я расскажу только о работе 4Diac под embox, ведь в этом случае не важно на какой аппаратной платформе работает runtime. В видео ниже, будет показано работа и на QEMU (с ARM архитектурой) и на плате KOMDIV64

Создание проекта 4diac

Для разработки программы нужно создать проект. На��имаем правую кнопку мыши, и выбираем new->4diac IDE project

Создание системной конфигурации

Создадим системную конфигурацию на которой будет запускаться наша программа. Добавим к ней ethernet чтобы иметь возможность загружать (и отлаживать) программы удаленно.

IP адрес для Embox в QEMU - 10.0.2.16, для платы тот который есть на плате, у нас 192.168.2.2

Импорт функциональных блоков (FB)

Мы добавили пару простых функциональных блоков для проверки рантайма. Включить и выключить светодиод.

Для импорта правой кнопкой мышки на проекте и там выбираем import -> file system

Создание программы

После импорта FB, мы можем использовать наши функциональные блоки для разработки программы

Разработаем ее, после этого отобразим на нашей системной конфигурации (EMB_RES)

Откроем EMB_RES ( System Configuration -> FORTE_PC -> EMB_RES). И соединим START (Cold & Warm) с  E_CYRCLE (Start ).

Все наша программа разработана и готова к загрузке

Embox

Сборка

Для конфигурации embox под arm/qemu используете

make confload-project/4diac/arm_qemu

для платы baget_plc1_01

make confload-project/4diac/niisi_baget_plc1

после конфигурации, как обычно собираем командой make

make

Запуск

Загрузка и запуск embox зависит от платформы, для baget_plc1_01 это описано выше, а для qemu использовуем скрипт ./scripts/qemu/auto_qemu

./scripts/qemu/auto_qemu

Запуск forte (4diac runtime)

После старта embox можно запустить рантайм 4diac в двух вариантах, с работой из файла и с ожиданием загрузки по сети

файл передается с помощью флага -f

forte -f <file_name>.fboot

Нас сейчас интересует запуск в режиме загрузки по сети просто команда forte

forte

Загрузка программы на embox

Удаленный deploy

В 4Diac-ide правой кнопкой на проекте и выбираем “deploy”

Нужно убедиться что у нас правильный IP адрес и что forte запущена на embox

Программа в виде файла

После того как мы отладили нашу программу, мы можем сгенерить отдельный файл и запустить наш рантайм с этой программой

Для этого на “EMB_RES” нажимаем правую кнопку мыши и выбираем пункт “Create FORTE boot files”. Файл сохраняем в папке корневой файловой системы embox (conf/rootfs/ ) и после этого пересобираем проект

Демонстрация

На этом видео можно видеть процесс создания программы и запуска на QEMU и BAGET_PLC1_01

Заключение

В заключение хочу сказать, что информация об отсутствии российских процессоров несколько преувеличена.  Да, есть большое количество трудностей, и наверное, сейчас, мы не можем предложить решения во всех сегментах, но в критически важных, к которым относится и АСУ-ТП, уже можно пробовать создавать конечные системы.

На мой взгляд, нам, для этого  не хватает открытости и доверия к друг другу. Но мне кажется Embox может стать базовой платформой которую можно развивать совместно! И, следовательно, меньшими затратами получать большую ценность для конечных систем. Я имею в виду принцип Линукс, когда драйвера разрабатываются производителями микроэлектроники, поддержка платформ и протоколов осуществляется производителями оборудования и так далее.  И данная статья этому подтверждение, ведь мы открыли очередной, ранее закрытый, процессор, для всех.