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 有关,在这里试试我的运气。
设备规格,以防万一有人问
设备规格:
- 当前 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(还没有根)
- ARMv8 64 位
现在让我们进入我的步骤,然后是我的问题。
注意:在内核自述文件中它声明使用工具链 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 文件是否正确。
这与来自 XDA 的 this XDA thread and my thread on xda. This is a cross post 有关,在这里试试我的运气。
设备规格,以防万一有人问
设备规格:
- 当前 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(还没有根)
- ARMv8 64 位
现在让我们进入我的步骤,然后是我的问题。
注意:在内核自述文件中它声明使用工具链 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 文件是否正确。