这与 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。
或
虽然当它本应是 Image.gz 时也尝试将其另存为 zImage,或者他们将其提取而不抛出任何错误,但是当使用十六进制编辑器查看提取的文件时,整个文件都是 00,因此是一个无用的文件。
因此,我尝试使用十六进制编辑器手动解包并设法获取内核。左边是我的编译版本,右边是十六进制版本。
请注意大小差异,这是因为 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/