Linux 设备树手动反编译 dtb 生成 源文件dts

验证平台

  • win10 64 位

  • VMware Workstation Pro 16

  • ubuntu 20.04

  • dtc 工具: 来自 linux-6.3.5 中的 scripts/dtc/

安装 dtc 工具

  • 其实可以通过安装 dtc 软件包,但不建议这么做,最好通过编译Linux 最新的内核,获取这个 dtc 工具

  • 编译Linux 内核生成 dtc 工具的方法

  • 下载最新的Linux 内核,解压到 ubuntu 20.04 中,随便找个 board 的 defconfig,如 qemu

arch/arm/configs/vexpress_defconfig

$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- vexpress_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs

在这里插入图片描述

在这里插入图片描述

  • 使用最新的Linux 内核编译出来的 dtc 工具,这样编译或者反编译 设备树文件,会比较的靠谱,当然研究Linux 设备树,最好提前准备好Linux 的编译环境

  • 这里不需要重新编译Linux 内核,只需要单独编译设备树即可 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs

反编译 dtb

  • 也就是把 dtb 设备树二进制文件,反编译为 一个 dts 设备树源文件,这里使用 dtc 工具

  • 反编译的命令如下:

./dtc -I dtb -O dts vexpress-v2p-ca9.dtb -o vexpress-v2p-ca9_0603.dts

  • 注意一下参数即可:

  • ./dtc 表示 dtc 的执行路径,可以根据实际情况指定, ./dtc 表示 dtc 工具在当前路径下

  • -I dtb -O dts 注意这里的 IInput 的缩写,也就是 输入格式 : dtbO 表示 Output 输出格式:dts

  • vexpress-v2p-ca9.dtb :设备树的二进制 dtb 文件,也就是被反编译的 dtb 文件

  • -o vexpress-v2p-ca9_0603.dts,这里 -o 小写的 output,输出的文件,后面的名字可以自己定义,如 xxx.dts

  • 以上操作即可把 一个 dtb 文件 反编译成 一个 设备树源文件 dts

生成的 dts 对比原有的 dts

  • Linux 的设备树文件,可能是一个 dts 源文件,多个 dtsi 与 .h 头文件组成的,所以反编译后只生成了一个 dts 原文件,内容对比起来,可能需要结合多个 dtsi 文件进行查看

  • 如下,我使用Linux 的现有的 dts 生成 dtb,然后再把 dtb 反编译为 dts,对比文件内容,发现有些差异

  • 毕竟 这个生成的 dts,是多个 文件的组合成的,但是内容基本一致,比如你可以再把 反编译后的 dts 编译为 dtb,然后验证功能是否正常。

在这里插入图片描述

在这里插入图片描述

dts 编译 为 dtb

  • 如上,如果只有一个 dts 文件,编译为 dtb 的方法很简单,就是使用 dtc 工具,命令如下:
$ ./dtc -I dts -O dtb vexpress-v2p-ca9_0603.dts -o vexpress-v2p-ca9_0603.dtb

小结

  • 本篇注意讲了一下如何把Linux 生成好的 设备树文件 dtb,反编译为 设备树源文件 dts 文件

  • 注意 获取 设备树编译工具 dtc 的方法,最好通过最新的Linux 内核 编译获取

猜你喜欢

转载自blog.csdn.net/tcjy1000/article/details/131017104