Skip to the content.

1. Introduction

本文档介绍了Rockchip支持的板卡信息及其使用步骤。

参考 U-boot rockchip

2. Rockchip boards

Rockchip是平板电脑和PC、流媒体电视盒、AI音频和视觉、物联网硬件的SoC解决方案提供商。

主线 U-Boot 支持多种 Rockchip SoC 及其相关板。

Rockchip主线支持主板列表:

3. Building

3.1 TF-A

构建 ARM64 Rockchip SoC 映像时需要 TF-A。

构建 TF-A:

git clone --depth 1 https://github.com/ARM-software/arm-trusted-firmware.git
cd arm-trusted-firmware
make realclean
make CROSS_COMPILE=aarch64-linux-gnu- PLAT=rk3399
cd ..

指定 PLAT= 以及构建 TF-A 所需的 Rockchip 平台。

对于 TF-A 代码未开源的 SoC,请使用 Rockchip 提供的 BL31 二进制文件:

git clone --depth 1 https://github.com/rockchip-linux/rkbin

3.2 TPL

对于某些 SoC,U-Boot 源缺乏对初始化 DRAM 的支持。 在这些情况下,要按照以下步骤获得功能齐全的映像: 4.1 使用 U-Boot TPL/SPL 打包映像,请在构建 U-Boot 时使用 Rockchip rkbin 存储库提供的 DDR 二进制文件作为 ROCKCHIP_TPL。 否则,请按照 4.2 使用Rockchip miniloader打包镜像

3.3 U-Boot

git clone --depth 1 https://source.denx.de/u-boot/u-boot.git
cd u-boot

要构建 px30 板:

export BL31=../arm-trusted-firmware/build/px30/release/bl31/bl31.elf
make evb-px30_defconfig
make CROSS_COMPILE=aarch64-linux-gnu-

构建 rk3066 板:

make mk808_defconfig
make CROSS_COMPILE=arm-linux-gnueabihf-

构建 rk3288 板:

make evb-rk3288_defconfig
make CROSS_COMPILE=arm-linux-gnueabihf-

构建 rk3308 板:

export BL31=../rkbin/bin/rk33/rk3308_bl31_v2.26.elf
export ROCKCHIP_TPL=../rkbin/bin/rk33/rk3308_ddr_589MHz_uartX_mY_v2.07.bin
make evb-rk3308_defconfig
make CROSS_COMPILE=aarch64-linux-gnu-

构建 rk3328 板:

export BL31=../arm-trusted-firmware/build/rk3328/release/bl31/bl31.elf
make evb-rk3328_defconfig
make CROSS_COMPILE=aarch64-linux-gnu-

构建 rk3368 板:

export BL31=../arm-trusted-firmware/build/rk3368/release/bl31/bl31.elf
make evb-px5_defconfig
make CROSS_COMPILE=aarch64-linux-gnu-

要构建 rk3399 板:

export BL31=../arm-trusted-firmware/build/rk3399/release/bl31/bl31.elf
make evb-rk3399_defconfig
make CROSS_COMPILE=aarch64-linux-gnu-

构建 rk3568 板:

export BL31=../arm-trusted-firmware/build/rk3568/release/bl31/bl31.elf
[or]export BL31=../rkbin/bin/rk35/rk3568_bl31_v1.34.elf
export ROCKCHIP_TPL=../rkbin/bin/rk35/rk3568_ddr_1560MHz_v1.13.bin
make evb-rk3568_defconfig
make CROSS_COMPILE=aarch64-linux-gnu-

构建 rk3588 板:

export BL31=../rkbin/bin/rk35/rk3588_bl31_v1.33.elf
export ROCKCHIP_TPL=../rkbin/bin/rk35/rk3588_ddr_lp4_2112MHz_lp5_2736MHz_v1.09.bin
make evb-rk3588_defconfig
make CROSS_COMPILE=aarch64-linux-gnu-

4. Flashing

4.1 Package the image with U-Boot TPL/SPL

4.1.1 SD Card

所有 Rockchip 平台(不使用 SPL 的 rk3128 除外)现在都支持使用 binman 的单个启动映像。

要写入从 SD 卡启动的映像(假设为 /dev/sda):

sudo dd if=u-boot-rockchip.bin of=/dev/sda seek=64
sync

4.1.2 eMMC

在大多数 Rockchip 平台中,eMMC 闪存将在 mmc0 上进行探测。

创建 $partitions 中定义的 GPT 分区布局:

mmc dev 0
gpt write mmc 0 $partitions

连接主机和目标设备之间的 USB-OTG 电缆。

使用以下命令在目标上启动 fastboot:

fastboot 0

成功连接小工具后,主机将显示 USB 设备:

