作者:男勃丸儿
【写作说明】:网上找来找去,奈何我搜断腿也没有一篇文章讲清楚该如何提取盒子的DTB文件。找到的也只是一些模糊的描述。让人摸不着头脑。为了方便大家提取DTB文件,少走弯路,我把这次我盒子提取DTB的方法详细的介绍一下,也顺带把这两天摸索、折腾的东西记录一下。
PS:本篇内容,纯属自己瞎折腾出来的方法。
DTB文件介绍:
说起电视盒子就得提到安卓系统,说道安卓系统就不得不提及Linux。Linux其实才是整个安卓系统运行的基石。这也就是文章为什么用Linux小企鹅做头图。
作为一个合格的垃圾佬,你可千万别说第一次看那个萌萌的小企鹅感到眼生。其实呢,它才是最火爆的企鹅,运行于各个平台,小到电饭煲、刷卡机、路由器,大到航母、飞机、导弹、卫星、空间站……,数量&&作用之重比咱的国产企鹅……可牛皮多啦。你没听说过电饭煲里或者战斗机上,按装QQ的吧?
你:歪~!电饭煲!米饭好了没?
正以为Linux的迅猛发展,内核维护者尽力想linux kernel支持更多的硬件平台,导致一段时间后, linux kernel中存在大量的特殊的板级细节相关的源码。一个内核实现,却关注了具体板级细节的东西,这对linux kernel的长远规划是一种伤害。
以至于让Linux之父:Linus都发出了怒吼:
那最后咋解决的这个事呢?那就是dtb文件的作用了。
dtb 全文 dtb - device tree blob--设备树二进制文件
使用DTB文件 可以减少内核的版本数。比如同一块板子,在外设不同的情况下不使用dtb文件需要编译多个版本的内核。当使用dtb文件时同一份linux 内核代码可以在多个板卡上运行,每个板卡可以使用自己的dtb文件。
介绍就到这里吧,这个网上也都有更详细的介绍,这里简单提一下就行了。
毕竟提到了Linus这位暴躁老哥,就想起了他的名言↓,不得不早点结束啰嗦的话:
“Talk is cheap,show me the code!!!!”
1,dt.img文件的解压&提取:
盒子刷机包中,找到.dtb文件结尾的,我这个固件包中能找到有两个kernel.dtb和meson1.dtb 经过比较,这俩其实是一样的。
接下来将kernel.dtb命名为kernel.zip并打开,将其中的dt.img文件提取出来。这个dt.img就是完全解压状态的dtb文件了。
2,dt.img文件的二进制构成分析:
我们分析一下这个文件,使用文本编辑器16进制方式打开这个文件:
可以看到,开头的四个字节,被定义为了AML_也就是晶晨自己的名字。
再往后,四个字节0x0A是说明这里包含10个dtb文件,
再往后,四个字节0x02是说明版本号是v2。
再往后,出现了第一个名字是 gxl_p211_1g,后边跟着dtb文件的起始地址是0x800,文件大小是0x9800。
总结一下:
去0x800地址看一下:
不错,正是一个dtb文件的起始地址。
0x800+0x9800=0xA000 正是下一个dtb文件的起始地址。
那么把0x800->0xA000这一块数据复制出来,做成一个新的文件。那么就是一个单独的dtb文件了。
3,dtb文件的解包:
使用 AMLogicTools工具,bin 目录下的dtc.exe即可将dtb文件和dts文件相互转换:
DTB --> DTS
dtc.exe -I dtb -O dts gxl_xxxx.dtb -o gxl_xxxx.dts
DTS -> DTB
dtc.exe -I dts -O dtb -o gxl_xxxx.dtb gxl_xxxx.dts
以下,是我提取到的所有的E900-V21C中的所有dtb文件:
链接
提取码:qkt1
总结
Linux YYDS!!
什么值得买APP 全网实时购物好价优惠
4000520066 欢迎批评指正
All Rights Reserved 新浪公司 版权所有