我爱捡垃圾:小黄鱼垃圾盒子,提取DTB文件

男勃丸儿 09-14 18:33 关注

【写作说明】:网上找来找去,奈何我搜断腿也没有一篇文章讲清楚该如何提取盒子的DTB文件。找到的也只是一些模糊的描述。让人摸不着头脑。为了方便大家提取DTB文件,少走弯路,我把这次我盒子提取DTB的方法详细的介绍一下,也顺带把这两天摸索、折腾的东西记录一下。

PS:本篇内容,纯属自己瞎折腾出来的方法。

DTB文件介绍:

说起电视盒子就得提到安卓系统,说道安卓系统就不得不提及Linux。Linux其实才是整个安卓系统运行的基石。这也就是文章为什么用Linux小企鹅做头图。

作为一个合格的垃圾佬,你可千万别说第一次看那个萌萌的小企鹅感到眼生。其实呢,它才是最火爆的企鹅,运行于各个平台,小到电饭煲、刷卡机、路由器,大到航母、飞机、导弹、卫星、空间站……,数量&&作用之重比咱的国产企鹅……可牛皮多啦。你没听说过电饭煲里或者战斗机上,按装QQ的吧?

你:歪~!电饭煲!米饭好了没?

电饭煲:快了…等我跟这个网友聊完,马上煮饭…我爱捡垃圾:小黄鱼垃圾盒子,提取DTB文件

正以为Linux的迅猛发展,内核维护者尽力想linux kernel支持更多的硬件平台,导致一段时间后, linux kernel中存在大量的特殊的板级细节相关的源码。一个内核实现,却关注了具体板级细节的东西,这对linux kernel的长远规划是一种伤害。

以至于让Linux之父:Linus都发出了怒吼:

Linus f**kLinus f**k

那最后咋解决的这个事呢?那就是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 经过比较,这俩其实是一样的。

我爱捡垃圾:小黄鱼垃圾盒子,提取DTB文件

接下来将kernel.dtb命名为kernel.zip并打开,将其中的dt.img文件提取出来。这个dt.img就是完全解压状态的dtb文件了。

我爱捡垃圾:小黄鱼垃圾盒子,提取DTB文件

2,dt.img文件的二进制构成分析:

我们分析一下这个文件,使用文本编辑器16进制方式打开这个文件:

我爱捡垃圾:小黄鱼垃圾盒子,提取DTB文件

可以看到,开头的四个字节,被定义为了AML_也就是晶晨自己的名字。

再往后,四个字节0x0A是说明这里包含10个dtb文件,

再往后,四个字节0x02是说明版本号是v2。

再往后,出现了第一个名字是 gxl_p211_1g,后边跟着dtb文件的起始地址是0x800,文件大小是0x9800。

总结一下:

dt.img文件构成dt.img文件构成

去0x800地址看一下:

0x8000x800

不错,正是一个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文件:

我爱捡垃圾:小黄鱼垃圾盒子,提取DTB文件

链接

提取码:qkt1

总结

Linux YYDS!!


全部评论(27)
Kitanaive
6
09-14 19:06

你在说什么?

值友5482324825
1
09-14 21:13

可以引导相同cpu固件 只要把dtb文件丢进去?

弯道飙车
0
09-25 08:57

虽然不喜欢你的文章,但是阻止不了我喜欢你的名字[鼓掌]

不锈钢麻将
0
09-20 22:06

催眠效果很好,谢谢~[中枪]

dakai
0
09-19 20:12

就喜欢这样的

男勃丸儿
0
09-17 19:56
genieg 请教一下,为什么一个盒子里dtb文件中包含几个dtb?提取后选择哪个来引导其他linux呢?谢谢。 1

可能这样可以同时支持多个板子吧。启动电视盒子之后,可以用命令看cat /proc/device-tree/amlogic-dt-id 返回啥就是用的啥

静清寒
0
09-17 11:47
静清寒 内核不同,提取出来的只能运行在同版本或者兼容的版本下吧?YYDS 1
男勃丸儿 大神啊,dts改下,再重新打包呢?能行吗? 2

应该不行吧,很久之前我就这么操作过,也不知道啥原因,当时就是没成功。

genieg
0
09-17 10:37

请教一下,为什么一个盒子里dtb文件中包含几个dtb?提取后选择哪个来引导其他linux呢?谢谢。

明显没睡醒
0
09-16 20:37

不明觉厉~~~~~~~~~~

男勃丸儿
0
09-16 18:44
静清寒 内核不同,提取出来的只能运行在同版本或者兼容的版本下吧?YYDS 1

大神啊,dts改下,再重新打包呢?能行吗?