RK3568开发笔记整理之SPL设备树镜像

RK3568开发笔记整理之SPL设备树镜像 来自远方 2024-03-13 15:17:24 1698

1. 概述

通过 RK 提供的 make.sh 脚本编译 u-boot 之后,会生成 u-boot 镜像、同样也会生成 SPL 的镜像,会在u-boot 目录下生成一个名为 spl 的目录,如下所示:

因为设备树采用的是独立方式,所以设备树镜像并不会直接嵌入到 SPL 镜像中,而是会生成一个单独的设备树镜像文件。

在上图中可以看到有多种.bin 和 dtb 文件:
u-boot-spl.dtb 就是 SPL 的设备树镜像文件,单独编译出来。

u-boot-spl.lds 这个是编译 SPL 使用的链接脚本,需要注意,u-boot 目录下的 spl 文件夹是在编译过程中创建出来的,所以 u-boot-spl.lds 文件是从其它地方拷贝过来的。

u-boot-spl-nodtb.bin 这个是 SPL 镜像 不包含设备树镜像,因为采用独立方式编译设备树镜像,所以设备树镜像不会嵌入到 u-boot 的镜像中。

而 u-boot-spl.bin 和 u-boot-spl-dtb.bin 其实是同一个文件,Coty 而来,这两个文件其实包含了设备树镜像 u-boot-spl.dtb 的 u-boot 镜像文件,但是主要这个设备树镜像他不是嵌入进去(如果是嵌入方式,那么会将设备树的镜像单独放在 u-boot 镜像的某一个段中),而是会将其附加在 u-boot 镜像后面,所以设备树镜像就直接在 u-boot 镜像后面。

所以由此可知,u-boot 中编译 SPL 之后,是会生成三种镜像:SPL 的设备树镜像 u-boot-spl.dtb、SPL 镜像(不包含设备树镜像)u-boot-spl-nodtb.bin、SPL 镜像(包含 u-boot 镜像)u-boot-spl-dtb.bin。

而 u-boot-spl.bin 是由 u-boot-spl-dtb.bin 拷贝出来的。而后续制作 Miniloader.bin 镜像时,会使用 u-boot-spl.bin 镜像文件,也就是将 u-boot-spl.bin 作为 SPL,再加上 TPL,最终生成 Miniloader.bin 镜像文件。

嵌入方式和独立方式的不同会在 fdtdec_setup 函数中体现出来:

SPL 的设备树是比较小的,它也是使用了 u-boot 本身的设备树文件,但是在编译的时候会进行处理,将包含了”u-boot,dm-spl”或”u-boot,dm-pre-reloc”属性的设备节点给过滤出来,其余的节点会被剔除,这样做的原因在于减小整个 MiniloaderAll.bin 镜像的大小。

2. 如何生成 MiniloaderAll.bin 镜像

生成 MiniloaderAll.bin 文件非常简单,由 RK 提供的工具制作而成,这个在 RK 提供的文档上有说明:使用 boot_merger 工具,该工具在 rkbin/tools 目录下,该工具的使用方法很简单,./tools/boot_merger [ini file]执行 boot_merger 命令时,指定一个 ini 文件即可!在这个 ini 文件中会指定 SPL 镜像、TPL 镜像等,在 rkbin/RKBOOT 目录下有很多 ini 文件,譬如以 RK3568 为例(rkbin/RKBOOT/RK3568MINIALL.ini):

ddr bin 就是 TPL、miniloader bin 就是 SPL,事实上除了 TPL 和 SPL 之外,还有一个 usbplug bin,这个为了让 maskrom 支持 usb 功能而添加的一个闭源的二进制镜像文件。

以上这个图是 RK3568 使用了闭源的 TPL+SPL,这些镜像都在 rkbin/bin/rk35 目录下,如下所示:

可以看到这个目录下有很多的 rk3568_ddr_xxx 的镜像文件,这些其实就是 TPL 镜像(用于对 DDR 进行初始化操作,ddr bin);这些 rk356x_spl_x 的文件便是 SPL 镜像文件;这就是 RK 平台所提供的闭源的镜像,只有二进制镜像文件、没有其源码。

如果我们要使用开源的 SPL,则需要将 FlashBoot 指定为我们通过 U-Boot 编译出来的 u-boot-spl.bin 镜像文件,事实上,u-boot 源码中 RK 提供的 make.sh 脚本帮我们做好了,我们只需执行一个命令即可,./make.sh --spl表示使用(U-Boot 开源 SPL+闭源 TPL)制作 MiniloaderAll.bin 文件,执行这个命令之后会直接将 FlashBoot 指定为 u-boot 目录下 spl/u-boot-spl.bin 文件。

当然也可以这样:
./make.sh --spl --tpl
这样表示同时使用开源 TPL+开源 SPL 制作 MiniloaderAll.bin,当然,对于 RK3568 平台,u-boot 编译出来的 TPL 并不可使用,貌似是 RK 没做支持。执行命令成功之后,便会在 u-boot 目录下生成对应的 MiniloaderAll.bin 镜像文件,不过名字并不是MiniloaderAll.bin,而是 rk356x_spl_loader_v1.09.111.bin,这个直接重命名即可!

事实上,但我们执行
./make.sh rk3568
编译 u-boot 源码的时候,编译完 u-boot 源码之后,该脚本会自动帮我们生成 MiniloaderAll.bin,当然名字也是rk356x_spl_loader_v1.09.111.bin,但是要注意,此时它是使用闭源 TPL+闭源 SPL 来生成的,也就是rkbin/RKBOOT/RK3568MINIALL.ini 文件。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
来自远方
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区