Содержание

Ванильный U-Boot для плат на базе RK3568

Общие сведения

Использование вендорского варианта загрузчика не всегда допустимо и приветствуется. Для сборки ванильного необходимо установить ряд переменных окружения

export BL31=../rkbin/bin/rk35/rk3568_bl31_v1.44.elf
export TEE=../rkbin/tee.elf
export ROCKCHIP_TPL=../rkbin/bin/rk35/rk3568_ddr_1560MHz_v1.21.bin
export CROSS_COMPILE=aarch64-linux-gnu-

Назначение переменных следующее:

На выходе получаем u-boot-rockchip.bin, который необходимо записать на SD-карту или eMMC со смещением в 64 сектора, например с использованием rkdevelop. Например, с помощью такого скрипта

#!/bin/bash

echo Bootloader
./../rkbin/tools/rkdeveloptool db ./../rkbin/rk356x_spl_loader_v1.21.113.bin
echo U-Boot image
sleep 1
./../rkbin/tools/rkdeveloptool wl 64 u-boot-rockchip.bin
echo Reset board
sleep 1
./../rkbin/tools/rkdeveloptool rd

Обратите внимание, чип должен быть переведен в MaskRom режим (см bootmode), и в этом режиме используется предварительно созданный SPL загрузчик (см rkbin]).

Особые замечания про сборку с поддержкой OpTee

По невыясненным причинам (возможно баг в U-Boot версии 2024.10 и более ранних) ядро не хочет работать с рядом операционных систем. В частности в Debian Lunux (bookworm). В какой-то момент срабатывает защитв в OpTee и система перезагружается. Предположительно это происходит по причине достапа ядра Linux к регионам паямяти, из которых работает OpTee. Коммит https://github.com/MinimumLaw/ravion-kernel/commit/6493a49c8bd3608a20378765baec950c69975656 в первом приближении решает указанную проблему.

Требуется дальнейшая работа над данной проблематикой.