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

Unpacking 'Non-Standard' Boot.img Problems for 64 Bit Device

这与来自 XDA 的 this XDA thread and my thread on xda. This is a cross post 有关,在这里试试我的运气。

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

设备规格:

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

注意:在内核自述文件中它声明使用工具链 4.8 但是当我使用它时,它抱怨找不到 gcc。同样在自述文件中,它指出 "get Toolchain download and install arm-eabi-4.8 toolchain for ARM EABI.(64bit)" 并且当 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.gz、.dts 和 .dtb 文件。

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

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

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

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

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

但是我在尝试通过十六进制提取 ramdisk 时遇到了麻烦。 那么有没有人能够 Teach/Help 我正确地提取 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 (ZERO PADDING BETWEEN FILES), Threaded the end of my file is "CE 24 00".

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