RK3568开发笔记整理之dtb.img和dtbo.img

RK3568开发笔记整理之dtb.img和dtbo.img Asura 2024-03-18 15:00:34 223

内核设备树 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

第一行是配置,第二行是编译 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

也就是通过./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 -@ ......

在 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

2.编译魯加层 DT.dts的示例命令

dtc -@ -0 dtb -o my_overlay_dt.dtbo my_overlay_dt.dts

内核编译出 rk3568-evb1-ddr4-v10.dtb 文件之后,会去生成 rk3568-evb1-ddr4-v10.img 文件,通过以下命令去生成:

scripts/mkimg --dtb rk3568-evb1-ddr4-v10.dtb

这个不用去管了,实际我们的 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

我们用的就是 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

通过 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 文件

这两个命令其实就是:

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

先用 dtc 生成.dtb 文件,再用 mkdtimg 生成.img 文件。

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

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

举报反馈

举报类型

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

详细说明

审核成功

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

审核失败

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

小包子的红包

恭喜发财,大吉大利

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

    易百纳技术社区