当前问题:如何反编译arm固件文件,以获得设备树文件?

当前问题:如何反编译arm固件文件,以获得设备树文件?

我正在尝试在 Android 电视盒上刷新 libreelec,但没有可以放入 libreelec 烤面包机的图像。在 RPi 上,这非常简单,在这里我想我必须编译一些东西,我真的没有答案。有一个基于 S802 的先前 Box 的图像(只找到了 lakka 版本(?)),但即使有 S812 的 libreelec,我也不知道谁将它从 zip/tar 中“编译”为实际的USB-SD-creator 的图像。也许它比看起来更容易,请给我提示!

起始问题:有人知道如何在基于 S812 的板上刷新/编译 Libreelec 吗?

当前问题:如何反编译arm固件文件,以获得设备树文件,这显然是在我的主板上安装不同操作系统所需要的?

看:

烤面包机:https://libreelec.tv/2016/08/usb-sd-creator/

lakka/libreelec 为上一个框构建 (.img):http://le.builds.lakka.tv/S802.M8.arm/

libreelec 从 amlinux.ru 构建,例如用于基于 S812 的盒子: https://mega.nz/#F!W0Qk2JIQ!P1iyw7dFFHvubkIUZ-i1lA!3ohmxIaJ


1. 如何从基于 S812 的主板的 libreelec 构建中创建烤面包机的映像文件?

可能的解决方案:

以下页面包含许多针对 Amlogic 板(S805 S905 S905X S912(SD 和 USB))的 Linux 版本:

看:http://freaktab.com/forum/tv-player-support/amlogic-based-tv-players/606133-linux-images-for-s805-s905-s905x-s912-sd-and-usb


2.那么我怎样才能写一个可启动的sd卡,它适合amlogic板的需要(我想我不能使用imagetoaster)?

可能的解决方案:

这个页面有点帮助,显然我只需要通过 SD 卡上的 dd 复制提取的图像(.xz -> .img),因为较新的版本包含所有必要的文件,用于启用多重启动以并行使用 android 和 linux (我稍后会解释)。

我发布这两个内容是因为我知道很多人不熟悉出色的 xz 压缩格式。下载适合您需要的映像,然后从类 Unix 系统中以 root 身份运行,将其转储到用于启动 CuBox-i 的 MicroSD 卡。假设您的 MicroSD 卡显示为 /dev/sdd:

# dd if=cubox-i.img of=/dev/sdd

看:https://people.debian.org/~gwolf/


3.我最终按照以下说明在电视盒上刷新linux:

1.) 在运行 Android 的电视盒上,将准备好的卡插入电视盒的 SD 插槽或使用 USB 读卡器。注意:我喜欢使用带有活动 LED 的读卡器,这样我就可以看到正在发生的事情。首次启动可能需要几分钟时间,闪烁的 LED 让人放心。

2.) 在 Android/设置/关于设备/系统/更新。注意:您的应用程序抽屉中可能有更新和备份应用程序。 - 在更新和备份应用程序的 UpdateLocale 部分下,单击选择,选择 aml_autoscript.zip,然后单击更新。注意:不要选中“擦除数据”和“擦除媒体”。需要明确的是,不要使用这些选项

3.) 电视盒将重新启动,会重新启动几次。最终您将看到初始登录提示。初始登录凭据,请参阅此处了解不同图像的登录信息。

系统将要求您选择一个新密码,请这样做。系统会要求您创建一个新用户和 P/W,请执行此操作。

盒子将重新启动,启动会有点慢,但最终应该会带您进入桌面。如果卡的可用空间没有扩展,请使用gparted(可能需要安装)扩展Ext分区来填充卡。

这些步骤听起来比实际要复杂得多。执行一次后,您第二次可能就不再需要本指南了。

看:http://freaktab.com/forum/tv-player-support/amlogic-based-tv-players/s905/tronsmart-ac/firmware-roms-tools-at/565449-running-linux-from-sd-card-或 USB 闪存驱动器使用 balbes150 方法和文件

结果:

