1. Дистрибутив Buildroot
1.1. Получение дистрибутива
Дистрибутив распространяется на странице https://dist.elvees.com/mcom03/buildroot/. Пример иерархии директорий 20220420:
└── 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.bin
— для прошивки QSPI0,rootfs.tar.gz
— для прошивки SD-карты или eMMC,aarch64-buildroot-linux-gnu_sdk-buildroot.tar.gz
— комлпект тулчейнов ARM, MIPS, DSP, комплект создан командойmake sdk
, подробнее см «Build an external toolchain with Buildroot» в Buildroot manual.
Файл 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.*
(например centos7, ubuntufocal, и т.д.).
Примечание
Распространяемый архив был собран в Docker-контейнере DOCKERFILE=Dockerfile.centos7
.
Примененный файл конфигурации buildroot/.config
содержит список пакетов строго для данной среды. В случае смены ОС требуется повторное применение конфигурации
docker-build.sh make ..._defconfig ...
. При запуске make
из сети могут быть
скачиваться дополнительные пакеты.
Для сборки Buildroot для ROCK Pi N10 необходимо выполнить:
make mcom03_defconfig FRAGMENTS=rockpi
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.centos7
export ENABLE_NETWORK=1 # container is allowed to access network
./docker-build.sh make mcom03_defconfig FRAGMENTS=rockpi
./docker-build.sh make
1.4. Сборка произвольных версий пакетов
Сборка с произвольной версией пакета выполняется согласно стандартному
механизму override file local.mk
, см. «Using Buildroot during development» в главе
https://buildroot.org/downloads/manual/manual.html#_advanced_usage.
Для сборки произвольных версий пакетов 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.5. Обзор загрузки ОС (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 и ядро в ОЗУ, передаёт управление ядру).
Последовательность загрузки приведена на диаграмме:
1.6. Запуск ОС на ROCK Pi N10
Для запуска ОС необходимо:
Установить джампер режима Boot 0 (QSPI0).
Подключить переходник USB-to-UART к UART2 модуля (пример подключения), подключить переходник к ПК.
Подключить HDMI-дисплей к модулю.
Подключить блок питания USB type C.
На ПК открыть терминал, залогиниться.
Если на HDMI-дисплей не выводится видео, выполнить перезапуск HDMI, см. Поддержка HDMI.
1.6.1. Поддержка HDMI
При включении/сбросе СнК видео на HDMI может не выводиться или выводиться испорченным.
Для перезапуска HDMI требуется перезапуск процессора или перенастройка PLL СнК. Перенастройка PLL
выполняется скриптом mcom03-hdmi-setup.sh
(установлен в ОС).
1.7. Прошивка SD-карты
Прошивка SD-карты выполняется на ПК или на устройстве (при условии загрузки c eMMC):
Определить имя устройства SD-карты на ПК (извлечь SD-карту из считывателя карт ПЭВМ, считать список устройств командой
ls -la /dev/sd*
, установить SD-карту в ПК, повторно считать список устройств, обнаружить новое устройство/dev/sdX
).Записать архив корневой файловой системы на SD-карту с помощью утилиты
tar2dev
(утилита входит в состав сборки, см. getting-source):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.8. Прошивка 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.9. Прошивка QSPI-памяти
Прошивка QSPI-памяти выполняется с ПК. Python-пакет утилит для прошивки QSPI-памятей mcom03-flash-tools и инструкция по прошивке расположены по адресу https://github.com/elvees/mcom03-flash-tools.
Образ прошивки QSPI-памяти указан в getting-source.