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