解包64位设备的“非标准”Boot.img问题

时间:2016-09-08 22:33:15

标签: android linux linux-kernel 64-bit

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

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

设备规格:

  • 当前Android版本: Android Lollipop 5.1.1
  • 芯片组: Marvell Armada PXA1908(注意:由于这是一个很少使用的芯片,CF-Auto根不起作用)
  • 自定义恢复状态:TWRP 3.0.2-0(不使用棒棒糖)
  • 根状态(这在技术上就是我在这里的原因):Android KitKat 4.4.4(Root),Android Lollipop 5.1.1(尚无根据)
  • ARMv8 64位

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

注意:在内核自述文件中它声明使用工具链4.8但是当我使用它时,它抱怨无法找到gcc。另外在阅读我说它“获取工具链下载并安装ARM EABI的arm-eabi-4.8工具链。(64位)”并且在reading up上,它表示使用aarch64 ARM 64位设备。

设备源代码可在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      - module:Kernel / drivers / / .ko 注意:当尝试使用32位ARM工具链进行编译时,它会失败,因为在arm64中找到了配置,其他配置也可以随时找到。

所以知道我有一个内核(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中的内核被剥离了调试项而我的调试项没有?如果是这样,我应该查看如何解决这个问题。

但我在尝试通过十六进制提取ramdisk 时遇到了麻烦。 任何能够教导/帮助我正确提取boot.img的人都可以(使用unmkbootimg或hex编辑器等工具)

如果您想亲自查看一下,我已附上必要的文件。 文件:Samsung xCover3 Files

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

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

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