Дистрибутив Buildroot

Документ описывает дистрибутив операционной системы GNU/Linux на базе Buildroot для микросхемы 1892ВМ14Я (MCom-02), процедуру сборки и прошивки образа SD-карты с операционной системой и настройки операционной системы (далее — «ОС»).

Обзор

Дистрибутив предназначен для распространения исходных кодов ОС, инструментального ПО и скриптов сборки ОС. Поддерживаются следующие модули на базе микросхемы 1892ВМ14Я:

  • Салют-ЭЛ24Д1 r1.3;

  • Салют-ЭЛ24Д1 r1.4;

  • Салют-ЭЛ24Д1 r1.5;

  • Салют-ЭЛ24Д1 r1.5 с установленным навигационным радиомодулем RF2Chan v2;

  • Салют-ЭЛ24Д2 r1.1;

  • Салют-ЭЛ24ОМ1 r1.1 с установленным Салют-ЭЛ24ПМ1 r1.1, r1.2;

  • Салют-ЭЛ24ОМ1 r1.2 с установленным Салют-ЭЛ24ПМ1 r1.2, Салют-ЭЛ24ПМ2 r1.0, r1.1, r1.2.

Основные компоненты: система сборки Buildroot, загрузчик U-Boot, ядро Linux.

Архив дистрибутива содержит все компоненты — при сборке дистрибутива с поставляемыми файлами конфигурации поддержки MCom-02 не требуется доступ в интернет.

Компоненты дистрибутива предоставляются в исходных кодах. Исключения:

  • библиотека пространства пользователя драйвера Mali GPU, демо-приложения GPU (для ядра 4.4);

  • инструментальное ПО DSP DELcore-30M;

  • прошивки микросхем контроллеров установленных на модулях (например, Wi-Fi).

Дистрибутив содержит следующие файлы конфигурации поддержки MCom-02:

  • mcom02_defconfig — конфигурация дистрибутива по умолчанию.

  • mcom02min_defconfig — минимальная конфигурация для загрузки ОС.

Особенности файла конфигурации mcom02_defconfig:

  • Назначение конфигурации — демонстрация и тестирование интерфейсов MCom-02 и поддерживаемых модулей.

  • Имя пользователя, пароль — root, root.

  • Корневая файловая система основана на BusyBox, оболочка — Bash, система инициализации — systemd.

  • Стандартные бенчмарки, тесты и пакеты: coremark, ramspeed, memtester, fio, dhrystone, bonnie, hdparm, i2c-tools, iperf3, Python 3, GStreamer, ALSA, FFmpeg, Bluez, libdrm и т.п.

  • Пакеты поддержки Mali GPU: модуль пространства ядра, библиотеки пространства пользователя, mcom-mali-demos. Аппаратное ускорение Qt на GPU.

  • Пакет поддержки SpaceWire — mcom-libswic.

  • Поддержка DSP DELcore-30M:

    • Пакет утилит и демонстрационных приложений — mcom-delcore30m-tests.

    • Инструментальное ПО для DSP (компилятор, линковщик).

  • Пакеты реализации OpenVX и демонстраций OpenVX: openvx, openvx-demo.

  • Пакеты реализации навигационного решения GNSS:

    • rf2chan-v2-gnss — модуля ядра для поддержки радиомодуля RF2Chan v2.

    • mcom-talita — драйвер пространства пользователя с реализацией навигационного решения.

  • Поддержка U-Boot из целевой ОС:

    • fw_setenv, fw_printenv — утилиты установки и чтения переменных окружения U-Boot.

    • mcom02-fw-update — утилита прошивки образов U-Boot.

  • Поддержка файла идентификации ОС /etc/os-release.

  • udev-правила и systemd-сервисы для инициализации 6LoWPAN, ALSA, SPI, Wi-Fi.

  • Сетевой адрес получается по DHCP. Имя хоста по умолчанию — mcom02.

  • По умолчанию включен SSH.

Linux 4.4 и Linux 5.4

Таблица 1 Поддержка 1892ВМ14Я

Подсистема

Linux 4.4

Linux 5.4

Machine (startup, suspend, SMP, cache)

CMCTR, PLL (ELVEES)

DSP (ELVEES Elcore-30)

Ethernet MAC (Arasan)

I2C (DesignWare)

I2S (ELVEES MFBSP)

I2S (DesignWare)

GPU (ARM Mali-300)

[1]

[2]

GPIO (DesignWare)

MCC (ELVEES GNSS)

NAND (Arasan)

PMCTR (ELVEES)

