Дистрибутив 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
Подсистема |
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) |
✓ |
✓ |
Подсистема |
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 |
✓ |
✓ |
Подсистема |
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):
Выполнить команду для вывода справки по целям скрипта, запомнить цель соответствующую используемому модулю:
make -f Makefile.u-boot help
Выполнить команду для сборки 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:
Установить Docker версии 17.07 или выше на ПК согласно инструкции Install Docker Engine on CentOS.
Добавить текущего пользователя в группу docker согласно инструкции Linux post-installation steps for Docker Engine.
Настроить прокси для сервиса Docker (при необходимости) согласно инструкции Daemon proxy configuration.
Настроить прокси для клиента 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. Тулчейн портирован компанией ЭЛВИС.
Варианты использования тулчейнов:
Собрать 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
Собрать набор тулчейнов (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-карты выполняется на ПК:
Определить имя устройства SD-карты на ПК (извлечь SD-карту из считывателя карт ПК, считать список устройств командой
ls -la /dev/sd*, установить SD-карту в ПК, повторно считать список устройств, обнаружить новое устройство/dev/sdX).Записать архив корневой файловой системы на SD-карту с помощью утилиты
tar2dev(утилита входит в состав сборки, см. getting-source):chmod +x ./tar2dev sudo ./tar2dev rootfs.tar.gz /dev/sdX
По необходимости донастроить в
/boot/extlinux/extlinux.confSD-карты путь до корневой файловой системы, 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/hostnameSD-карты. При загрузке ОС установит имя хоста в соответствующее значение.
Примечание
Опционально, можно переопределить корневую файловую систему переменной окружения
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 выполняется вручную.
В терминале ОС на модуле определить устройство NAND-носителя:
mtdinfo -a
В выведенном списке выбрать устройство с полем
Type: nand. Как правило, это устройство/dev/mtd/by-name/arasan_nfc.Подготовить разделы 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
Распаковать
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
Отмонтировать раздел:
sync umount $ROOT_DIR ubidetach -d 0
Установить переменную окружения U-Boot из ОС и перезагрузить:
fw_setenv boot_targets ubifs0 reboot
Загрузка Linux по TFTP и NFS
Для загрузки Linux по TFTP и корневой файловой системы по NFS с динамическим получением IP-адреса модулю необходимо:
Настроить на ПК серверы 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
Включить модуль, дождаться загрузки терминала U-Boot, установить IP-адрес TFTP-сервера:
setenv serverip <ip_address>
Установить переменную
boot_targets:setenv boot_targets pxe
(Опционально) Сохранить переменные окружения:
saveenv
Выполнить команду загрузки:
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.
Группа |
Базовый номер в Linux |
|---|---|
GPIOA |
480 |
GPIOB |
448 |
GPIOC |
416 |
GPIOD |
384 |
Запуск модуля
Для запуска модуля необходимо выполнить следующие действия:
Установить SD-карту в слот MicroSD модуля.
Установить переключатель BOOT модуля в положение, соответствующее загрузке из SPI флеш-памяти (подробнее см. Руководство пользователя на модуль).
Подключить модуль к источнику питания (подробнее см. Руководство пользователя на модуль).
Открыть терминал UART модуля, или установить соединение по протоколу SSH (логин:
root, пароль:root).Выполнить команду
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: