Всем привет.
В данной статье я хочу поделиться двумя новостями. Во первых открытый российский 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 может стать базовой платформой которую можно развивать совместно! И, следовательно, меньшими затратами получать большую ценность для конечных систем. Я имею в виду принцип Линукс, когда драйвера разрабатываются производителями микроэлектроники, поддержка платформ и протоколов осуществляется производителями оборудования и так далее. И данная статья этому подтверждение, ведь мы открыли очередной, ранее закрытый, процессор, для всех.