RTC (ELVEES)

PWM (ELVEES)

SDMA (ARM)

SDMMC (Arasan)

SpaceWire (ELVEES)

SPI (DesignWare)

Timers (DesignWare)

UART (DesignWare)

USB (DesignWare)

VPIN (MIPI CSI, parallel)

VPOUT (MIPI DSI, parallel)

VPU encoder (ELVEES VELcore-01, aka avico)

VPU decoder

Watchdog (DesignWare)

Таблица 2 Поддержка Салют-ЭЛ24ПМ

Подсистема

Linux 4.4

Linux 5.4

Audio codec (NXP SGTL5000) @ MFBSP I2S

eMMC @ SDMMC0

Ethernet PHY

LEDs @ GPIO

NAND flash

PMIC (NXP MMPF0100N)

SPI flash @ SPI0

Таблица 3 Поддержка Салют-ЭЛ24ОМ

Подсистема

Linux 4.4

Linux 5.4

Parallel @ VPIN

MIPI CSI @ VPIN

MIPI DSI @ VPOUT

Parallel LCD @ VPOUT

HDMI audio (TDA998x) @ I2S0

HDMI video (TDA998x) @ VPOUT

CAN (MCP2515) @ SPI0

LEDs @ GPIO

RTC (MCP7940x) @ I2C2

SD card @ SDMMC1

Wi-Fi (AP6212) @ SDMMC1

Bluetooth (AP6212) @ UART1

PWM

Подготовка ПК

ПК должен иметь конфигурацию:

  • не менее 4 ГиБ ОЗУ, 20 ГиБ свободного места на НЖМД или твердотельном накопителе;

  • на ПК должен быть установлен кард-ридер SD-карт;

Для работы с модулем требуется дополнительное оборудование:

  • microUSB-USB кабель;

  • патч-корд Cat5e;

  • MicroSD-карта;

  • опционально: USB-флеш-накопитель.

Программные требования к ПК:

  • Операционная система ПК на базе ОС Linux, поддерживаемые ОС CentOS Stream 8, 9, Ubuntu 22.04.

  • Для прошивки образов и работы с UART пользователь должен быть добавлен в группы disk, dialout.

  • Для сборки дистрибутива в ОС ПК должны быть установлены RPM-пакеты, перечисленные в соответствующем файле Dockerfile.<distro> (см. build-docker):

    sudo dnf install <packages-from-dockerfile> -y
    

    Для работы с терминалом UART должны быть установлены RPM-пакеты minicom и putty.

  • В зависимости от модели используемого USB-UART переходника необходима установка драйверов.

  • При сборке дистрибутива в Docker-контейнере требуется дополнительная настройка ПК, подробнее см. Сборка в среде Docker.

Получение дистрибутива

Дистрибутив распространяется на странице https://dist.elvees.com/mcom02/buildroot.

Пример иерархии директорий:

├── linux44/
│   ├── graphs/
│   ├── images/
│   ├── artifact-files.txt
│   ├── git-info.json
│   ├── manifest.json
│   └── mcom02-defconfig-src.tar.gz
└── linux54
    ├── graphs/
    ├── images/
    ├── artifact-files.txt
    ├── git-info.json
    ├── manifest.json
    └── mcom02-defconfig-src.tar.gz

В директориях linux44 и linux54 хранятся исходные коды и образы на базе соответствующих ядер 4.4 и 5.4.

В файле git-info.json перечислены SHA коммитов Git-репозиториев пакетов Buildroot, которые содержатся в архиве исходных кодов. Git-репозитории некоторых пакетов (Linux, U-Boot, Buildroot external-mcom02) реплицируются на GitHub — https://github.com/orgs/elvees/repositories?type=all&q=mcom02.

В файле manifest.json содержится Идентификатор сборки BUILD_ID.

В файле artifact-files.txt содержатся относительные пути до файлов дистрибутива. Пример скачивания файлов в Bash:

files_url=https://dist.elvees.com/mcom02/buildroot/<release>/linux<version>/artifact-files.txt
files=$(wget -O- -q $files_url)
echo "$files" | xargs -I {} wget --force-directories --no-host-directories $files_url/../{}

