Содержание

Что можно сделать с 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

Подготовка загрузчика (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=<you_path>/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-файл.