RK3568开发笔记整理之dtb.img和dtbo.img
内核设备树 dtb.img
RK 平台 dtb.img 镜像文件是由内核源码中编译出来的,单独编译内核源码时我们会使用下面这些命令:
make ARCH=arm64 rockchip_defconfig rk356x_evb.config android-11.config
make ARCH=arm64 rk3568-evb1-ddr4-v10.img -j24
- 1
- 2
第一行是配置,第二行是编译 rk3568-evb1-ddr4-v10.img 目标,rk3568-evb1-ddr4-v10 这个就是设备树文件的名字,也就是 arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dts。
在 arch/arm64/Makefile 文件中有对应的%.img 目标:
依赖于%.dtb
通过命令”$(MAKE) $(build)=$(boot)/dts $(boot)/dts/$@”去生成我们的.dtb
通过打印信息可知,这条命令实际上就是:
make -f ./scripts/Makefile.build obj=arch/arm64/boot/dts arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtb
- 1
也就是通过./scripts/Makefile.build 这个 Makefile 脚本去生成,obj 指定了.dts 设备树源文件的目录,在./scripts/Makefile.build 文件中会包含./scripts/Makefile.lib,最终通过以下命令去生成.dtb 文件:
scripts/dtc/dtc -O dtb -o arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtb -@ ......
- 1
在 RK 官方的文档中有说明:
需要注意:DTO 操作使用的 DTB 和 DTBO 的编译跟普通的 DTB 编译有区别,语法上有特殊区别:
使用 dtc 编译.dts 时,您必须添加选项-@以在生成的.dtbo 中添加symbols 节点。_symbols节点包含带标签的所有节点的列表,DTO 库可使用这个列表作为参考。如下示例:
1.编译主.dts 的示例命令:
dtc -@ -o dtb o my_main_dt.dtb my_main_dt.dts
- 1
2.编译魯加层 DT.dts
的示例命令
dtc -@ -0 dtb -o my_overlay_dt.dtbo my_overlay_dt.dts
- 1
内核编译出 rk3568-evb1-ddr4-v10.dtb 文件之后,会去生成 rk3568-evb1-ddr4-v10.img 文件,通过以下命令去生成:
scripts/mkimg --dtb rk3568-evb1-ddr4-v10.dtb
- 1
这个不用去管了,实际我们的 boot.img 镜像并不使用 rk3568-evb1-ddr4-v10.img 镜像,而是使用 rk3568-evb1-ddr4-v10.dtb 文件。
除了生成 rk3568-evb1-ddr4-v10.img 镜像之外,还会生成 kernel.img 镜像,这个是内核镜像的另一种格式,同样也是通过内核镜像 Image 做出来的,估计是 RK 自己的一种格式,我们实际上也是不使用这种格式:
scripts/mkkrnlimg arch/arm64/boot/Image kernel.img
- 1
我们用的就是 Image 镜像。
dtbo.img 镜像
dtbo.img 镜像并不是在编译内核的时候生成的,而是在编译安卓的时候,在device/rockchip/common/build/rockchip/RebuildDtboImg.mk 这个 Makefile 文件中有这样一段话:
dtbo.img 是由 rebuild-dtbo.img 重命名的,在生成 rebuild-dtbo.img 之前,需要有.dts 设备树源文件,通过第一个目标$(rebuild_dts)生成,其实也就是通过下面这个命令生成:
out/soong/host/linux-x86/bin/fstab_tools -I dts -i device/rockchip/rk356x/rk3568_r/dt-overlay.in -p fe310000.sdhci,fe330000.nandc -f wait -o
out/target/product/rk3568_r/obj/FAKE/rockchip_dtbo_intermediates/device-tree-overlay.dts
- 1
- 2
通过 fstab_tools 工具将 dt-overlay.in 文件变为 dtbo 的设备树源文件 device-tree-overlay.dts。
每一个硬件平台都会在安卓目录下 device 中提供相应的 dt-overlay.in 或直接提供设备树.dts 源文件,譬如 3568 就是:device/rockchip/rk356x/rk3568_r/dt-overlay.in。
只不过 RK3568 提供的是.in 这种文件,其实这个文件基本就是.dts 设备树文件,只不过里边有一个变量:
所以我估计 fstab_tools 工具就是将这个变量替换掉而已,譬如使用-p 选项指定的参数,替换之后就是这样:
这个就是 device-tree-overlay.dts 文件。
得到 device-tree-overlay.dts 源文件之后,接着
$(AOSP_DTC_TOOL) -@ -O dtb -o $(rebuild_dtbo_dtb) $(rebuild_dts) //生成 rebuild-dtbo.dtb 文件
$(AOSP_MKDTIMG_TOOL) create $(rebuild_dtbo_img) $(rebuild_dtbo_dtb) //生成 rebuild-dtbo.img 文件
- 1
- 2
这两个命令其实就是:
out/soong/host/linux-x86/bin/dtc -@ -O dtb -o
out/target/product/rk3568_r/obj/FAKE/rockchip_dtbo_intermediates/device-dtbo.dtb
out/target/product/rk3568_r/obj/FAKE/rockchip_dtbo_intermediates/device-tree-overlay.dts
out/soong/host/linux-x86/bin/mkdtimg create
out/target/product/rk3568_r/obj/FAKE/rockchip_dtbo_intermediates/rebuild-dtbo.img
out/target/product/rk3568_r/obj/FAKE/rockchip_dtbo_intermediates/device-dtbo.dtb
- 1
- 2
- 3
- 4
- 5
- 6
先用 dtc 生成.dtb 文件,再用 mkdtimg 生成.img 文件。
- 分享
- 举报

-
浏览量:3742次2024-03-18 14:27:20
-
浏览量:1143次2024-03-12 16:42:47
-
浏览量:2251次2024-03-13 15:15:04
-
浏览量:1493次2024-02-18 17:07:58
-
浏览量:5126次2022-09-30 16:40:59
-
浏览量:6113次2021-12-10 15:40:21
-
浏览量:18703次2022-09-30 16:51:48
-
浏览量:10033次2022-10-12 09:28:15
-
浏览量:5237次2022-10-14 08:34:42
-
浏览量:4254次2022-10-11 10:48:08
-
浏览量:2797次2022-09-30 16:48:25
-
浏览量:6921次2022-10-08 14:00:42
-
浏览量:1307次2023-12-08 16:48:29
-
浏览量:6969次2022-10-09 10:20:09
-
浏览量:8290次2022-10-13 19:26:04
-
浏览量:5279次2022-09-26 11:51:17
-
浏览量:6340次2022-10-08 13:56:28
-
浏览量:2715次2022-09-30 16:46:03
-
浏览量:10993次2022-10-09 15:56:41
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖

Asura






举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明