В директории images хранятся собранные образы и архивы:

  • mcom02-defconfig-src.tar.gz — архив исходных кодов Buildroot.

  • rootfs.tar.gz — архив корневой файловой системы rootfs.tar.gz c ОС Linux. Архив предназначен для прошивки на загрузочное устройство (SD-карта, eMMC, USB-накопитель). Корневая ФС совместима со всеми модулями.

  • *-uboot.img.gz — образы загрузчика для прошивки в SPI-флеш память:

    Таблица 4 Соответствие модулей и образов U-Boot

    Модуль

    Образ

    Салют-ЭЛ24Д1 r1.3

    mcom02-salute-el24d1-r1.3-uboot.img

    Салют-ЭЛ24Д1 r1.4

    mcom02-salute-el24d1-r1.4-uboot.img

    Салют-ЭЛ24Д1 r1.5

    mcom02-salute-el24d1-r1.5-uboot.img

    Салют-ЭЛ24Д2 r1.1

    mcom02-salute-el24d2-r1.1-uboot.img

    Салют-ЭЛ24ОМ1 с Салют-ЭЛ24ПМ1 r1.1, r1.2

    mcom02-salute-el24pm1-r1.1-1.2-om1-r1.1-1.2-uboot.img

    Салют-ЭЛ24ОМ1 с Салют-ЭЛ24ПМ2 r1.0, r1.1, r1.2

    mcom02-salute-el24pm2-r1.0-1.1-om1-r1.2-uboot.img

    Примечание

    Совместимость ревизий модулей Салют-ЭЛ24ОМ и Салют-ЭЛ24ПМ — https://support.elvees.com/docs/Microchips/1892VM14YA/Boards.

  • arm-buildroot-linux-gnueabihf_sdk-buildroot.tar.gz — комплект тулчейнов ARM, DSP (подробнее см. Средства сборки (Buildroot SDK)).

Файл images/tar2dev используется для прошивки SD-карты в режиме загрузки Generic Distro, см. howto-flash-sd.

Для сборки необходимо скачать содержимое директории, распаковать архив с исходными кодами *-defconfig-src.tar.gz перейти в распакованную директорию:

tar -xf ..-defconfig-src.tag.gz
cd ..-defconfig-src

Важно

Путь до директории, в которой выполняется распаковка и сборка, не должен содержать символов кириллицы и пробелов.

Примечание

Архив *-defconfig.src подготовлен командами:

make mcom02_defconfig
make source
tar -czf ...defconfig-src.tag.gz ...

Обзор исходных кодов

Дерево исходных кодов после распаковки архива представлено на диаграмме:

mcom02_defconfig-src/
├── buildroot/
│   ├── ...
│   ├── dl/
│   └── output/
│       └── ...
├── docker-build.sh
├── Dockerfile.centos8stream
├── Dockerfile.ubuntu22.04
├── external-common/
├── external-mcom02/
├── Makefile
├── Makefile.u-boot
└── u-boot/

Исходные коды Buildroot:

buildroot/

Исходные коды системы сборки Buildroot. Некоторые рецепты пакетов Buildroot изменены.

Buildroot сконфигурирован файлом конфигурации external-mcom02/configs/mcom02_defconfig. В директории buildroot/dl содержатся архивы исходных кодов всех пакетов данной конфигурации.

Архив buildroot/dl/linux-mcom02*.tar.gz — исходные коды ядра Linux.

external-common/

Внешнее дерево пакетов Buildroot независимых от архитектуры. Дерево оформлено в соответствии с описанием Buildroot br2-external tree.

external-mcom02/

Внешнее дерево пакетов Buildroot для поддержки MCom-02. Содержит mcom02_defconfig и фрагменты.

Makefile

Скрипт сборки Buildroot. Скрипт устанавливает переменную BR2_EXTERNAL с указанием до директорий external-* и вызывает make в директории buildroot. Т.о. при вызове make в корневой директории дистрибутива доступны все стандартные цели Buildroot, например: make help — вывод справки по целям Buildroot.

Результатом сборки Buildroot являются rootfs.tar.gz и инструментальные средства Buildroot SDK для ПК.

Загрузчик U-Boot:

u-boot/

Исходные коды загрузчика U-Boot, описание см. Загрузчик U-Boot.

Makefile.u-boot

Скрипт сборки образов U-Boot всех поддерживаемых модулей. Для сборки U-Boot скрипт использует инструментальные средства Buildroot SDK.

Результатом сборки U-Boot являются образы для прошивки SPI-памяти.

Скрипты сборки в Docker-контейнере:

Dockerfile.*

Файлы конфигурации Docker-образа.

docker-build.sh

Скрипт сборки Docker-образа и сборки дистрибутива в контейнере Docker.

Сборка в «родной» ОС (native)

Перед сборкой в ОС необходимо установить системные пакеты, пакеты брать из соответствующих файлов Dockerfile.* (например centos8stream, ubuntujammy, и т.д.).

