Baikal‑M (BE‑M1000)

Российская система на кристалле Baikal‑M для создания вычислительных устройств широкого назначения, таких как персональные машины, микросерверы, сетевое оборудование, встроенные системы и контроллеры, обладающие достаточно высокой производительностью и имеющие низкое энергопотребление.

На базе SoC BE-M1000 компании «Байкал Электроникс» создано множество материнских плат и плат для встроенных систем. Наверное, самыми распространенными можно считать материнские платы Эдельвейс TF307.

Сам SoC BE-1000 имеет восемь ядер Arm® Cortex™-A57, работающих на частоте 1.5 GHz, и поддерживает кэш L1, L2, and L3. Видеоподсистема включает два контроллера (LVDS and HDMI), а также HD видео декодер. Графический ускоритель Arm Mali™-T628 содержит восемь ядер.

Также SoC BE-M1000 содержит два контроллера памяти DDR3/4 и множество интерфейсов: PCIe Gen3, 10 Gb Ethernet, 1 Gb Ethernet, USB 3.0, USB 2.0, SATA 6G, eMMC/SD, I2S, SPI, UART, I2C, GPIO, и так далее. SoC соответствует технологии Arm TrustZone® и предоставляет все возможности, необходимые для создания надежных систем.

Hardware Features

Материнская плата Эдельвейс TF307 выполнена в форм-факторе mini-ITX и имеет следующие характеристики.

