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

Bog*_*rax 6 bootable homebrew openelec device-tree multiboot

我正在尝试在 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 build (.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 板的 Linux 版本(S805 S905 S905X S912(SD 和 USB):

见: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)?

可能的解决方案:

这个页面有点帮助,显然我只需要通过 dd 在 SD 卡上复制提取的图像(.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.) 电视盒将重启,它会重启几次。最终您将看到初始登录提示。初始登录凭据,有关不同图像的登录信息,请参见此处。

您将被要求选择一个新密码,请这样做。您将被要求创建一个新用户和密码,这样做。

盒子将重新启动,这次启动会有点慢,但最终应该会带你到桌面。如果卡的可用空间没有得到扩展,请使用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-or-usb-flash-drive-using-balbes150-method-and-files

结果:

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


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$ 
Run Code Online (Sandbox Code Playgroud)

5p0*_*b0b 1

首先获取库存恢复分区。

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

或者

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

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

现在将recovery.PARTITION文件传输到 termux 主文件夹或 linux 主文件夹。DTB 文件嵌入在该文件中,因此现在只需将其提取即可。假设你已经在 termux 上安装了git、python、perl 和 wget 等

#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
Run Code Online (Sandbox Code Playgroud)