关于第 3.3 点。);到目前为止,初始化“更新”后的唯一结果似乎是,每次重新启动后,我都会遇到 HDMI 信号丢失的情况,因此我重新连接 HDMI 电缆...现在我得到了我见过的最好的蓝屏(我猜是android时代的蓝屏……)。


4. 看来我必须从我的设备的实际固件中提取所谓的 .dtb 文件才能将其应用到 SD 卡...

如果有人知道 .dtb 文件的概述站点,请发帖。

看:http://www.cnx-software.com/2014/05/12/how-to-extract-a-device-tree-file-from-android-firmware-files/

结果:

完美的linux错误

致命错误:Blob 的幻数不正确

    user@user-x:~/Downloads$ unrar x -r ./M8N-M8S_Amlogic_11152015.rar

unrar 0.0.1  Copyright (C) 2004  Ben Asselstine, Jeroen Dekkers


Extracting from /home/user/Downloads/M8N-M8S_Amlogic_11152015.rar

Extracting  n200C-ota-20151103.zip                                    OK        
Extracting  recovery.img                                              OK        
Extracting  u-boot.bin                                                OK        
Extracting  aml_autoscript                                            OK        
Extracting  factory_update_param.aml                                  OK        
Extracting  readme.txt                                                OK        
All OK
user@user-x:~/Downloads$ split_bootimg.pl recovery.img
Page size: 2048 (0x00000800)
Kernel size: 6065155 (0x005c8c03)
Ramdisk size: 2057152 (0x001f63c0)
Second size: 180224 (0x0002c000)
Board name: 
Command line: 
Writing recovery.img-kernel ... complete.
Writing recovery.img-ramdisk.gz ... complete.
Writing recovery.img-second.gz ... complete.
user@user-x:~/Downloads$ dtc -I dtb recovery.img-second.gz -O dts -o meson8_tm8.dtd
FATAL ERROR: Blob has incorrect magic number
user@user-x:~/Downloads$ dtc -I dtb recovery.img-second.gz -O dts -o bla.dtd
FATAL ERROR: Blob has incorrect magic number
user@user-x:~/Downloads$ 

答案1

首先获取库存恢复分区。

在 PC 上,下载并解压缩库存图像。然后解压firmware.img文件Amlogic 解包器并找到该文件recovery.PARTITION

或者

在 Android 设备终端、twrp 或 adb 等上,输入

dd if=/dev/block/recovery of=recovery.PARTITION

现在转移恢复.分区文件到 termux 主文件夹或 linux 主文件夹。 DTB 文件嵌入在该文件中,因此现在只需将其提取即可。假设你已经安装了git、python、perl 和 wget 等到 termux。

#Install binwalk
git clone https://github.com/ReFirmLabs/binwalk.git
cd binwalk
python setup.py install
cd ..; rm -Rf binwalk

#Get split_bootimg.pl script
wget https://gist.githubusercontent.com/jberkel/1087743/raw/45046f87176dfacdc22af4290f89a0d2e0df1dbb/split_bootimg.pl
chmod +x split_bootimg.pl

#Split recovery.PARTITION
./split_bootimg.pl recovery.PARTITION

#Unpack recovery.PARTITION-second.gz
gunzip recovery.PARTITION-second.gz

#Get offset of embedded DTB in recovery.PARTITION-second by searching for bytes D00DFEED
DTBOFFSET=$(binwalk -R "\xD0\x0D\xFE\xED" recovery.PARTITION-second | awk 'NR > 3 { print $1}' | head -n 1)
#Get length of DTB in recovery.PARTITION-second this is next 4 bytes after D00DFEED
DTBLEN=$((16#$(dd if=recovery.PARTITION-second bs=1 skip=$(($DTBOFFSET + 4)) count=4 status=none | od -tx1 | head -n 1 | cut -d ' ' -f 2- | sed 's/ //g' )))
#Now extract and create dtb file
dd if=recovery.PARTITION-second of=mybox.dtb bs=1 skip=$DTBOFFSET count=$DTBLEN

相关内容