====== Что можно сделать с rkbin? ======
===== Установка базовых параметров системы =====
# get ddr params from DDR blob
./tools/ddrbin_tool rk3568 -g params.txt bin/rk35/rk3568_ddr_1560MHz_v1.21.bin
Получить **текстовый конфигурационный файл** с базовыми параметрами параметрами системы (настройки памяти DDR, настройки системной консоли).
# Write params back to DDR blob
./tools/ddrbin_tool rk3568 rhos.txt bin/rk35/rk3568_ddr_1560MHz_v1.21.bin
Записать конфигурационные данные из **текстового файла** в двоичный.
Эти команды могут быть использованы как для изменения скорости системной консоли (по умолчанию 1500000 бод или 1,5мегабода) так и для указания параметров использованных микросхем памяти в случае создания собственного процессорного модуля с данным чипом.
Параметры в конфигурационном файле, связанные с системной консолью интуитивно понятны
uart id=2
uart iomux=0
uart baudrate=115200
* id - номер UART'а в соответствии с документацией
* iomux - раскладка по пинам чипа
* baudrate - скорость. Остальные параметры всегда 8 бит данных, без проверки четности, 1 стоп-бит
===== Подготовка загрузчика (TPL) =====
# Prepare U-Boot TPL
./tools/boot_merger RKBOOT/RK3568MINIALL.ini
Загрузчик содержит файл настроек из предыдущего абзаца и закрытый двоичный загрузчик, реализующий базовые операции по загрузке и обновлению системы, выпущенные RockChip'ом. Штука необходимая на первом этапе создания системы, когда кроме оперативной памяти и основных интерфейсов накопителей (как правило SPI, MMC, USB) не ничего другого.
===== Подготовка OP-TEE в виде ELF файла =====
RockChip поставляет предварительно собранную редакцию OP-TEE в виде двоичного файла. Современный U-Boot (по состоянию на май 2024 года) требует ее в виде ELF'а. Проблема решается следующим образом
# Prepare TEE elf image for U-Boot
aarch64-linux-gnu-ld -T tee.ld -o tee.elf
Содержимое файла tee.ld
##############################################################################
# Simplest convert Rockchip TEE (bl32) binary image into ELF format
#
# Just place this file as tee.ld into rkbin directory, then run
# $ aarch64-linux-gnu-ld -T tee.ld -o tee.elf
# Then build vanilla u-boot with TEE=/tee.elf
start_addr = 0x08400000;
TARGET(binary)
INPUT( ./bin/rk35/rk3568_bl32_v2.11.bin )
OUTPUT_FORMAT(elf64-littleaarch64)
ENTRY(start_addr)
MEMORY
{
RAM (rwx) : org = 0x08400000, len = 1M
}
SECTIONS
{
.data : {
./bin/rk35/rk3568_bl32_v2.11.bin
} > RAM
}
Используем простой трюк - пишем линкер-скрипт, который разместит данный двоичный файл по фиксированному адресу и назначит ночку входа. После это с помощью ликера из комплекта кросс-компиляции собираем ELF-файл.