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

news/2025/3/15 4:34:23/

验证平台

  • 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
  • 如果是一个完整的设备树,包括 一个 dts、多个 dtsi 与 .h 文件,就需要使用 gcc 预处理后再 使用 dtc 编译成 dtb,这里可以使用 shell 脚本或者 Makefile 方式实现,相关的文章:

  • Linux 设备树文件手动编译的 Makefile

  • Linux 设备树文件手动编译的 shell 脚本

小结

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

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


http://www.ppmy.cn/news/181000.html

相关文章

全面探讨 Spring Boot 的自动装配机制

Spring Boot 是一个基于 Spring 框架的快速开发脚手架,它通过自动配置机制帮助我们快速搭建应用程序,从而减少了我们的配置量和开发成本。自动装配是 Spring Boot 的核心特点之一,它可以减少项目的依赖,简化配置文件,提…

zynq基于XDMA实现PCIE X8通信方案测速 提供工程源码和QT上位机程序和技术支持

目录 1、前言2、我已有的PCIE方案3、基于zynq架构的PCIE4、总体设计思路和方案5、vivado工程详解6、SDK 工程详解7、驱动安装8、QT上位机软件9、上板调试验证9、福利:工程代码的获取 1、前言 PCIE(PCI Express)采用了目前业内流行的点对点串…

CISCO X8系列AP升级详解

X8系列AP升级详解 准备工作 1、将AP连接到可获取IP地址的设备:交换机、家用路由或者猫等 2、用终端通过CONSOLE线连接AP,默认用户名为:cisco 密码为:Cisco 3、在AP获取到地址后,进入AP配置模式# 4、给AP配置IP地址…

CorelDRAW X8 /CDR2020官方序列号密钥下载矢量绘图软件

CorelDRAW是一款专业的矢量绘图软件,该软件是Corel公司推出的矢量图形制作工具,经历二十多年的发展与蜕变,CorelDRAW Graphics Suite系列又有了新的突破,CorelDRAW X8应运而生。其完善的内容环境和强大的平面设计功能为设计师提供…

java实现 CRC8 校验 多项式 x8+x2+x+1

物联网 服务器需要检验设备传输的数据,设备c语言写的,CRC8 校验多项式为 x8x2x1,找了百度,必应。也没有找到java CRC8 多项式 x8x2x1的实现,能找到的都是x8x5x41的,后转google,费了些功夫不过…

coreldraw x8的序列号无效在哪里找?绿色安装教程

CDR英文全称为:CorelDRAW Graphics Suite是由加拿大Corel公司开发的一款平面设计软件;该软件是Corel公司出品的矢量图形制作工具软件,这个图形工具给设计师提供了矢量动画、页面设计、网站制作、位图编辑和网页动画等多种功能。 它包含两个绘…

x16为什么比x8慢?

x16为什么比x8慢? 一句话答案:x16的内存颗粒有2个bank group,而x8的内存颗粒有4个bank group: 我们拿Micron的8Gb内存颗粒[2]举例。同意提供8G bit的容量,它有三种Fuze: 分别是2G x 4;1G x 8&a…

NGFF、M.2、PCIe、NVMe概念区分以及PCIEx1 x4 x8 x16区别

对于NGFF/M.2、PCIe、NVMe等概念的说明。解决方案: NGFF (Next Generation Form Factor) ,顾名思义,是物理外形(Form Factor)的标准。与 NGFF 并列的是 2.5",而不是 PCIe。(另外 NGFF 现在已经改名为M.2 了,大家最…