到目前為止拓巧,我們所有廉價的Android設(shè)備均基于較舊的Linux內(nèi)核(3.0.x狮崩,3.4.x)阻肿,該內(nèi)核仍使用板文件(arch / arm / board)桨醋,但我們最近看到諸如Amlogic和Rockchip之類的公司發(fā)布了源代碼使用Linux內(nèi)核3.10.x時油航,這些版本之間的主要區(qū)別之一是從主板文件轉(zhuǎn)移到扁平化的設(shè)備樹以及多平臺支持。如果完全實現(xiàn),則單個內(nèi)核映像應(yīng)該能夠引導(dǎo)多個硬件平臺导梆,以及所有低級配置都由設(shè)備樹文件處理滓彰。由于我已經(jīng)連接了Tronsmart Vega S89的串行端口進行調(diào)試控妻,而且這是一個新聞日,所以我認為我可能會嘗試引導(dǎo)自己編譯的Linux內(nèi)核揭绑,但是挑戰(zhàn)之一是獲取設(shè)備樹文件弓候。我將展示如何從固件中提取它。也應(yīng)該可以直接從閃存中獲取它他匪,但是“ cat / proc / mtd”并不像以前的版本那樣顯示完整的分區(qū)列表菇存。
我已經(jīng)在Ubuntu 14.04中執(zhí)行了以下步驟。首先要安裝一些工具:將用于將dtb(二進制)文件反編譯為dtd(文本)文件的設(shè)備樹編譯器邦蜜,以及將標(biāo)準(zhǔn)PERL腳本從boot.img中提取文件的split_bootimg.pl:
sudo apt-get install device-tree-compiler
wget https://gist.githubusercontent.com/jberkel/1087743/raw/5be96af0e1c1346678379b0c0f0330b71df51f25/split_bootimg.pl
sudo cp split_bootimg.pl /usr/local/bin
sudo chmod +x /usr/local/bin/split_bootimg.pl
我將以M8 / TM8固件(Amlogic S802)為例依鸥。確切的過程在固件文件之間會有所不同,但是如果您可以啟動boot.img悼沈,則該過程應(yīng)該獨立于平臺并且適用于任何ARM SoC贱迟。下載并解壓縮固件文件(TM8 ap6330_03102014A_0410_ROOT.rar)之后,讓我們創(chuàng)建一個工作目錄井辆,并解壓縮“ OTA”文件关筒。
mkdir TM8
cd TM8
unzip ../k200-ota-20140410.zip
現(xiàn)在,我們得到了一堆文件杯缺,包括boot.img蒸播。很好!是時候運行split_bootimg.pl腳本提取其內(nèi)容了:
split_bootimg.pl boot.img
Page size: 2048 (0x00000800)
Kernel size: 7209567 (0x006e025f)
Ramdisk size: 2024995 (0x001ee623)
Second size: 17699 (0x00004523)
Board name:
Command line:
Writing boot.img-kernel ... complete.
Writing boot.img-ramdisk.gz ... complete.
Writing boot.img-second.gz ... complete.
因此萍肆,我們有了內(nèi)核袍榆,虛擬磁盤和恰好是dtb文件的“第二個文件”。現(xiàn)在塘揣,我們可以使用dtc(設(shè)備樹編譯器)對其進行反編譯包雀,如下所示:
dtc -I dtb boot.img-second.gz -O dts -o meson8_tm8.dtd
就是它。這是M8設(shè)備樹文件亲铡。
對于Tronsmart Vega S89(Elite)才写,我也做過同樣的事情葡兑。S89固件通常作為IMG文件分發(fā),以與AML Flash Burning工具一起使用赞草,但是我還沒有找到提取此類文件的方法讹堤。但是消请,我在freaktab上找到了可以通過SD卡更新的“ OTA”固件钉答,并且可以提取Tronsmart Vega S89 Elite和Vega S89的設(shè)備樹文件草巡。M8和S89 Elite DTD文件非常相似辐棒,但是M8中的最大CPU頻率似乎更高,并且還有其他明顯的細微差別挖腰。Vega S89 DTD文件似乎相差很大捉捅。