Android 设备供应商在 64 位 SOC 上刷入 32 位内核?

Android device vendor flashing 32-bit kernels on 64-bit SOCs?

我正在尝试为 Android 设备重新编译内核。设备是小米红米7A。它有一个 64 位处理器 Qualcomm Snapdragon 439。我编译内核没有错误,在 arch/arm64/boot/ 下得到 Image 文件,到目前为止一切顺利。

我试过将它刷写到设备上。首先,我下载了库存 boot 图片。然后,我使用 Android Image Kitchen:

解压它
./unpackimg original-boot

所以现在,根据那里的所有教程,应该用新编译的替换旧的启动映像,重新打包映像并将其闪存到设备上。

# replace the boot-img in the split-img folder
./repackimg
# now I get a fresh image-new.img, so I flash it
fastboot flash boot image-new.img

我试过了,但设备又回到了快速启动模式。

所以我开始搜索论坛。我在 Whosebug 上找到了 。这家伙基本上注意到他从编译器获得的图像与原始引导图像的格式不同。我检查了一下,得到了这个:

原始引导映像:

file boot-kernel
boot-kernel: Linux kernel ARM boot executable zImage (little-endian)

编译的一个:

file Image
Image: Linux kernel ARM64 boot executable Image, little-endian, 4K pages

我看到两个主要区别:

  1. 我为 ARM64 编译,显然,因为该设备有 64 位处理器。但由于某种原因,原始图像似乎是 ARM.
  2. 我的图片没有压缩,原图是zImage.

This Whosebug question 表明只有 32 bit ARM 处理器支持 zImage 图像。好的,这很酷,但是等等...这是否意味着我的 64 位 arm 设备运行 32 位 arm 引导映像?

为了确保它不是 Android-Image-Kitchen 错误,脚本是好的,我解压了原始图像,然后重新打包并原封不动地闪到设备上:

./unpackimg original-img
./repackimg
fastboot flash boot image-new.img

开机!所以,Android-Image-Kitchen肯定是不行的。

我是不是遗漏了什么或者这是否意味着该设备确实在 32 位系统下工作,即使处理器支持 64 位? Proof that it's 64-bit on qualcomm official website

有什么方法可以确定吗?我怎样才能找到它?因为如果它是真的,我必须使用 32 位 arm 工具链而不是 64 位工具链来编译它。帮助?

UPD: 我在设备上做了 getconf LONG_BIT。够愚蠢的,它返回 32。是的,小米刚刚将 32 位内核闪存到 64 位 SOC 上。哈哈。我将尝试将内核编译为 32 位并回答我自己的问题,如果我成功的话。

嗨,Redmi 8A 具有相同的 SoC,但它具有 64 位内核和 OS...有些人成功地将 8A 内核移植到 7A 当然不是没有问题..在你的情况下你可能能够将 8A 图像与 7A 图像组合...希望这些信息对您有所帮助。