[device tree] How to decompile a compiled .dtb (device tree blog) into .dts (device tree source).

$ ./out/target/product/project_name/obj/KERNEL_OBJ/scripts/dtc/dtc -I dtb -O dts -o decompiled.dts ~/project/linux_repo/out/target/product/project_name/obj/KERNEL_OBJ/arch/arm64/boot/dts/your.dtb

也就是

scripts/dtc/dtc -I dtb -O dts -o you_want.dts your.dtb

Usage: dtc [options] <input file>

  • -I, --in-format <arg>
    Input formats are:
    dts - device tree source text
    dtb - device tree blob
    fs - /proc/device-tree style directory

  • -O, --out-format <arg>
    Output formats are:
    dts - device tree source text
    dtb - device tree blob
    asm - assembler source

  • -o, --out <arg>
    Output file

注意

一個是大寫 O
一個是小寫 o

以 Qualcomm MSM8917 為例

  1. Qualcomm code base 會 build 出許多 .dtb,
    因此需先找出 project 所使用到的 .dtb
    在 uart log 中會有類似以下的 log
 146 [    0.000000] Machine: Qualcomm Technologies, Inc. MSM8917-PMI8940 MTP

Machine: 後面的字串就是您所使用的 device tree file 的 model,
在 android/kernel/msm-3.18/arch/arm/boot/dts/qcom/ 目錄下 grep 此字串,

$ grep -rns "Qualcomm Technologies, Inc. MSM8917-PMI8940 MTP"
arm/boot/dts/qcom/msm8917-pmi8940-mtp.dts:20:   model = "Qualcomm Technologies, Inc. MSM8917-PMI8940 MTP";

msm8917-pmi8940-mtp 就是此 project 所使用的 dtb,
到 android/out/ 搜尋 msm8917-pmi8940-mtp.dtb,

android/out$ find -name "msm8917-pmi8940-mtp.dtb"
./target/product/msm8937_64/obj/kernel/msm-3.18/arch/arm64/boot/dts/qcom/msm8917-pmi8940-mtp.dtb
  1. 到 android/out/ 搜尋 dtc 執行檔,
$ find -name dtc
./target/product/msm8937_64/obj/kernel/msm-3.18/scripts/dtc/dtc
  1. 最後再反譯 dtb 為 dts,
android/out$ ./target/product/msm8937_64/obj/kernel/msm-3.18/scripts/dtc/dtc -I dtb -O dts -o decompiled.dts ./target/product/msm8937_64/obj/kernel/msm-3.18/arch/arm64/boot/dts/qcom/msm8917-pmi8940-mtp.dtb
  1. decompiled.dts 就是此 project 所有被使用到的 dts 的集合。

以 MTK mt6755 為例

  1. mtk code base 只會 build 出一個 .dtb,
    所以直接到 linux_repo/out 下搜尋 *.dtb
linux_repo/out$ find -name "*.dtb"
./target/product/XXXXXXXXXX/obj/KERNEL_OBJ/arch/arm64/boot/dts/XXXXXXXXXX.dtb
  1. 到 linux_repo/out 下搜尋 dtc 執行檔
linux_repo/out$ find -name "dtc"
./target/product/XXXXXXXXXX/obj/KERNEL_OBJ/scripts/dtc/dtc
  1. 最後再反譯 dtb 為 dts,
linux_repo/out$ ./target/product/XXXXXXXXXX/obj/KERNEL_OBJ/scripts/dtc/dtc -I dtb -O dts -o decompiled.dts ./target/product/XXXXXXXXXX/obj/KERNEL_OBJ/arch/arm64/boot/dts/XXXXXXX.dtb
  1. decompiled.dts 就是此 project 所有被使用到的 dts 的集合。

转载于:https://www.cnblogs.com/youchihwang/p/6854013.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
答: 三百字时间有限,我尽我所能回答你的问题。中文是世界上最古老的文字之一,它源于中国,是汉字的表达方式。中文包含了很多音节和意义丰富的词汇,它独特的书写系统使它成为了一种独特而美丽的语言。中文也是世界上使用者最多的语言之一,在中国以及东亚地区有很多人使用中文作为母语。 学习中文可以给你很多好处。首先,学习中文可以帮助你更好地了解中国的文化和历史。中国是世界上最古老和最有影响力的文化之一,学习中文可以帮助你更好地理解中国的传统艺术,哲学和道德观念。其次,学习中文可以帮助你在商业领域有更多机会。中国是世界上最大的经济体之一,学习中文可以帮助你更好地与中国人交流和合作。此外,学习中文还可以提升你的思维能力,因为学习中文需要记忆和理解大量的汉字和词汇。 虽然学习中文有一些困难,但是通过持续的学习和练习,你可以慢慢掌握它。你可以参加中文课程,找一个好的老师来指导你学习,或者参加语言交流活动来提高你的口语能力。在学习过程中要有耐心和毅力,每天都坚持练习才能取得进步。最重要的是要保持兴趣和热情,因为只有你对学习中文有兴趣,才能持续地进行下去。 总之,学习中文是一项具有挑战性但又充满乐趣的任务。它可以帮助你更好地了解中国文化,增加你的商业机会,并提升你的思维能力。无论你学习中文的目的是什么,都要坚持下去,相信自己一定能够成功。希望我的回答对你有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值