SBL-XIP выполняется на RISC0 из QSPI0 в режиме XIP (загрузка напрямую из QSPI0).
SBL-XIP выполняет:
- копирование кода инициализации DDR из QSPI0 в SPRAM0;
- запуск кода инициализации DDR из SPRAM0 (инициализатор DDR должен вернуть управление SBL после завершения работы);
- копирование DTB из QSPI0 в DDR;
- копирование TF-A из QSPI0 в DDR;
- копирование TEE из QSPI0 в DDR (опционально);
- копирование U-Boot из QSPI0 в DDR;
- запуск TF-A на ARM CPU.
Скрипты сборки проекта позволяют собирать SBL-XIP для нескольких плат за один вызов Cmake.
Для сборки SBL-XIP рецепту сборки должна быть передана CMake-переменная IMAGES_PATH
, содержащая
путь к требуемым для сборки бинарным файлам в том виде, в котором их собирает Buildroot. То есть,
директория должна иметь следующую структуру:
- ./<ddrinit_1>/ddrinit.bin
- ./<ddrinit_2>/ddrinit.bin
- ./uboot-dtb/<dtb_name_1>.dtb
- ./uboot-dtb/<dtb_name_2>.dtb
- ./u-boot.bin
- ./bl31.bin
- ./bl32.bin (необязательно)
Также рецепту сборки должна быть передана переменная DDRINIT_DTB_MAP
, содержащая пары
ddrinit-DTB для включения в образ SBL-XIP. Переменная должна иметь следующий формат:
<ddrinit1>:<dtb1> <ddrinit2>:<dtb2> ...
.
Результатом сборки SBL-XIP является набор образов для всех переданных пар ddrinit и DTB с именами
следующего формата: sbl-xip-<dtb>.bin
.
BootROM последовательно загружает и передаёт управление на образы. Цепочка образов упаковывается в проприетарный формат SBIMG.
SBL-S1 (stage 1) предназначен для начальной настройки микросхемы и должен выполняться первым в цепочке загрузки.
Note
Полная цепочка загрузки посредством BootROM еще не реализована.
SBL-S1 выполняется на RISC0 из SPRAM0. Может быть загружен c помощью BootROM или через JTAG.
SBL-S1 выполняет:
- настройку частот системного коммутатора;
- настройку регистров уровня TOP;
- настройку cлужебной подсистемы;
- настройку WDT0 с таймаутом 3с;
Является частью цепочки загрузки с помощью BootROM.
Отвечает за: * настройку частот и запуск ПО ARM CPU (entry point TF-A BL31); * предоставляет набор сервисов работающих через mailbox:
- cервис управления WDT;
- сервис настройки базовых адресов подсистем/устройств GPU, HSPERIPH, ...;
MDB-скрипты (директория scripts
) предназначены для отладки компонентов SBL-S1, ddrinit,
TF-A, U-Boot и запуска Linux через отладчик MC-USB-JTAG (отладчик работает через RISC0).
Скрипты последовательно загружают образы и передаёт им управление. Алгоритм исполнения см. в комментариях к скриптам.
В проекте включаемые заголовки разделены на группы. Группы разделены пустыми строками. Внутри групп заголовки располагаются в алфавитном порядке. Все заголовочные файлы проекта должны быть указаны без использования псевдонимов каталогов UNIX . (текущий каталог) или .. (родительский каталог).
Порядок группировки:
- Стандартные/системные заголовки C, обрамляемые угловыми скобками.
- Заголовки проекта, обрамленные угловыми скобками и выраженные через путь относительно корня проекта. Путь к корню проекта передается в скриптах сборки через флаг -I.
- Локальные заголовки, обрамленные кавычками.
При указании пути без ссылок на верхние директории используются кавычки (#include "header.h" - разрешено, #include <subdir/header.h> - запрещено).
Общие правила оформления комментариев:
- для однострочных комментариев используется стиль "C++-style";
- для многострочных комментариев используется стиль "C-style" и обрамление
с помощью
/**
и*/
;
Правила оформления описаний функций:
- комментарии с описанием функций состоят из обязательной секции "@brief" и опциональных секций "@param" и "@return";
- правила оформления секции "@brief":
- в секции содержится краткое описание поведения функции или ее предназначение;
- секция начинается с заглавной буквы и заканчивается без знака точки;
- если секция состоит из более чем одного предложения, то все предложения должны заканчиваться знаком точки;
- правила оформления секций "@param":
- в секциях находятся имена параметров и их краткие описания;
- описания параметров в секциях начинаются с заглавной буквы и заканчиваются без знака точки;
- если описания параметров в секциях состоят из более чем одного предложения, то все предложения должны заканчиваться знаком точки;
- описания параметров в секциях отделяются от имен параметров символом "-";
- символы "-" в секциях выровнены по правому краю, но описания после знаков "-" выровнены по левому краю относительно символов "-";
- правила оформления секции "@return":
- в секции находятся значения, которые могут быть получены на выходе из функции, и описания причин полученных значений;
- описания значений в секции начинаются с заглавной буквы и заканчиваются без знака точки;
- если функция может вернуть больше чем одно значение, описания в секции разделены запятыми;
- возвращаемые значения выровнены по левому краю с поправкой на знак;
- описания в секции отделяются от возвращаемых значений символом "-";
- символы "-" в секции выровнены по правому краю, но описания после знаков "-" выровнены по левому краю относительно символов "-";
Примеры комментариев:
// One line comment /** * The first line comment. * The second line comment. */ /** * @brief The function description * * @param var1 - Description of var1 function parameter * @param var205 - The first line of var2 function parameter description. * The second line of var2 function parameter description. * * @return 0 - Description of the first function return value, * -100 - Description of the second function return value */