RK3568开发笔记整理之SPL设备树镜像
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 文件。
- 分享
- 举报
-
浏览量:2730次2024-03-18 14:27:20
-
浏览量:872次2024-03-12 16:42:47
-
浏览量:2347次2024-03-18 15:00:34
-
浏览量:2024次2023-11-03 15:37:16
-
浏览量:1162次2024-02-18 17:07:58
-
浏览量:4944次2022-09-30 16:40:59
-
浏览量:5849次2021-12-10 15:40:21
-
浏览量:18180次2022-09-30 16:51:48
-
浏览量:9436次2022-10-12 09:28:15
-
浏览量:1045次2023-12-08 16:48:29
-
浏览量:2645次2022-09-30 16:48:25
-
浏览量:4081次2022-10-11 10:48:08
-
浏览量:6598次2022-10-08 14:00:42
-
浏览量:5070次2022-09-26 11:51:17
-
浏览量:6600次2022-10-09 10:20:09
-
浏览量:7933次2022-10-13 19:26:04
-
浏览量:2537次2022-09-30 16:46:03
-
浏览量:6002次2022-10-08 13:56:28
-
浏览量:10296次2022-10-09 15:56:41
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
来自远方
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明