3. Загрузчик U-Boot
3.1. О документе
Данный документ описывает особенности работы загрузчика U-Boot для модулей на базе микросхемы 1892ВА018 (aka СКИФ, Scythian, MCom-03).
3.2. Обзор загрузчика
3.2.1. Возможности
Поддержка модулей на базе MCom-03:
ROCK Pi N10 с установленным процессорным модулем ELV-MC03-SMARC r1.1;
NGFW-CB r1.0 с установленным процессорным модулем ELV-MC03-SMARC r1.1;
conga-SEVAL с установленным процессорным модулем ELV-MC03-SMARC r1.1;
ELV-SMARC-CB r1.0 с установленным процессорным модулем ELV-MC03-SMARC r1.1;
Трастфон-Э ОПН r1.1 с установленным процессорным модулем Трастфон-Э ПМ r1.5;
MCom-03 BuB r1.3.x, r1.5.x (aka IPCom BuB).
Загрузчик исполняется на ARM CPU.
Поддержка загрузки ядра Linux по схеме Generic Distro.
Поддержка загрузки PXE.
Поддержка UART0.
Поддержка GEMAC0, GEMAC1.
Поддержка SDMMC0, SDMMC1.
Поддержка QSPI0, QSPI1.
Поддержка NAND Flash Controller (NFC).
Поддержка USB.
Поддержка переменных окружения в памятях QSPI0, QSPI1.
3.2.2. Исходный код
Git-репозиторий исходного кода загрузчика — https://github.com/elvees/u-boot/tree/mcom03.
Основные файлы поддержки микросхемы:
arch/arm/dts/mcom03*.dts
,board/elvees/
,configs/mcom03*_defconfig
,include/configs/mcom03.h
.
3.2.3. Конфигурация и сборка
Соответствие модулей и конфигураций приведено в таблице Таблица 3.1.
Модуль |
Конфигурация |
---|---|
MCom-03 BuB r1.3.x |
|
ROCK Pi N10 |
|
NGFW-CB r1.0 |
|
conga-SEVAL |
|
ELV-SMARC-CB r1.0 |
|
Трастфон-Э ОПН r1.1 |
|
Результатом сборки исходных кодов загрузчика является образ u-boot.bin
. Образ доступен в
корневой директории загрузчика после завершения сборки.
Для сборки загрузчика на ПК требуется кросс-компилятор aarch64-linux-gnu.
Переменные окружения, влияющие на сборку загрузчика:
CROSS_COMPILE
— префикс кросс-компилятора;PATH
— пути для поиска используемых приложений.
Официальная инструкция по сборке U-Boot https://u-boot.readthedocs.io/en/latest/build/gcc.html.
Пример сборки загрузчика для модуля MCom-03 BuB r1.3.0:
export PATH=<compiler-path>:$PATH
export CROSS_COMPILE=aarch64-linux-
make mcom03bub_defconfig
make -j $(nproc)
3.2.4. Загрузка ядра Linux
U-Boot выполняет загрузку Linux по схеме Generic Distro:
SD-карта (или eMMC, USB-накопитель) содержит файл
extlinux.conf
, образы ядер Linux, DTB-файлы, rootfs.U-Boot перебирает источники загрузки: монтирует файловые системы с носителей подключенных к SD-контроллерам MCom-03, USB-контроллерам, проверяет наличие
extlinux.conf
. Порядок носителей определяется переменнойboot_targets
.U-Boot считывает
extlinux.conf
, загружает образ ядра и DTB в ОЗУ, передаёт управление ядру.
3.2.5. Переменные окружения
Загрузчик поддерживает настройку через переменные окружения.
Во время запуска загрузчик выполняет поиск переменных окружения, сохраненных в QSPI флеш-памяти:
при успешном обнаружении устанавливаются переменные окружения, сохраненные в QSPI флеш-памяти;
в случае ошибки устанавливаются переменные окружения, заданные по умолчанию в коде U-Boot (см. файл
include/configs/mcom03.h
).
3.2.6. Драйвер GEMAC
TBD
3.2.7. Драйвер NAND NFC
TBD
3.2.8. Драйвер QSPI
Драйвер контроллера QSPI реализует ведущее устройство на шине SPI согласно
классу UCLASS_SPI
(см. doc/driver-model/spi-howto.rst
) модели драйверов U-Boot.
Драйвер поддерживает спецификацию ведущего и ведомых устройств на шине SPI согласно
doc/device-tree-bindings/spi/spi-bus.txt
.
Возможности драйвера:
Поддержка до четырех ведомых устройств.
Передача в формате CPHA = 0 (см. флаг
SPI_CPHA
режима).Полярность сигнала синхронизации CPOL = 0 (см. флаг
SPI_CPOL
режима).Сигнал CS в активном состоянии «логический 0» (см. флаг
SPI_CS_HIGH
режима).Передача слов данных старшим битом вперед (см. флаг
SPI_LSB_FIRST
режима).Ведущее устройство на шине SPI (см. флаг
SPI_SLAVE
режима).Пересылка в режиме full-duplex (в режиме NORMAL):
Передача данных по одному выводу на шине SPI (см. флаг
SPI_TX_BYTE
режима).Прием данных по одному выводу на шине SPI (см. флаг
SPI_RX_SLOW
режима).
Пересылка в режиме half-duplex (в режиме QUAD):
Передача данных по 4 линиям на шине SPI (см. флаг
SPI_TX_QUAD
).Прием данных по 4 линиям на шине SPI (см. флаг
SPI_RX_QUAD
).
Ограничения драйвера:
Не поддерживается установка скорости передачи. Частота на шине SPI равна частоте
clk_ext
, которая указывается в свойствеclocks
в device tree. Частотаclk_ext
должна быть не больше частотыclk_axi
на шине AXI.Размер данных должен быть кратен восьми битам.
Передача в формате CPHA = 1 не поддерживается (флаг
SPI_CPHA
режима должен быть равен 0).Полярность сигнала синхронизации CPOL = 1 не поддерживается (флаг
SPI_CPOL
режима должен быть равен 0).Сигнал CS в активном состоянии «логическая 1» не поддерживается (флаг
SPI_CS_HIGH
режима должен быть равен 0).Передача слов данных младшим битом вперед не поддерживается (флаг
SPI_LSB_FIRST
режима должен быть равен 0).Передача/прием данных по одной линии не поддерживается (флаг
SPI_3WIRE
режима должен быть равен 0).Режим loopback не поддерживается (флаг SPI_LOOP режима должен быть равен 0).
Режим ведомого устройства на шине SPI не поддерживается (флаг
SPI_SLAVE
режима должен быть равен 0).Пропуск принятых байтов данных перед преамбулой не поддерживается (флаг
SPI_PREAMBLE
режима должен быть равен 0).Передача данных по двум выводам на шине SPI не поддерживается (флаг
SPI_TX_DUAL
режима должен быть равен 0).Прием данных по двум выводам на шине SPI не поддерживается (флаг
SPI_RX_DUAL
режима должен быть равен 0).
При инициализации драйвер выполняет:
захват и включение тактового сигнала;
вывод контроллера QSPI из состояния сброса;
настройку контактных площадок в подсистеме HSPERIPH для внешних выводов контроллера QSPI1 на микросхеме MCom-03;
начальную настройку контроллера QSPI.
При удалении драйвер выполняет:
выключение тактового сигнала;
ввод контроллера QSPI в состояние сброса.
3.3. Поддержка ELV-MC03-SMARC
Загрузчик и переменные окружения размещаются в QSPI0.
Загрузчик поддерживает нижеперечисленные интерфейсы модуля ELV-MC03-SMARC. Наименования интерфейсов приведены в соответствии со спецификацией SMARC 2.1. В скобках указаны контроллеры MCom-03.
Интерфейс |
Примечание |
---|---|
eMMC (SDMMC0) |
Поддерживается SDR50 |
GBE0, GBE1 |
Ethernet 1 Гбит/с |
SDIO (SDMMC1) |
|
QSPI0 |
Память установлена на SMARC-модуле. Поддерживается только однобитный режим |
SER1 (UART0) |
Консоль MCom-03 |
USB0, USB1, USB2, USB4, USB5 (USB1) |
Только USB 2.0 |
3.3.1. Поддержка ROCK Pi N10
Загрузчик поддерживает следующие интерфейсы модуля ROCK Pi N10:
Интерфейс |
Примечание |
---|---|
Ethernet |
Ethernet 1 Гбит/с (скорости 10 Мб/с и 100 Мб/с не поддерживаются) |
SD-карта |
Поддерживается Default Speed. Подключена к SDMMC1 MCom-03 |
UART0 |
Консоль MCom-03 |
USB Type-A |
USB 2.0 (порт USB 3.0, поддерживает только устройства USB 2.0). Подключен к USB0 MCom-03 |
3.3.2. Поддержка NGFW-CB
Загрузчик поддерживает следующие интерфейсы модуля NGFW-CB:
Интерфейс |
Примечание |
---|---|
Ethernet |
Два порта Ethernet 1 Гбит/с |
SD-карта |
Поддерживается Default Speed. Подключена к SDMMC1 MCom-03 |
UART0 |
Консоль MCom-03 |
USB Type-A |
Только USB 2.0. Подключен к USB1 MCom-03. На разъёме два USB-порта |
3.3.3. Поддержка conga-SEVAL
Загрузчик поддерживает следующие интерфейсы модуля conga-SEVAL:
Интерфейс |
Примечание |
---|---|
Ethernet |
Два порта Ethernet 1 Гбит/с |
Micro USB |
Работает в режиме USB 2.0. Подключен к USB1 MCom-03 через хаб на ELV-MC03-SMARC |
USB Type-A |
Работает в режиме USB 2.0. Подключен к USB1 MCom-03 через хаб на ELV-MC03-SMARC |
USB Type-C |
Работает в режиме USB 3.0. Подключен к USB0 MCom-03 |
SD-карта |
Поддерживается Default Speed. Подключена к SDMMC1 MCom-03 |
UART0 |
Консоль MCom-03 |
3.3.4. Поддержка ELV-SMARC-CB
Загрузчик поддерживает следующие интерфейсы модуля ELV-SMARC-CB:
Интерфейс |
Примечание |
---|---|
Ethernet |
Два порта Ethernet 1 Гбит/с |
DBG UART |
Консоль MCom-03. Подключен к SER1 на ELV-MC03-SMARC. |
Наименования интерфейсов указаны в соответствии с маркировкой на плате.
3.4. Поддержка Трастфон-Э
Загрузчик и переменные окружения размещаются в QSPI0.
3.5. Поддержка MCom-03 BuB
Загрузчик и переменные окружения размещаются в QSPI0.
Загрузчик поддерживает следующие интерфейсы модуля MCom-03 BuB:
Интерфейс |
Примечание |
---|---|
eMMC |
Память eMMC подключена к SDMMC1 MCom-03 |
Ethernet |
Два порта Ethernet 1 Гбит/с |
NAND |
Поддерживается память, подключенная к шине данных [7:0] |
SD-карта |
Поддерживается Default Speed. SD-карта подключена к SDMMC0 MCom-03 |
QSPI0 |
Подключена съемная Flash-память. Поддерживается только однобитный режим |
QSPI1 |
Подключена съемная Flash-память. Поддерживается только однобитный режим |
UART0 |
Консоль MCom-03 |
USB0 |
Только USB 2.0. Подключен к USB0 MCom-03 |
USB1 |
Только USB 2.0. Подключен к USB1 MCom-03 |
3.6. Инструкции по конфигурации
3.6.1. Загрузка Linux по TFTP и NFS
Для загрузки Linux по TFTP и корневой файловой системы по NFS со статическим назначением IP-адреса модулю необходимо:
Настроить на ПК серверы TFTP и NFS:
В качестве директории для NFS-сервера использовать смонтированный образ
rootfs.ext2
.В корне TFTP-сервера необходимо:
Скопировать образ ядра Image.
Создать директорию
pxelinux.cfg
и создать в ней файлdefault-arm-mcom03
с содержимым:TIMEOUT 3 LABEL MCom-03 Buildroot MENU LABEL PXE boot LINUX /Image FDTDIR /elvees APPEND console=ttyS0,115200 root=/dev/nfs rw nfsroot=<ip_address>:/exports,vers=3 ip=dhcp earlycon
Изменить <ip_address> в файле
default-arm-mcom03
на IP-адрес NFS-сервера. (не рекомендуется использовать имя хоста NFS-сервера вместо IP-адреса).
Включить модуль, дождаться загрузки терминала U-Boot, установить IP-адрес TFTP-сервера:
setenv ipaddr <ip_address>
Установить переменную
boot_targets
:setenv boot_targets pxe
(Опционально) Сохранить переменные окружения:
saveenv
Выполнить команду загрузки:
boot