android - 尝试在 ubuntu 中编译 android 内核时出错

标签 android linux-kernel arm64

我正在尝试从源代码编译 Android 内核,并且我已经下载了所有正确的包来执行此操作,但由于某种原因我收到此错误:

arm-linux-androideabi-gcc: error: unrecognized command line option '-mgeneral-regs-only'
/home/livlogik/android/kernel/H901BK_L_Kernel/./Kbuild:35: recipe for target 'kernel/bounds.s' failed
make[1]: *** [kernel/bounds.s] Error 1
Makefile:858: recipe for target 'prepare0' failed
make: *** [prepare0] Error 2

我有最新的 NDK,如果有帮助,我正在使用 Ubuntu 15.10 64 位。

这是我拥有 NDK 和内核的地方:

NDK ----/home/livlogik/android/ndk/

内核 ----/home/livlogik/android/kernel/H901bk_L_Kernel/

如果有人能帮助我,那就太好了。抱歉,如果这已经发布,我可以找到答案。

谢谢,

扎克

最佳答案

从构建错误信息可以看出:

drivers/media/platform/msm/camera_v2/sensor/msm_sensor.c:20:27: fatal error: ./mh1/msm_mh1.h: No such file or directory

#include <./mh1/msm_mh1.h>

编译器找不到msm_mh1.h 文件。这是因为为 #include 指令指定的路径不正确。很可能是打字错误:./ 应该是 ../.

要修复该错误,请在 drivers/media/platform/msm/camera_v2/sensor/msm_sensor.c 文件中更改此行:

#include <./mh1/msm_mh1.h>

到这一行

#include "../mh1/msm_mh1.h"

在这个 make 命令之后应该可以正常工作。此外,内核镜像文件将在 arch/arm64/boot 中可用,它不是文档中所述的 zImage,它实际上是 Image.gz .未压缩的内核镜像是 Image 文件。

更新

在评论中回答您的问题:

Is there any way to make it compress into a zImage?

来自 Documentation/arm64/booting.txt :

The AArch64 kernel does not currently provide a decompressor and therefore requires decompression (gzip etc.) to be performed by the boot loader if a compressed Image target (e.g. Image.gz) is used. For bootloaders that do not implement this requirement, the uncompressed Image target is available instead.

基本上 zImage 只是 gzip 压缩和自解压的 Image。所以 zImage 文件由开始解压 gzip 存档的程序组成,然后是 gzip 压缩的 Image,当内核由引导加载程序运行时,它会自行解压(因此“自解压” term)然后开始运行。

...So I can make it flashable

在 arm64 的情况下,您没有 zImage,因此您很可能需要使用 Image 文件(其作用相同,但只是大小不同更大)。您可以从 Image 文件创建 boot.img 并构建 AFS ramdisk(使用 mkbootimg 工具),然后执行 fastboot flash boot boot .img。引用this例如文档。当然,对于您的平台,有些事情可能会有所不同,因此请尝试查找适用于您的平台的说明。

关于android - 尝试在 ubuntu 中编译 android 内核时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35631171/

相关文章:

inno-setup - Inno Setup 可以检测到可以模拟 x64 的 ARM64 硬件上的 Windows11 吗?

android - 针对导致问题的不同密度优化应用程序

android - 如何使用 RxJava 和 Realm 构建本地数据源?

android - 在脚手架中,错误已显示为 "No value passed for parameter ' 内容'“- 我在下面附上了快照

java - 安卓/乱舞 : Unable to instantiate activity component?

linux - Docker: "From"指令的好处?

linux - 如何让 tickless 内核工作? nohz_full、rcu_nocbs、isolcpus 还有什么?

linux - Linux 内核的哪一部分强制执行权限分离以及如何执行?

linux - 尽管有 CONFIG_COMPAT,但在 aarch64 上运行 32 位 ARM 二进制文件不起作用

assembly - ARM ;或开关;汇编;