Примечание

Распространяемый архив был собран в Docker-контейнере DOCKERFILE=Dockerfile.centos8stream. Примененный файл конфигурации buildroot/.config содержит список пакетов строго для данной среды. В случае смены ОС требуется повторное применение конфигурации docker-build.sh make ..._defconfig .... При запуске make из сети могут скачиваться дополнительные пакеты.

Для сборки Buildroot на базе разных ядер должны использоваться архивы с соответствующими исходными кодами, подробнее см. Получение дистрибутива.

Для сборки Buildroot с ядром 4.4 для любого поддерживаемого модуля необходимо выполнить:

make mcom02_defconfig
make

Для сборки Buildroot с ядром 5.4 для любого поддерживаемого модуля необходимо выполнить:

make mcom02_defconfig FRAGMENTS=linux54
make

Длительность сборки может составлять более 120 минут и зависит от производительности CPU ПК.

Собранные образы доступны в директории buildroot/output/images, описание файлов см. getting-source.

При сборке Buildroot могут быть использованы любые стандартные команды: make source, make <package>-reconfigure, make menuconfig. Подробнее см. официальный Buildroot manual.

Для сборки образов U-Boot (сборку необходимо выполнять после сборки Buildroot):

  1. Выполнить команду для вывода справки по целям скрипта, запомнить цель соответствующую используемому модулю:

    make -f Makefile.u-boot help
    
  2. Выполнить команду для сборки U-Boot. Пример команды сборки загрузчика модуля Салют-ЭЛ24ПМ2 r1.0, r1.1, r1.2:

    make -f Makefile.u-boot salutepm2
    

    Результатом сборки является файл uboot-images/mcom02-salute-el24pm2-r1.0-1.1-om1-r1.2.img.

Сборка в среде Docker

Внимание

В случае если сборка Buildroot была выполнена в контейнере, то повторные запуски сборки (после реконфигурации, изменения исходных кодов пакетов) также должны выполняться в контейнере. Повторный запуск сборки Buildroot в ОС ПК будет завершаться ошибкой. Для очистки генерируемых промежуточных файлов Buildroot необходимо выполнить make clean.

Причины:

  • Рабочая директория Buildroot на файловой системе ОС ПК и на файловой системе контейнера имеет различные пути.

  • При сборке скрипты Buildroot устанавливают абсолютные пути в генерируемых скриптах сборки.

Установить и настройть Docker:

  1. Установить Docker версии 17.07 или выше на ПК согласно инструкции Install Docker Engine on CentOS.

  2. Добавить текущего пользователя в группу docker согласно инструкции Linux post-installation steps for Docker Engine.

  3. Настроить прокси для сервиса Docker (при необходимости) согласно инструкции Daemon proxy configuration.

  4. Настроить прокси для клиента Docker (при необходимости) согласно инструкции Configure the Docker client.

Собрать rootfs в среде Docker:

export DOCKERFILE=Dockerfile.centos8stream
export ENABLE_NETWORK=1  # container is allowed to access network

# for rootfs with Linux 4.x
./docker-build.sh make mcom02_defconfig
./docker-build.sh make

# for rootfs with Linux 5.x
./docker-build.sh make mcom02_defconfig FRAGMENTS=linux54
./docker-build.sh make

Собрать U-Boot:

./docker-build.sh make -f Makefile.u-boot

Средства сборки (Buildroot SDK)

В состав Buildroot входят средства сборки (далее — тулчейны) для процессорных ядер MCom-02:

  • Linux GCC для ARM CPU0. Тулчейн собирается из исходных кодов во время сборки Buildroot.

  • GCC для DSP. Тулчейн портирован компанией ЭЛВИС.

Варианты использования тулчейнов:

  1. Собрать Buildroot и использовать тулчейны, добавляя пути до исполняемых файлов в PATH:

    # ARM toolchain
    export PATH=$PWD/buildroot/output/host/bin:$PATH
    
    # DSP toolchain
    export PATH=$PWD/buildroot/output/host/opt/toolchain-elcore30/bin:$PATH
    
  2. Собрать набор тулчейнов (aka relocatable Buildroot SDK) c использованием встроенного механизма Buildroot (подробнее см. «Using the generated toolchain outside Buildroot» в Buildroot manual).

    Создать архив тулчейнов ..._sdk-buildroot.tag.gz в buildroot/output/images:

    make sdk
    

    Распаковать архив в произвольную директорию, вызвать скрипт для настройки путей (команда настроит переменную PATH):

    source <your/sdk/path>/environment-setup
    

    Примечание

    Предсобранный ..._sdk-buildroot.tar.gz распространяется в составе артефактов MCom-02 Buildroot, см. getting-source.

    Примечание

    Несмотря на префикс «arm» в названии архива, архив содержит тулчейны для всех процессоров.

