这与xda上的this XDA线程和my thread有关。这是来自XDA的cross post,试试我的运气。
设备规格,以防万一有人问
设备规格:
现在让我们进入我的步骤,然后解决我的问题。
注意:在内核自述文件中它声明使用工具链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。
或
虽然当它意味着是一个Image.gz时也尝试将其保存为zImage,或者它们在不丢失任何错误的情况下提取它,但是当使用十六进制编辑器查看提取的文件时,它在整个文件中都是00,因此是一个无用的文件。
因此我尝试使用十六进制编辑器手动解压缩并设法获取内核。左边是我的编译,右边是十六进制版本。
注意大小的差异,这是因为boot.img中的内核被剥离了调试项而我的调试项没有?如果是这样,我应该查看如何解决这个问题。
但我在尝试通过十六进制提取ramdisk 时遇到了麻烦。 任何能够教导/帮助我正确提取boot.img的人都可以(使用unmkbootimg或hex编辑器等工具)
如果您想亲自查看一下,我已附上必要的文件。 文件:Samsung xCover3 Files
感谢任何帮助。
答案 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文件都是正确的。