1. Дистрибутив Buildroot
1.1. Получение дистрибутива
Дистрибутив распространяется на странице https://dist.elvees.com/mcom03/buildroot/. Пример иерархии директорий 2023.03:
└── rockpi
├── graphs/
├── images/
├── git-info.json
├── manifest.json
└── mcom03-defconfig-src.tar.gz
В поддиректориях выкладываются архивы исходных кодов и образы для поддерживаемых модулей MCom-03 BuB, ROCK Pi N10, и т.п.
В файле git-info.json
перечислены SHA-версии пакетов Buildroot.
В директории images
хранятся предсобранные образы и архивы:
sbl/sbl.bin
— для прошивки QSPI0,rootfs.tar.gz
— для прошивки SD-карты или eMMC,aarch64-buildroot-linux-gnu_sdk-buildroot.tar.gz
— комплект тулчейнов ARM, MIPS, DSP (подробнее см. toolchain).
Файл images/tar2dev
используется для прошивки SD-карты, см. howto-flash-sd.
Для сборки необходимо скачать содержимое директории (например rockpi
), распаковать
архив с исходными кодами *-defconfig-src.tar.gz
, перейти в распакованную
директорию:
tar -xf ..-defconfig-src.tag.gz
cd ..-defconfig-src
Важно
Путь до директории, в которой выполняется распаковка и сборка, не должен содержать символов кириллицы и пробелов.
Примечание
Архив *-defconfig.src
подготовлен командами:
make mcom03_defconfig FRAGMENTS=<someboard>
make source
tar -czf ...defconfig-src.tag.gz ...
1.2. Сборка в «родной» ОС (native)
Перед сборкой необходимо установить системные пакеты, пакеты брать из соответствующих
файлов Dockerfile.*
(например centos8stream, ubuntujammy, и т.д.).
Примечание
Распространяемый архив был собран в Docker-контейнере DOCKERFILE=Dockerfile.centos8stream
.
Примененный файл конфигурации buildroot/.config
содержит список пакетов строго для данной
среды. В случае смены ОС требуется повторное применение конфигурации docker-build.sh make
..._defconfig ...
. При запуске make
из сети могут скачиваться дополнительные пакеты.
Для сборки Buildroot для ROCK Pi N10 с ядром 4.19 необходимо выполнить:
make mcom03_defconfig FRAGMENTS=rockpi
make
Для сборки Buildroot для ROCK Pi N10 c ядром 5.10 необходимо выполнить:
sed -i 's/mcom03-5.10.y/fc54cc45f63b3a03ea0d84815417c9019f091b6c/' \
external-mcom03/fragments/linux510.fragment
make mcom03_defconfig FRAGMENTS=rockpi:linux510
make
Для сборки Buildroot для ELV-SMARC-CB необходимо выполнить:
make mcom03_defconfig FRAGMENTS=elvsmarccb
make
Собранные образы доступны в директории buildroot/output/images
, описание файлов см.
getting-source.
Поддерживаемые фрагменты расположены в директории external-mcom03/fragments
.
При сборке Buildroot могут быть использованы любые стандартные команды: make source
,
make <package>-reconfigure
, make menuconfig
. Подробнее см. официальный Buildroot manual.
1.3. Сборка в среде Docker
Установите и настройте Docker: добавьте пользователя в группу docker, настройте прокси для клиента и сервера.
Собрать в среде Docker:
export DOCKERFILE=Dockerfile.centos8stream
export ENABLE_NETWORK=1 # container is allowed to access network
./docker-build.sh make mcom03_defconfig FRAGMENTS=rockpi
./docker-build.sh make
1.4. Средства сборки
В состав Buildroot входят средства сборки (далее — тулчейны) для процессорных ядер MCom-03:
baremetal mipsel-elvees-elf32 на базе GCC для MIPS32 RISC0. Тулчейн портирован компанией ЭЛВИС. Тулчейн содержит обходы ошибок процессора.
Использовать другие тулчейны для MIPS32 RISC0 не рекомендуется.
Linux GCC для ARM CPU0. Тулчейн собирается из исходных кодов во время сборки Buildroot.
LLVM Clang для DSP. Тулчейн портирован компанией ЭЛВИС.
Варианты использования тулчейнов:
Собрать Buildroot и использовать тулчейны, добавляя пути до исполняемых файлов в PATH:
# ARM toolchain export PATH=$PWD/buildroot/output/host/bin:$PATH # MIPS toolchain export PATH=$PWD/buildroot/output/host/opt/toolchain-mipsel-elvees-elf32/bin:$PATH # DSP toolchain export PATH=$PWD/buildroot/output/host/opt/toolchain-elcore50/bin:$PATH
Собрать набор тулчейнов (aka relocatable Buildroot SDK) c использованием встроенного механизма Buildroot (подробнее см. «Using the generated toolchain outside Buildroot» в Buildroot manual).
Создать архив тулчейнов
..._sdk-buildrot.tag.gz
вbuildroot/output/images
:make sdk
Распаковать архив в произвольную директорию, вызвать скрипт для настройки путей (команда настроит переменную PATH):
source <your/sdk/path>/environment-setup
Примечание
Предсобранный
..._sdk-buildroot.tar.gz
распространяется в составе артефактов MCom-03 Buildroot, см. getting-source.Примечание
Несмотря на префикс «aarch64» в названии архива, архив содержит тулчейны для всех процессоров.
Для поддержки сборки проектов на базе CMake для каждого из тулчейнов создаётся toolchain.cmake-файл.
toolchain.cmake-файлы присутствуют в сборочной директории buildroot/output/host
и копируются в
архив тулчейнов:
buildroot/output/host/share/buildroot/toolchainfile.cmake
buildroot/output/host/opt/toolchain-mipsel-elvees-elf32/share/cmake/toolchain.cmake
buildroot/output/host/opt/toolchain-elcore50/share/cmake/elcore50-toolchain.cmake
Проекты CMake могут собираться с использованием стандартного механизма (см. CMake cross-compiling):
cmake -DCMAKE_TOOLCHAIN_FILE=<absolute-path-to-toolchain.cmake> ...
1.5. Сборка произвольных версий пакетов
Сборка с произвольной версией пакета выполняется согласно стандартному
механизму override file local.mk
, см. «Using Buildroot during development» в главе
https://buildroot.org/downloads/manual/manual.html#_advanced_usage.
Важно
Выпуск MCom-03 Buildroot содержит слепок коммитов различных репозиториев. SHA коммитов
репозиториев перечислены в файле git-info.json
(см. getting-source). Собираемость и
работоспособность гарантируется только для указанных SHA.
Для сборки произвольных версий пакетов mcom03-sbl, ddrinit, U-Boot, Linux необходимо:
Склонировать в произвольную директорию перечисленные выше компоненты (U-Boot, Linux, mcom03-sbl), выгрузить необходимую версию:
git clone https://github.com/elvees/... git checkout ...
Создать файл
buildroot/local.mk
. В файле добавить строки с путями до склонированных репозиториев:ARM_TRUSTED_FIRMWARE_OVERRIDE_SRCDIR = <abspath to local TF-A> DDRINIT_OVERRIDE_SRCDIR = <abspath to local ddrinit> LINUX_OVERRIDE_SRCDIR = <abspath to local Linux> MCOM03_SBL_OVERRIDE_SRCDIR = <abspath to local mcom03-sbl> UBOOT_OVERRIDE_SRCDIR = <abspath to local U-Boot>
Запустить сборку:
make # or to build in docker ENABLE_NETWORK=1 ./docker-build.sh make
1.6. Обзор загрузки ОС (boot flow)
MCom-03 запускается в режиме QSPI0 XIP. Память QSPI0 содержит образы SBL, ddrinit, TF-A, U-Boot.
SD-карта содержит ядро, DTB, extlinux.conf
.
U-Boot поддерживает загрузку Linux по схеме Generic Distro с использованием файла
extlinux.conf
:
U-Boot перебирает источники загрузки SDMMC0, SDMMC1, USB (порядок может отличаться в зависимости от используемой версии U-Boot),
U-Boot запускает ядро в соответствии с первым обнаруженным
extlinux.conf
(копирует DTB и ядро в ОЗУ, передаёт управление ядру).
Последовательность загрузки приведена на диаграмме:
Последовательность загрузки Linux (в скобках указан источник исполнения)
1.7. Запуск ОС на ROCK Pi N10
Для запуска ОС необходимо:
Установить джампер режима Boot 0 (QSPI0).
Подключить переходник USB-to-UART к UART2 модуля (пример подключения), подключить переходник к ПК.
Подключить HDMI-дисплей к модулю.
Подключить блок питания USB type C.
На ПК открыть терминал, залогиниться.
Если на HDMI-дисплей не выводится видео, выполнить перезапуск HDMI, см. Поддержка HDMI.
1.7.1. Поддержка HDMI
При включении/сбросе СнК видео на HDMI может не выводиться или выводиться испорченным.
Для перезапуска HDMI требуется перезапуск процессора или перенастройка PLL СнК. Перенастройка PLL
выполняется скриптом mcom03-hdmi-setup.sh
(установлен в ОС).
1.8. Прошивка SD-карты
Прошивка SD-карты выполняется на ПК или на устройстве (при условии загрузки c eMMC):
Определить имя устройства SD-карты на ПК (извлечь SD-карту из считывателя карт ПЭВМ, считать список устройств командой
ls -la /dev/sd*
, установить SD-карту в ПК, повторно считать список устройств, обнаружить новое устройство/dev/sdX
).Записать архив корневой файловой системы на SD-карту с помощью утилиты
tar2dev
(утилита входит в состав сборки, см. getting-source):chmod +x ./tar2dev sudo ./tar2dev mcom03-altlinux-rootfs-....tar.gz /dev/sdX
Для загрузки с SD-карты в
/boot/extlinux.conf
SD-карты требуется изменить путь до корневой файловой системы и FDT.
Утилита tar2dev
поддерживает опции и переменные для установки раздела root, fdt
в extlinux.conf
, установки имени хоста устройства, подробнее см. tar2dev -h
.
Примеры:
Записать SD-карту для модуля ROCK Pi N10 (загрузка будет выполняться с SD-карты):
ROOT=/dev/mmcblk1p1 tar2dev -n newhostname rootfs.tar.gz /dev/sdX
Записать SD-карту для модуля ТрастФон_ПМ (загрузка будет выполняться с SD-карты):
ROOT=/dev/sda1 tar2dev -n newhostname rootfs.tar.gz /dev/sdX
1.9. Прошивка eMMC
Память eMMC на ELV-MC03-SMARC доступна как стандартное блочное устройство Linux
/dev/mmcblk0p2
. eMMC может прошиваться тем же образом, что и SD-карта.
Для прошивки достаточно:
загрузить Linux с карты памяти SD;
скопировать
rootfs.tar.gz
для прошивки eMMC иtar2dev
на SD-карту;прошить eMMC утилитой
tar2dev
(см. howto-flash-sd);обновить корневую файловую систему в
extlinux.conf
на eMMC.
1.10. Прошивка QSPI-памяти
Прошивка QSPI-памяти выполняется с ПК. Python-пакет утилит для прошивки QSPI-памятей mcom03-flash-tools и инструкция по прошивке расположены по адресу https://github.com/elvees/mcom03-flash-tools.
Образ прошивки QSPI-памяти указан в getting-source.