Для поддержки сборки проектов на базе CMake для каждого из тулчейнов создаётся toolchain.cmake-файл. toolchain.cmake-файлы присутствуют в сборочной директории buildroot/output/host и копируются в архив тулчейнов:

buildroot/output/host/share/buildroot/toolchainfile.cmake
buildroot/output/host/opt/toolchain-elcore30m/share/cmake/elcore30m-toolchain.cmake

Проекты CMake могут собираться с использованием стандартного механизма (см. CMake cross-compiling):

cmake -DCMAKE_TOOLCHAIN_FILE=<absolute-path-to-toolchain.cmake> ...

Идентификатор сборки BUILD_ID

Поддерживается запись в образы уникального идентификатора сборки. Идентификатор задаётся переменной окружения BUILD_ID:

export BUILD_ID=<unique build id>
make ..._defconfig && make

Примеры использования идентификатора:

  • BUILD_ID записывается в /etc/os-release на rootfs.

  • BUILD_ID записывается в образ U-Boot и печатается при загрузке (при сборке U-Boot назначается стандартная переменная U-Boot BUILD_TAG=$BUILD_ID).

BUILD_ID публикуемых образов содержится в manifest.json (см. Получение дистрибутива).

Пример печати в терминал образов собранных с BUILD_ID=34246546ba094b19a21bbc337d1baabc:

...
U-Boot SPL 2020.04.0.1+ (Apr 05 2025 - 00:50:56 +0000)
...
U-Boot 2020.04.0.1+ (Apr 05 2025 - 00:50:56 +0000), Build: 34246546ba094b19a21bbc337d1baabc
...
# cat /etc/os-release
NAME=Buildroot
VERSION=2020.08-58-g93dfd5b4ee
ID=buildroot
VERSION_ID=2020.08
BUILD_ID=34246546ba094b19a21bbc337d1baabc
PRETTY_NAME="Buildroot 2020.08"

Прошивка rootfs на SD/USB/eMMC

Прошивка SD-карты выполняется на ПК:

  1. Определить имя устройства SD-карты на ПК (извлечь SD-карту из считывателя карт ПК, считать список устройств командой ls -la /dev/sd*, установить SD-карту в ПК, повторно считать список устройств, обнаружить новое устройство /dev/sdX).

  2. Записать архив корневой файловой системы на SD-карту с помощью утилиты tar2dev (утилита входит в состав сборки, см. getting-source):

    chmod +x ./tar2dev
    sudo ./tar2dev rootfs.tar.gz /dev/sdX
    
  3. По необходимости донастроить в /boot/extlinux/extlinux.conf SD-карты путь до корневой файловой системы, FDT (имя файла DeviceTree blob (DTB) для загрузки ядра), параметры ядра.

Утилита tar2dev поддерживает опции и переменные для установки раздела root, fdt генерируемые в extlinux.conf, опции установки имени хоста устройства, опции включения/выключения systemd-сервисов, подробнее см. tar2dev -h.

Прошивка SD Салют-ЭЛ24ПМ2 и Салют-ЭЛ24ОМ1

На ПК записать SD-карту:

sudo ./tar2dev -n newhostname rootfs.tar.gz /dev/sdX

Пояснения:

  • При создании раздела на носителе tar2dev определяет PARTUUID, значение будет записано в параметры ядра для монтирования корневой файловой системы.

  • Значение newhostname будет записано в /etc/hostname SD-карты. При загрузке ОС установит имя хоста в соответствующее значение.

Примечание

Опционально, можно переопределить корневую файловую систему переменной окружения ROOT. Переменная должна содержать раздел. Аргумент блочного устройства для tar2dev для записи указывается без раздела:

                         блочное устройство (без раздела)
                                                      vvv
sudo ROOT=/dev/mmcblk1p1 ./tar2dev rootfs.tar.gz /dev/sdX
                      ^^ требуется указывать раздел

Примечание

Для загрузки с SD-карты на Салют-ЭЛ24ОМ1 требуется установить переключатель XP4 в положение uSDcard.

Примечание

Порядок загрузки U-Boot по умолчанию mmc1 mmc0 ... (см. boot_targets) — при загрузке U-Boot начинает поиск extlinux.conf с SD-карты.