Baikal M1
  • Процессор: Baikal BE-M1000
  • Архитектура: Arm® Cortex-A57
  • Количество ядер: 8 (4 кластера по 2 ядра)
  • Максимальная частота: 1.5 ГГц
  • Оперативная память: DDR4-2133 (в том числе ЕСС)
  • Количество каналов: 2
  • Поддерживаемый объем: до 64 ГБ (до 2 модулей DIMM
  • Разъём: 2 x 288-pin DIMM socket
  • Возможности расширения: 1 × M.2 E(A)-Key (PCIe × 1 + USB 2.0); 1 × PCIe 3.0 × 8 slot
  • Сетевые возможности: 2 × Gigabit Ethernet, 1000Base-T (RJ-45)
  • Интерфейсы на задней панели: 1 × HDMI; 4 × USB 2.0; 2 × PS/2; 2 × RJ-45 1000Base-T; 1 × Линейный аудио-выход; 1 × Линейный аудио-вход; 1 × Вход микрофона
  • Интерфейсы для подключения передней панели: 1 × Разъём HD Audio; 1 × Разъём передней панели (кнопки, светодиоды); 2 × USB 3.0
  • Электропитание: ATX 24
  • Форм-фактор: mini-iTX
  • Габаритные размеры: 170 x 170 мм

Компактный и унифицированный дизайн платы позволяет построить любое десктопное решение, совместимое с форм-фактором mini-iTX.

Компания «Байкал Электроникс» оказывает всестороннюю поддержку пользователям, получить которую можно зарегистрировавшись на сайте help.baikalelectronics.ru.

Toolchain

Компания «Байкал Электроникс» поставляет SDK, в состав которого входит toolchain, созданный на основе GCC версии 13.1.0, ядро Linux и средства для самостоятельной сборки UEFI-загрузчика.

Во вводной статье мы говорили о недостатках использования сторонних toolchain-ов и, естествено, в нашей работе, мы используем toolchain-ы собственной сборки.

Готовый toolchain для работы на 64-разрядных Linux машинах можно получить на нашем FTP-сервере в каталоге toolchains/x86_64. Выбирать здесь нужно последнюю версию архива с именем 'aarch64-M1000-linux-glibc-*.tar.gz'.

Для самостоятельной сборки toolchain-а, необходимо получить срез репозитория toolchains, например,

$ svn co svn://radix.pro/radix/toolchains/trunk toolchains

И выполнить команду make в соответствующем каталоге:

$ cd toolchains/products/M1000-glibc/1.9.8
$ make -j8

Напомним здесь, что перед сборкой необходимо подготовить каталог для инсталляции toolchain-а так, как это описано в разделе, посвященном загрузке toolchain-ов с нашего FTP-сервера.

Source Code

К сожалению, компания «Байкал Электроникс» не предоставляет доступ к репозиториям исходного кода ядра Linux и загрузчика, а лишь поставляет SDK в виде самораспаковывающегося архива. Это обстоятельство приводит к тому, что сторонние разработчики должны хранить громоздкие архивы вместо того, чтобы получать необходимые срезы репозиториев непосредственно перед сборкой.

Для обеспечения непрерывного процесса разработки мы сохраняем на своем FTP сервере ядро Linux в виде отдельного архива в каталоге linux.

Поскольку компания «Байкал Электроникс» перешла на использование UEFI-загрузчика, прошитого в SPI NOR Flash, загрузочные образы операционных систем можно создавать с использованием GRUB.

Boot Image

В разделе Releases описан общий способ приготовления загрузочных образов Radix.Linux. Рассмотрим его еще раз, применительно к выпуску 1.9.383.

Прежде всего, необходимо загрузить файлы baikal-m1.efi32fs, baikal-m1.ext4fs и write-efiboot-image на рабочую машину, работающую под управлением OS Linux из каталога baikal-m1 нашего FTP-сервера.

Скрипт write-efiboot-image позволяет записывать готовые образы, как на внешние носители, так и в файлы образов, подключенные через loopback-девайсы. Зля записи образа Radix.Linux на внешний USB-носитель, достаточно выполнить следующую команду:

# ./write-efiboot-image -e baikal-m1.efi32fs -r baikal-m1.ext4fs /dev/sdg

где, /dev/sdg – имя устройства в devfs внешнего USB-носителя.

В результате на USB-носителе вы найдете два раздела, один из которых будет содержать EFI-загрузчик, а второй – корневую файловую систему Radix.Linux. Оставшееся место на диске можно распределить с помощью утилиты fdisk, например, создав дополнительный раздел для размещения домашних каталогов пользователей (/home).

Теперь достаточно подключить USB-носитель к машине, собранной на основе Baikal M1000, и выбрать источник в интерфейсе UEFI-загрузчика Baikal.

HD Video Decoder

Для обработки видео в системах с микропроцессором BE-M1000 может использоваться встроенный аппаратный видеодекодер HD Video Decoder (VDec). VDec поддерживает декодирование видео в форматах H.263, H.264, H.265 (HEVC), MPEG-2, MPEG-4, SORENSON, VP6, VP8, VC1 (WMV3) и AVS с разрешением до 2560х1440.

Для использования VDec приложениями (ffplay, VLC, Firefox) в системе должны быть установлены: библиотека OpenMAX IL (libomx_vxd.so) и драйвер VDec (img_mem.ko, vxd.ko).

В состав Radix.Linux входит пакет, содержащий библиотеку OpenMAX IL и драйвер VDec. Однако исходный код FFmpeg мы не изменяли, и утилита ffplay не использует апаратный декодер. Это обусловлено тем, что мы еще не имеем patch на VLC, без которого VLC будет рабоать не корректно, если в системе установлен FFmpeg, поддерживающий аппаратный декодер. Иными словами, использование аппаратного декодера требует изменения сразу всех пакетов в системе, которые работают с видео (FFmpeg, VLC, Chromium, Firefox).

Пользователи, которым необходима поддержка аппаратного декодера утилитой ffplay, могут самостоятельно собрать FFmpeg используя patch-файлы, которые можно найти на нашем FTP-сервере.

Для самостоятельной сборки драйвера VDec, прежде всего, надо загрузить и распаковать SDK версии 6.4.

Kernel Module

Система Radix.Linux поставляется с пакетом, содержащим исходный код ядра Linux, достаточный для того, чтобы собирать дополнительные модули ядра прямо на устройстве. Однако прежде чем собирать модуль VDec, необходимо выполнить следующие подготовительные действия от имени суперпользователя root:

cd /usr/src/linux-m1-6.1.63-6.4.92
make oldconfig
make prepare
make modules_prepare

Допустим, что мы находимся в каталоге SDK-6.4. Тогда сборку модуля можно осуществить с помощью следующих комманд:

cd vdec

make modules
make modules_install

depmod -b / 6.1.63

Загрузить модули можно с помощью команд:

/sbin/modprobe img_mem
/sbin/modprobe vdx

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

После загрузки модулей ядра можно удостовериться, что в devfs появилось новое устройство /dev/vxd0.

OpenMAX IL

Далее, необходимо инсталлировать udev-правила, firmware и проприетарные библиотеки по следующему сценарию (напомним, что мы находимся в каталоге SDK-6.4):

cd vdec/target

cp -a lib/firmware/*.fw /lib/firmware/

cp -a etc/udev/rules.d/99-vdec.rules /etc/udev/rules.d/
cp -a etc/xdg/gstomx.conf            /etc/xdg/

cp -a usr/lib/aarch64-linux-gnu/libomx_vxd.so              /usr/lib/
cp -a usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstomx.so /usr/lib/gstreamer-1.0

chmod 0755 /usr/lib/libomx_vxd.so
chmod 0755 /usr/lib/gstreamer-1.0/libgstomx.so

( cd /usr/lib/gstreamer-1.0 && patchelf --set-rpath /lib:/usr/lib:/usr/lib/../lib libgstomx.so )

Отметим здесь, что с помощью утилиты patchelf мы устанавливаем RPATH библиотеки libgstomx.so в правильное значение.

Разумеется, для работы ffplay, с использованием библиотеки OpenMAX IL, необходимо пересобрать пакет ffmpeg, с изменениями, добавляющими поддержку VDec и управления --enable-omx --enable-omx-img. Однако мы этого делать не будем, а остановимся лишь на настройке браузера Firefox, которая позволит улучшить воспроизведение видео.

Firefox

Браузер Firefox декодирует видео с помощью библиотеки FFmpeg только для видеоформата H.264.

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

  • Установить соответствующий плагин (например, загрузить из магазина расширений браузера плагин h264ify для преобразования форматов VP8/VP9, используемых для большинства видео, размещенного на видеохостинге YouTube).
  • Добавить файл устройства декодера /dev/vxd0 в исключения sandbox. Для этого необходимо набрать в адресной строке браузера "about:config" и установить следующие значения параметров:
security.sandbox.content.read_path_whitelist=/dev/vxd0
security.sandbox.content.write_path_whitelist=/dev/vxd0
Firefox Sandbox Parameters
Fig.1. Firefox Sandbox Parameters

Как показано на рис.1.

Поскольку библиотека OpenMAX IL является проприетарной, в образ Radix.Linux включены тодько: драйвер VDec, и объектный файл библиотеки OpenMAX IL. Пользователи должны самостоятельно решать, так ли им необходимо использовать аппаратный декодер при проигрывании видео с помощью утилиты ffplay.

VLC Audio

При перемотка видео могут возникать залипания звука. Для того чтобы этого не происходило, необходимо настроить выходное Audio Устройство по умолчанию. Это можно сделать перейдя в раздел настроек:

VLC Preferences
Fig.2. VLC Preferences

Выбрать полные настройки Audio:

VLC All Audio Settings
Fig.3. VLC All Audio Settings

Установить PulseAudio Sound Server в качестве выходного устройства по умолчанию:

VLC PulseAudio as Default
Fig.4. VLC PulseAudio as Default

и сохранить настройки.


В заключение, необходимо отметить, что компания «Байкал Электроникс» уделяет большое внимание поддержке разработчиков программного и аппаратного обеспечения для устройств на базе процессора Baikal M1000 и практически любой подготовленный пользователь может самостоятельно собрать и обновить UEFI-загрузчик на платах, подобных плате Эдельвейс TF307, воспользовавшись инструкциями в составе SDK.