RK3399 系列 U-BOOT(next-dev(v2017))

rkbin 仓库
rkbin 仓库用于存放 Rockchip 不开源的 bin(ddr、trust、loader 等)、脚本、打包工具等,它只是一个“工具包”仓库

1. rkbin 要跟 U-Boot 工程保持同级目录关系,否则编译会报错找不到 rkbin;
2.U-Boot 编译时会从 rkbin 索引相关的 bin、配置文件和打包工具,最后在根目录下生成
trust.img、uboot.img、loader 固件;

3.rkbin 仓库下载(请用户不要把重要的 bin 或者 img 文件放在 U-Boot 的根目录下)

rockchip / rkbin · GitLab

4.gcc 工具链路径指定
u-boot/make.sh
TOOLCHAIN_ARM64=

首次编译

./make.sh rk3399 // build for rk3399_defconfig =>u-boot/configs

第二次编译

./make.sh

固件生成

uboot.img
trust.img
rk3399_loader_v1.24.124.bin

**********************************************************************************************

u-boot/tools/ boot_merger   trust_merger  loaderimage  

(1)boot_merger  将这三个bin文件最后合并成rk3399_loader_v1.22.119.bin

rkbin/RKBOOT/RK3399MINIALL.ini

rkbin/bin/rk33/rk3399_ddr_800MHz_v1.24.bin

rkbin/bin/rk33/rk3399_usbplug_v1.24.bin

rkbin/bin/rk33/rk3399_miniloader_v1.24.bin

(2) trust_merger 将这2个文件最后合并成生成trust.img;

rkbin/RKTRUST/RK3399TRUST.ini

rkbin/bin/rk33/rk3399_bl31_v1.32.elf
rkbin/bin/rk33/rk3399_bl32_v1.21.bin


 

(3) loaderimage  将u-boot.bin变成uboot.img;

(4) resource_tool 工具
resource_tool 用于打包任意资源文件,最终生成 resource.img。

******************************************************************************

2.5.3 状态类
2.5.3.1 printf 时间戳

CONFIG_BOOTSTAGE_PRINTF_TIMESTAMP

注意:
1. U-Boot 是单核运行,时间戳打印会增加耗时;
2. 时间戳的时间不是从 0 开始,只是把当前系统的 timer 时间读出来而已,所以只适合计算时间
差;
3. 建议默认关闭该功能,仅调试打开。

2.5.3.7 开机信息
某些情况下,开机信息也可以帮助用户定位一些死机问题。
1. trust 跑完后就卡死

64 位平台 U-Boot 启动地址一般是偏移 0x200000(DRAM 起始地址是 0x0):

2.12 hotkey
为了用户开发方便,rockchip 定义了一些快捷键用于调试或触发某些操作。快捷键主要通过串口输入实
现:
开机长按 ctrl+c:进入 U-Boot 命令行模式;
开机长按 ctrl+d:进入 loader 烧写模式;
开机长按 ctrl+b:进入 maskrom 烧写模式;
开机长按 ctrl+f:进入 fastboot 模式;
开机长按 ctrl+m:打印 bidram/system 信息;
开机长按 ctrl+i:使能内核 initcall_debug;
开机长按 ctrl+p:打印 cmdline 信息;
开机长按 ctrl+s:"Starting kernel..."之后进入 U-Boot 命令行;
开机反复按机器的 power button:进入 loader 烧写模式。但是用户需要先使能:

3.2.8 烧写和工具
1. 烧写工具:Windows 烧写工具版本必须是V2.5 版本或以上(推荐使用最新的版本);
2. 按键进入烧写模式:开机阶段插着 USB 的情况下长按 "音量+";
3. 命令行进入烧写模式:
U-Boot 命令行输入"rbrom":进入 maskrom 烧写模式;
U-Boot 命令行输入“rockusb 0 $devtype $devnum”:进入 loader 烧写模式;
Hotkey 方式,参考2.12 hotkey;

3.2.9 分区表
1. 目前 U-Boot 支持两种分区表:RK parameter 分区表和 GPT 分区表;
2. 如果想从当前的分区表替换成另外一种分区表类型,则 Nand 机器必须整套固件重新烧写;
eMMC 机器可以支持单独替换分区表;
3. GPT 和 RK parameter 分区表的具体格式请参考文档:《Rockchip-Parameter-File-Format-
Version1.4.md》和本文的7.1 分区表

3.2.9 分区表
1. 目前 U-Boot 支持两种分区表:RK parameter 分区表和 GPT 分区表;

4. 兼容配置
4.1 Android 兼容
1. 低于 Android 8.1 的 SDK 版本,U-Boot 必须开启如下配置才能正常启动 Android:

 

8. SPL 和 TPL
8.1 基础介绍
TPL(Tiny Program Loader)和 SPL(Secondary Program Loader)是比 U-Boot 更早阶段的
bootloader,其中:
TPL:运行在 sram 中,负责完成 ddr 初始化;
SPL:运行在 ddr 中,负责完成系统的 lowlevel 初始化、后级固件加载(trust.img 和
uboot.img);

启动流程:BOOTROM => TPL(ddr bin) => SPL(miniloader) => TRUST => U-BOOT => KERNEL

TPL 相当于 ddr bin,SPL 相当于 miniloader,所以 SPL+TPL 的组合实现了跟 Rockchip
ddr.bin+miniloader 完全一致的功能,可相互替换。

RK平臺根據前級Loader程式碼是否開源,目前有兩套啟動管道:
// 前級loader閉源 BOOTROM => ddr bin => Miniloader => TRUST => U-BOOT => KERNEL
// 前級loader開源 BOOTROM => TPL => SPL => TRUST => U-BOOT => KERNEL

TPL 相當於 ddr bin,SPL 相當於 miniloader。TPL+SPL 的組合實現了跟 RK 閉源 ddr.bin+miniloader 一致的功能,可相互替換。

rk3399_loader_v1.22.119.bin=rk3399_ddr_800MHz_v1.22.bin+rk3399_miniloader_v1.19.bin+rk3399_usbplug_v1.19.bin

9.4.2 关于 dt-spl.dtb
1. dt-spl.dtb 一般仅包含 DMC、UART、MMC、NAND、GRF、CRU 等节点。也就是串口、DDR、
存储及其依赖的 CRU/GRF;
2. U-Boot 自己的 dtb 被追加打包在 u-boot.bin 中:不启用 CONFIG_USING_KERNEL_DTB 的情况下使用 dt.dtb;启用 CONFIG_USING_KERNEL_DTB 的情况下使用 dt-spl.dtb。

9.4.3 U-Boot 的 dts 管理
1. U-Boot 中所有芯片级 dtsi 请和 kernel 保持完全一致,板级 dts 视情况简化得到一个 evb 的即
可,因为 kernel 的 dts 全套下来可能有几十个,没必要全部引进到 U-Boot;
2. U-Boot 特有的节点(如:UART、eMMC 的 alias 等)请全部加到独立的 rkxx-u-boot.dtsi 里面,不要破坏原有 dtsi。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值