Для вывода видео на HDMI в extlinux.conf проверьте наличие параметра ядра video (подробнее см. Драйвер контроллера дисплея vpout-drm):

APPEND console=... root=... video=HDMI:1920x1080

Прошивка USB-накопителя выполняется аналогично SD-карте. Для загрузки с USB требуется изменить порядок носителей в терминале U-Boot (в противном случае extlinux.conf будет считан с eMMC или SD-карты):

setenv boot_targets usb0
saveenv
boot

Прошивка eMMC Салют-ЭЛ24ПМ2

Память eMMC на Салют-ЭЛ24ПМ доступна как стандартное блочное устройство Linux /dev/mmcblk0. eMMC может прошиваться тем же образом, что и SD-карта:

  • загрузить Linux с карты памяти SD;

  • скопировать rootfs.tar.gz для прошивки eMMC и tar2dev на SD-карту;

  • прошить eMMC утилитой tar2dev;

  • обновить корневую файловую систему в extlinux.conf на eMMC.

Пример прошивки eMMC с ПК по SSH «на лету» (rootfs.tar.gz располагается на ПК, tar2dev — на файловой системе ОС модуля):

ssh root@<board-ip> zcat \| tar2dev - /dev/mmcblk0 < rootfs.tar.gz

где <board-ip> — IP-адрес загруженного модуля. IP-адрес можно узнать, выполнив команду ifconfig в терминале модуля.

Примечание

Для загрузки с eMMC на Салют-ЭЛ24ОМ1 требуется извлечь SD-карту из модуля или установить переключатель XP4 в положение Wi-Fi.

Прошивка SD Салют-ЭЛ24Д1 и Салют-ЭЛ24Д2

Записать SD-карту:

sudo ./tar2dev rootfs.tar.gz /dev/sdX

Для модулей Салют-ЭЛ24Д1 и Салют-ЭЛ24Д2 по умолчанию загружается модуль ядра vpoutfb, модуль выполняет запись видео в VPOUT независимо от подключения HDMI-монитора, что создаёт нагрузку на DDR. Для запрета загрузки модуля добавить параметр ядра modprobe в extlinux.conf (в случае необходимости вывода видео параметр video добавлять не требуется, подробнее см. Драйвер фреймбуфера vpoutfb):

APPEND console=... root=... modprobe.blacklist=vpoutfb

Прошивка rootfs на NAND

Для загрузки Linux с ONFI NAND используется файловая система UBIFS. Утилита tar2dev не поддерживает UBIFS: разметка устройства, создание ФС, настройка extlinux.conf выполняется вручную.

  1. В терминале ОС на модуле определить устройство NAND-носителя:

    mtdinfo -a
    

    В выведенном списке выбрать устройство с полем Type: nand. Как правило, это устройство /dev/mtd/by-name/arasan_nfc.

  2. Подготовить разделы NAND и примонтировать их:

    ubiformat --yes /dev/mtd/by-name/arasan_nfc
    ubiattach -p /dev/mtd/by-name/arasan_nfc
    ubimkvol /dev/ubi0 -N boot -s 1024MiB
    
    ROOT_DIR=/tmp/mntroot
    mkdir -p $ROOT_DIR
    mount -t ubifs ubi0:boot $ROOT_DIR
    
  3. Распаковать rootfs.tar.gz и создать extlinux.conf:

    tar -xf rootfs.tar.gz --directory $ROOT_DIR
    
    mkdir -p $ROOT_DIR/boot/extlinux
    
    cat > $ROOT_DIR/boot/extlinux/extlinux.conf <<EOF
    MENU TITLE Boot Menu
    TIMEOUT 20
    DEFAULT default
    
    LABEL default
      MENU LABEL Default (/boot/zImage)
      LINUX /boot/zImage
      FDTDIR /boot/elvees/
      APPEND console=ttyS0,115200n8 earlycon ubi.mtd=0 root=ubi0:boot rootfstype=ubifs rw rootwait
    EOF
    
  4. Отмонтировать раздел:

    sync
    umount $ROOT_DIR
    ubidetach -d 0
    
  5. Установить переменную окружения U-Boot из ОС и перезагрузить:

    fw_setenv boot_targets ubifs0
    reboot
    

Загрузка Linux по TFTP и NFS

