我正在尝试从源代码编译 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 uncompressedImage
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/