(ROC-RK3568-PC) 裸机16_SPL and DTB 笔记

正在玩 firefly linux sdk 中的 uboot,对其中的 spl 做个笔记。

firefly linux sdk 包含linux源码,uboot源码,rootfs 之类的东西,总共16G还大点!

为便于描述,firefly linux sdk uboot 简称为 uboot。

uboot 完整的编译指令:
make rk3568_defconfig
./make.sh rk3568

生成的与 spl 相关的文件在uboot 的 ./spl/ 目录中
u-boot-spl                        编译链接输出的 elf 格式文件
u-boot-spl-nodtb.bin        从u-boot-spl中dump出来的二进制代码文件
u-boot-spl-dtb.bin            带spl-dtb的二进制代码文件
u-boot-spl.dtb                  第一阶段的 dtb 文件,由 SPL 专用。

编译快结束时会执行: cp spl/u-boot-spl-dtb.bin spl/u-boot-spl.bin

spl/u-boot-spl.bin 就是用来生成 rk3568_loader.bin 的,是 loader 中的 spl 阶段的代码。

第一阶段的 dtb 被添加到 spl.bin 的尾部,它来自:
cp   dts/dt-spl.dtb   spl/u-boot-spl.dtb

dts/dt-spl.dtb 又来自:

./tools/fdtgrep \
-b u-boot,dm-pre-reloc \                导出带有 u-boot,dm-pre-reloc 属性的节点
-b u-boot,dm-spl \                          导出带有 u-boot,dm-spl 属性的节点
-RT \
arch/arm/dts/rk3568-evb.dtb \
-n /chosen \
-n /config \
-O dtb
| \
./tools/fdtgrep \
-r \
-O dtb \
- -o dts/dt-spl.dtb \                        输出文件名
-P clock-names \
-P interrupt-parent \
-P assigned-clocks \
-P assigned-clock-rates \
-P assigned-clock-parents

arch/arm/dts/rk3568-evb.dtb  来自 rk3568-evb.dts
因为 rk3568-evb.dts 引用了C语言头文件,所以在编译为dtb之前会先由gcc编译一遍
然后才是由 dtc 编译为 dtb 文件。

arch/arm/dts/rk3568-evb.dts  -> 经 gcc -> 经 dtc 得 arch/arm/dts/rk3568-evb.dtb
arch/arm/dts/rk3568-evb.dtb  -> 经 fdtgrep 得 dts/dt-spl.dtb

以上就是第一阶段的 dtb

SPL 运行的时候,会在存储上 0x4000 扇区处找 FIT Image 并加载之。
(0x4000这个扇区地址并非所有 spl 版本都一样,有可能是0x5000,0x8000, 0x9000)
这个FIT Image 就是 uboot.img (FIT格式的img)

这个 uboot.img 里面包含有:几个 atf.bin、一个 tee.bin、一个fdt、uboot.bin (uboot真身代码)
这里面的 fdt 就是 SPL要用的第二阶段的 dtb ,但理论上用处不大,因为:

spl 安装完几个 atf.bin 后会, 会马上切换到 EL2 去运行 uboot真身代码。

uboot真身代码运行的时候,会找 rk-kernel.dtb,它不用spl的dtb!
不过,它去哪个位置找 rk-kernel.dtb ,有几个可能的地方:
1). 找 resource 分区里面的 resource.img 中的 rk-kernel.dtb
2). 找 boot 分区里面的 boot.img 里面的 resource 中的 rk-kernel.dtb
3). recovery 启动模式时可能还会去 recovery 分区找,这个不确定

当1). 和2). 同时存在时uboot会使用哪一个,没测试过。。。

附几条命令:
fdtdump uboot.img
./RKTools/mkimage       生成fit img
./scripts/fit-unpack.sh    拆解fit img
../rkbin/tools/resource_tool  rk-kernel.dtb logo.bmp logo_kernel.bmp 生成 resource.img
dtc -O dtb -o ./ubootSpl.dtb -b 0 -i ./scripts/ ./rk3568_u-boot-spl.dts   编译 dts

固件解包:仅针对 firefly 官方固件(如下图)

解包fit img:
./scripts/fit-unpack.sh -f /mnt/e/Dev/EE/Rockchip/RKDevTool_Release_v2.84/Output/Android/Image/boot.img -o ./a_imgs

反编译dtb为dts:
fdtdump ./a_imgs/rk-kernel.dtb >./a_imgs/rk-kernel.dis

解压资源img:
../rkbin/tools/resource_tool --unpack --verbose --image=./a_imgs/resource ./a_imgs/
 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值