• [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 為例

    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
    

    到 android/out/ 搜尋 dtc 執行檔,

    $ find -name dtc
    ./target/product/msm8937_64/obj/kernel/msm-3.18/scripts/dtc/dtc
    

    最後再反譯 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
    

    decompiled.dts 就是此 project 所有被使用到的 dts 的集合。

    以 MTK mt6755 為例

    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
    

    到 linux_repo/out 下搜尋 dtc 執行檔

    linux_repo/out$ find -name "dtc"
    ./target/product/XXXXXXXXXX/obj/KERNEL_OBJ/scripts/dtc/dtc
    

    最後再反譯 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
    

    decompiled.dts 就是此 project 所有被使用到的 dts 的集合。

  • 相关阅读:
    Python3 tkinter基础 Radiobutton variable 默认选中的按钮
    oracle函数NVL,NVL2和NULLIF之间的区别和使用
    js如何返回两个数的商的整数和余数部分?
    解决win10打开组策略弹出管理模板对话框问题
    asp.net mvc中动作方法的重定向
    asp.net mvc如何获取url的相关信息
    vs2015如何使用附加进程调试发布在IIS上项目
    未能加载文件或程序集“Oracle.DataAccess”或它的某一个 依赖项。如何解决?
    C#中使用SqlBulkCopy的批量插入和OracleBulkCopy的批量插入
    oracle中计算两个日期的相差天数、月数、年数、小时数、分钟数、秒数等
  • 原文地址:https://www.cnblogs.com/youchihwang/p/6854013.html
Copyright © 2020-2023  润新知