android - 解包 64 位设备的 'Non-Standard' Boot.img 问题

标签 android linux linux-kernel 64-bit

这与 this 有关XDA 线程和 my thread在xda上。这是 cross post来自 XDA,在这里试试我的运气。

设备规范,以防万一有人问

设备规范:

  • 当前 Android 版本:Android Lollipop 5.1.1
  • 芯片组:Marvell Armada PXA1908(注意:由于这是一款很少使用的芯片,CF-Auto root 将无法使用)
  • 自定义恢复状态:TWRP 3.0.2-0(不适用于 lollipop)
  • Root 状态(这就是我来这里的技术原因):Android KitKat 4.4.4(Root),Android Lollipop 5.1.1(还没有 ROOT)
  • ARMv8 64 位

现在让我们进入我的步骤,然后是我的问题。

注意:在内核自述文件中声明使用工具链 4.8,但是当我使用它时,它提示找不到 gcc。同样在自述文件中,它声明 “获取工具链下载并安装 ARM EABI 的 arm-eabi-4.8 工具链。(64 位)” 以及何时 reading up在上面,它说对 ARM 64 位设备使用 aarch64。

设备源代码可以在Here找到

cd ~/android
export CROSS_COMPILE=~/android/ndk/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-
cd ~/android/kernel
make ARCH=arm64 pxa1908_xcover3lte_eur_defconfig
make ARCH=arm64

这会输出:Image、Image.gz、.dts 和 .dtb 文件。

内核自述文件在哪里(我相信自 kitkat 以来还没有更新)说输出将是, - 内核:内核/arch/arm/boot/zImage - 模块:内核/驱动程序//.ko 注意:当尝试使用 32 位 ARM 工具链编译时失败,因为配置是在 arm64 中找到的,而其他配置是在 arm 中找到的。

知道我有一个内核(Image 或 Image.gz),以及一些 .dts 和 .dtb 文件。现在解压 boot.img,这就是问题所在。当尝试使用 abootimg 或各种不同版本的 unmkbootimg 等工具时,他们提示非标准的 boot.img。

Non-Standard boot.img

Non-Standard boot.img 2

虽然当它本应是 Image.gz 时也尝试将其另存为 zImage,或者他们将其提取而不抛出任何错误,但是当使用十六进制编辑器查看提取的文件时,整个文件都是 00,因此是一个无用的文件。

因此,我尝试使用十六进制编辑器手动解包并设法获取内核。左边是我的编译版本,右边是十六进制版本。

Kernels, Hex and Compiled

请注意大小差异,这是因为 boot.img 中的内核去掉了调试项而我的没有吗?如果是这样,我应该看看如何解决这个问题。

但是我在尝试通过十六进制提取虚拟磁盘时遇到了麻烦。 那么有没有人能够教我/帮助我正确提取 boot.img(使用 unmkbootimg 之类的工具或使用十六进制编辑器)

如果你想自己看的话,我已经附上了必要的文件。 文件:Samsung xCover3 Files

感谢任何帮助。

最佳答案

经过无数次的试错,终于输出了ramdisk.cpio.gz。 十六进制的 Gzip 文件的开头是 1F 8B 08,因此当您在编辑器应用程序中使用搜索功能时,您可以将结果缩小到 1 或 2 个文件(对我来说 2 个文件,因为我的内核和 ramdisk 都是 gzip 压缩的) .然后你一直跟着它直到你找到一大堆零(看起来它们在文件之间传递)。当你到达一堆零时,在另一个十六进制的末尾包括第一个“00”。例如。我的一个 gzip 文件的结尾是“CE 24 00 00 00....00(文件之间的零填充)”,我文件的结尾是“CE 24 00”。

知道这一点后,我能够成功提取并验证我的内核和 ramdisk 文件是否正确。

关于android - 解包 64 位设备的 'Non-Standard' Boot.img 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39401168/

相关文章:

linux - 试图将特定文件复制到特定文件夹,但有一个问题

linux-kernel - nosmep 和 noexec=off 有什么区别

c - "Unable to handle kernel NULL pointer dereference at Virtual Address."- 向内核模块发送信号 |哎呀

java - 如何解析并返回指向单独的 strings[] 或字符串的链接列表?

java - R.java 文件在 Android 中未更新

c++ - 在 OS X 上,简单的 C++ 程序会给出不正确的结果(这是命令行选项 'c++03' 与 'c++11' 的结果)

linux - 读取过程未正确显示数据

c# - 从 DataTable 填充 ListView

java - 打印收据时如何在项目之间提供固定空间并在项目值之间提供相同的空间

C++ - 函数返回,但不交回控制权