基于芯驰 X9HP 的设备树文件 dts 的编译和 dtb 文件反编译

1.设备树

设备树是 Linux 开发人员必备的知识,因为现在的 Linux 系统(包括 Android )中,ARM 相关驱动都采用了设备树方式进行描述。 

设备树(DeviceTree),这个从分开就是设备和树,描述设备树的文件叫 DTS(DeviceTreeSource),这个 DTS 文件树型结构描述板级设备,比如 CPU 数量、内存基地址、I2C、I2S、SPI、等接口上挂载了哪些设备。

2. DTS、DTB和DTC

设备树文件扩展名为.dts,但是我们在编译 Linux 的时候却一直在使用.dtb文件,那 DTS 文件和 DTB 文件有何关系呢?DTS 是设备树源码文件,DTB 是将 DTS 编译以后得到的二进制文件。那么将.dts 编译为.dtb 需要什么工具呢?需要用到 DTC 工具

2.1 编译 DTS 文件

使用 dtc 工具将 dts 文件编译生成 dtb 文件的命令如下:

./dtc -I ( 大写i ) dts -O dtb -o test.dtb test.dts

 

 

2.2 反编译 DTB 文件

使用 tdc 工具将 dtb 文件反编译成 dts文件的命令如下:

./dtc -I ( 大写i ) -dtb -O dts -o test.dts test.dtb

 
由 dtc 转换成的 dts 是一个完整的 device tree,包括 “include ”xxx.dtsi“ 中的内容也一起在反编译出来的 dts 中了,即所有的内容都在一个 dts 文件中。

3. 基于芯驰 X9HP 反编译 DTB 文件

3.1 查找 dtc 工具

 一般在编译 dtb 的编译系统中都存在 dtc 文件,由于 linux 文件较少,这里在 linux 代码里面使用如下命令查找 dtc 工具。

Find ./ -name “dtc“

 如图是在芯驰 PTG4.1 基线代码中在 yocto 目录中查找 dtc 。

 

 
经过测试如下路径下的 dtc 是可用文件:

./build-x9hp_ms_cluster/tmp/deploy/images/x9hp_ms_cluster/dtc


 

./build-x9hp_ms_cluster/tmp/sysroots-components/x86_64/dtc-native/usr/bin/dtc


 

 

将其拷贝到 docker 挂载的服务器目录下,方便编译 dtb 文件,如下截图,退出 docker 后在服务器我的家目录下可以看到拷贝过来的 dtc 文件。

 

 

3.2 获取要反编译的 DTB 文件

最简单的办法就是找到打包好的 pac 包,并将其加载到 SDToolsBox –> SDFactoryTools 中。

 



点击齿轮按钮进入 Setting ,找到 EMMC1_DTB, 双击文件路径。

 



拷贝路径后粘贴到文件浏览器中找到该 dtb 文件。

 

 

使用sftp 工具上传 dtb 文件到服务器中 dtc 工具的同目录下。

 


3.3 使用 DTC 工具反编译 DTB 文件

使用如下命令反编译 dtb 文件,如下两条命令任一都可。

./dtc -I ( 大写 i ) dtb -O dts -o test.dts dtb.bin

./dtc -I ( 大写 i ) dtb -O dts  dtb.bin > ./1.dts

 
反编译成功后 log 如下。

 


使用vim 编辑器可以打开查看 dts 文件。

 

 

 

4. 总结

因为dts 文件层层嵌套,最后使用了哪一份配置需要反复确认对比,调试时使用反编译正常的 dtb 配置,再反编译客户的 dtb 文件,将其对比可以快速确定客户与正确(能正常运行的/ demo板配置 )配置之间差异点。

参考资料

[1] https://www.shuzhiduo.com/A/kPzOQBva5x/

欢迎在博文下方留言评论,我们会及时回复您的问题。如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com
作者:Stark / 劉沛

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论