【发布时间】:2022-03-07 18:13:34
【问题描述】:
我正在尝试为 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
我试过了,但是设备又回到了快速启动模式。
所以我开始搜索论坛。我在 stackoverflow 上找到了this question。这家伙基本上注意到他从编译器获得的图像与原始启动图像的格式不同。我检查了一下,得到了这个:
原始启动映像:
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
我看到两个主要区别:
- 显然,我为
ARM64编译,因为该设备具有64 位处理器。但由于某种原因,原始图像似乎是ARM。 - 我的图片没有压缩,原图是
zImage。
This stackoverflow 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 位并回答我自己的问题。
【问题讨论】:
标签: android linux-kernel kernel android-kernel