Для загрузки Linux по TFTP и корневой файловой системы по NFS с динамическим получением IP-адреса модулю необходимо:

  1. Настроить на ПК серверы TFTP и NFS:

    • В качестве директории для NFS-сервера использовать смонтированный образ с корневой файловой системой rootfs.tar.gz.

    • В корне TFTP-сервера необходимо:

      • Скопировать образ ядра zImage и директорию elvees с dtb-файлами для ядра.

      • Создать директорию pxelinux.cfg и создать в ней файл default-arm-mcom с содержимым:

        TIMEOUT 3
        
        LABEL MCom-02 Buildroot
          MENU LABEL PXE boot
          LINUX /zImage
          FDTDIR /elvees
          APPEND console=ttyS0,115200 root=/dev/nfs rw nfsroot=<ip_address>:/,vers=4,tcp ip=dhcp earlycon
        
      • Изменить <ip_address> в файле default-arm-mcom на IP-адрес NFS-сервера. (не рекомендуется использовать имя хоста NFS-сервера вместо IP-адреса).

      Пример иерархии директорий TFTP-сервера:

      ├── elvees/
      │   └── mcom02-*.dtb
      ├── pxelinux.cfg
      │   └── default-arm-mcom
      └── zImage
      
  2. Включить модуль, дождаться загрузки терминала U-Boot, установить IP-адрес TFTP-сервера:

    setenv serverip <ip_address>
    
  3. Установить переменную boot_targets:

    setenv boot_targets pxe
    
  4. (Опционально) Сохранить переменные окружения:

    saveenv
    
  5. Выполнить команду загрузки:

    boot
    

Прошивка SPI флеш-памяти через BootROM

Прошивка SPI флеш-памяти модуля образом загрузчика U-Boot через BootROM выполняется в случае, если загрузчик повреждён или не прошит. Операция трудозатратна: требуются ручные циклы переключения питания и изменение состояния переключателей BOOT на модуле.

Прошивка выполняется утилитами из пакета MCom-02 flash tools согласно инструкции.

Образы SPI, распространяемые на dist.elvees.com (см. getting-source), сжаты. Перед прошивкой необходимо выполнить декомпрессию файла mcom02-salute-...-uboot.img.gz:

gunzip mcom02-salute-....-uboot.img.gz

Прошивка SPI флеш-памяти из ОС модуля

Для прошивки SPI флеш-памяти из ОС модуля используется утилита mcom02-fw-update. Необходимо скопировать образ U-Boot с ПК на ФС устройства (например, командой scp) и выполнить на устройстве (секция переменных окружения в SPI будет сброшена):

mcom02-fw-update -r <uboot-image>

Предупреждение

Процесс прошивки не должен прерываться.

Прошивка U-Boot без сброса переменных окружения (команда создаст временный образ, заменит в образе секцию переменных окружения текущей секцией из SPI-памяти, запишет созданный образ в SPI-память):

mcom02-fw-update <uboot-image>

Предупреждение

Обновление U-Boot без сброса переменных окружения может привести к ошибке загрузки. Например, прошиваемый образ U-Boot может требовать переменных окружения, которые отсутствуют в прошитой секции переменных окружения.

Подсказка

Для печати и установки переменных окружения загрузчика U-Boot в ОС модуля используются утилиты fw_printenv и fw_setenv соответственно.

Настройка ОС

Настройка сети

По умолчанию ОС настроена на получение сетевого адреса по DHCP. Сетевой менеджер — NetworkManager.

Имя хоста по умолчанию — mcom02. Для изменения имени хоста необходимо отредактировать конфигурационные файлы /etc/hostname и /etc/hosts на корневой файловой системе.

Настройка 6LoWPAN

Сетевой интерфейс 6LoWPAN обеспечивает взаимодействие по протоколу IPv6 через сеть стандарта IEEE 802.15.4. Интерфейс поддерживается на модулях Салют-ЭЛ24Д1.

Параметры сетевого интерфейса задают командой ip. Для автоматической настройки интерфейса используется сервис systemd lowpan.service (выключен по умолчанию).

Для изменения IP, выставляемого сервисом, необходимо изменить файл:

  • external-mcom02/overlay/elvees/usr/lib/systemd/system/lowpan.service в директории исходных кодов на ПК;

  • или /usr/lib/systemd/system/lowpan.service на файловой системе на целевой платформе и перезапустить сервис:

    systemctl daemon-reload
    systemctl restart lowpan
    

Добавление программ в образ SD-карты

Система сборки Buildroot поддерживает добавление в сборку программ и библиотек пользователя. Подробная документация находится в директории buildroot/docs.

Управление выводами GPIO из пространства пользователя