lsusb
# Bus 001 Device 020: ID 2207:330c Fuzhou Rockchip Electronics Company RK3399 in Mask ROM mode

对闪存进行编程:

sudo fastboot -i 0x2207 flash loader1 idbloader.img
sudo fastboot -i 0x2207 flash loader2 u-boot.itb

注意:

对于 Rockchip 32 位平台,U-Boot 正确的映像是 u-boot-dtb.img

4.1.3 SPI

将u-boot-rockchip-spi.bin写入SPI flash的偏移0处。

将 u-boot-rockchip-spi.bin 复制到 SD 卡并从 SD 启动:

sf probe
load mmc 1:1 $kernel_addr_r u-boot-rockchip-spi.bin
sf update $fileaddr 0 $filesize

4.2 Package the image with Rockchip miniloader

Rockchip miniloader 的镜像包需要 rkbin [1]。

cd ..
git clone --depth 1 https://github.com/rockchip-linux/rkbin

创建 idbloader.img:

cd u-boot
./tools/mkimage -n px30 -T rksd -d ../rkbin/bin/rk33/px30_ddr_333MHz_v1.16.bin idbloader.img
cat ../rkbin/bin/rk33/px30_miniloader_v1.31.bin >> idbloader.img
sudo dd if=idbloader.img of=/dev/sda seek=64

创建 trust.img:

cd ../rkbin
./tools/trust_merger RKTRUST/PX30TRUST.ini
sudo dd if=trust.img of=/dev/sda seek=24576

创建 uboot.img [2]:

cd ../u-boot
../rkbin/tools/loaderimage --pack --uboot u-boot-dtb.bin uboot.img 0x200000
sudo dd if=uboot.img of=/dev/sda seek=16384

注意:

  1. rkbin 二进制文件会定期更新,因此建议使用最新版本。
  2. 0x200000 是加载地址,并且是某些平台的选项。

4.3 Package the RK3066 image with U-Boot TPL/SPL on NAND

与后来的 SoC 型号不同,rk3066 BootROM 不支持 SDMMC。 如果所有其他启动选项均失败,则它会在 USB OTG 端口上进入 BootROM 模式。 该方法通过 U-Boot 将 TPL/SPL 加载到 NAND 上,将内核加载到 SD 卡上。

4.3.1 SD Card

U-Boot 需要 GPT 分区映射和 SD 卡上包含文件的引导目录结构。

Partition Map for MMC device 0  --   Partition Type: EFI
Part     Start LBA         End LBA           Name
1        0x00000040        0x00001f7f        "loader1"
2        0x00004000        0x00005fff        "loader2"
3        0x00006000        0x00007fff        "trust"
4        0x00008000        0x0003ffff        "boot"
5        0x00040000        0x00ed7fde        "rootfs"

确保为引导分区设置了引导和 esp 标志。 RK3066 未使用 Loader1 分区。

Boot 分区:

extlinux
  extlinux.conf

zImage
rk3066a-mk808.dtb

将 U-Boot 映像写入 SD 卡(假设为 /dev/sda):

sudo dd if=u-boot-dtb.img of=/dev/sda seek=16384
sync

4.3.2 NAND

将设备置于 BootROM 模式:

如果变砖并且没有显示 BootROM 模式,则用针连接 NAND 闪存的引脚 8 和 9,同时重新连接到 PC 的 USB OTG 端口。

显示已连接的设备:

lsusb
# Bus 001 Device 004: ID 2207:300a Fuzhou Rockchip Electronics Company RK3066 in Mask ROM mode

创建 NAND 镜像:

SPL 和 TPL 的大小必须对齐为 2kb。

使用 bash 脚本 ./flash.sh 中的命令进行编程:

#!/bin/sh

printf "RK30" | dd conv=notrunc bs=4 count=1 of=u-boot-tpl.bin
truncate -s %2048 u-boot-tpl.bin
truncate -s %2048 u-boot-spl.bin
../tools/boot_merger --verbose config-flash.ini
../tools/upgrade_tool ul ./RK30xxLoader_uboot.bin

config-flash.ini:

[CHIP_NAME]
NAME=RK30
[VERSION]
MAJOR=2
MINOR=21
[CODE471_OPTION]
NUM=1
Path1=30_LPDDR2_300MHz_DD.bin
[CODE472_OPTION]
NUM=1
Path1=rk30usbplug.bin
[LOADER_OPTION]
NUM=2
LOADER1=FlashData
LOADER2=FlashBoot
FlashData=u-boot-tpl.bin
FlashBoot=u-boot-spl.bin
[OUTPUT]
PATH=RK30xxLoader_uboot.bin

5. TODO