Управление выводами GPIO СнК осуществляется с помощью служебных файлов в /sys/class/gpio (подробнее см. GPIO Sysfs Interface for Userspace).

Управление выводом GPIO может быть недоступно, если он используется драйвером.

В соответствии с руководством пользователя на СнК выводы GPIO делятся на 4 группы: GPIOA, GPIOB, GPIOC, GPIOD. В Linux выводы GPIO обозначаются номерами. Соответствие базовых номеров для каждой группы приведено в таблице Таблица 5. Внутри групп номера идут по порядку. Например, вывод GPIOA5 соответствует номеру 480 + 5 = 485 в Linux.

Таблица 5 Соответствие обозначений выводов GPIO номерам в Linux

Группа

Базовый номер в Linux

GPIOA

480

GPIOB

448

GPIOC

416

GPIOD

384

Запуск модуля

Для запуска модуля необходимо выполнить следующие действия:

  1. Собрать образ SD-карты и образ загрузчика для модуля.

  2. Записать образ SD-карты.

  3. Прошить SPI флеш-память модуля образом загрузчика.

  4. Настроить ОС.

  5. Установить SD-карту в слот MicroSD модуля.

  6. Установить переключатель BOOT модуля в положение, соответствующее загрузке из SPI флеш-памяти (подробнее см. Руководство пользователя на модуль).

  7. Подключить модуль к источнику питания (подробнее см. Руководство пользователя на модуль).

  8. Открыть терминал UART модуля, или установить соединение по протоколу SSH (логин: root, пароль: root).

  9. Выполнить команду uname -a. Считать модуль готовым к использованию при выводе в терминал сообщения:

    Linux mcom02 4.1.41.3 #1 SMP Fri Sep 1 17:08:44 MSK 2017 armv7l GNU/Linux
    

Примечание

systemd инициализирует пользовательское пространство параллельно процедуре инициализации устройств (к примеру, терминал инициализируется до загрузки всех модулей ядра). Это может привести к проблемам запуска, на ранних этапах, приложений, взаимодействующих с устройствами. Рекомендации по ожиданию устройств описаны в systemd-udev-settle.service.

Сообщения при загрузке

Отладочный модуль выводит в терминал UART сообщения о ходе загрузки. Пример вывода в терминал при успешной загрузке:

DDR retention disabled

U-Boot SPL 2020.01.0.1+ (Mar 13 2025 - 00:10:47 +0000)
DDR controllers init started
DDR controller #0 init done
DDR controller #1 init done
DDR frequency: 504 MHz
Trying to boot from SPI


U-Boot 2020.01.0.1+ (Mar 13 2025 - 00:10:47 +0000), Build: ef8e53fb3c8e4d4ba43f5d3539653adc

Reset status: Power-on
CPU:   MCom-compatible
Model: Salute-EL24PM2 r1.0-1.1, Salute-EL24OM1 r1.2
I2C:   ready
DRAM:  2 GiB
NAND:  4096 MiB
MMC:   sdhci0@3800b000: 0, sdhci1@3800d000: 1
Loading Environment from SPI Flash... SF: Detected m25p32 with page size 256 Bytes, erase size 64 KiB, total 4 MiB
OK
In:    serial
Out:   serial
Err:   serial
Net:   eth0: ethernet@3800f000
Hit any key to stop autoboot:  0
switch to partitions #0, OK
mmc1 is current device
Scanning mmc 1:1...
Found /boot/extlinux/extlinux.conf
Retrieving file: /boot/extlinux/extlinux.conf
566 bytes read in 20 ms (27.3 KiB/s)
1:      Default (/boot/zImage)
Retrieving file: /boot/zImage
4509272 bytes read in 224 ms (19.2 MiB/s)
append: console=ttyS0,115200n8 earlycon root=/dev/mmcblk0p1 roottype=ext4 rw rootwait video=HDMI:1920x1080
Retrieving file: /boot/elvees/mcom02-salute-el24pm2-r1.0-1.1-om1-r1.2.dtb
28697 bytes read in 19 ms (1.4 MiB/s)
## Flattened Device Tree blob at 46000000
Booting using the fdt blob at 0x46000000
ERROR: reserving fdt memory region failed (addr=7f800000 size=800000)
Loading Device Tree to 47ff5000, end 47fff018 ... OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.4.237.1 (zuulbot@b56157381a54)
(gcc version 9.3.0 (Buildroot 2020.08-57-g7ee590e8d8) ) #1 SMP Thu Mar 13 00:08:06 UTC 2025
...

Welcome!
mcom02 login: