在Ubuntu中尝试编译Android内核时出现错误。

3

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

Kernel ---- /home/livlogik/android/kernel/H901bk_L_Kernel/

如果有人能帮我,那就太好了。 如果已经有类似的问题,请原谅我没有找到答案。

谢谢,

Zach


似乎是错误的工具链。尝试使用这个。在构建之前,请确保正确设置PATHCROSS_COMPILEARCH环境变量,像往常一样。 - Sam Protsenko
点击这里下载工具链,点击这里配置工具链。要构建内核,我猜你需要先运��make defconfig(甚至在应用Android更改之前使用merge_config.sh脚本),然后运行make来构建内核。最后,我猜你需要为你的开发板构建设备树。 - Sam Protsenko
基本上是的,但我认为arm-linux-androideabi实际上是Linux工具链,旨在用于Linux用户空间程序。toolchains/目录中还有其他东西吗? - Sam Protsenko
@SamProtsenko 谢谢。我刚试了一下,还是出现错误。我正在按照Linaro的说明进行操作,希望我能做对啦。 - Zach
@SamProtsenko 谢谢,是的,一旦我发布我的第一个内核并学到更多关于它的知识,我会发布它。还有,谢谢,我昨晚修复了SELinux,抱歉我应该发布我已经解决了它,这样你就不用寻找答案了。我同意,似乎与为arm编写内核不同。感谢所有的帮助。如果我找到解决SD卡问题的方法,我会告诉你的 :) - Zach
显示剩余18条评论
2个回答

2
从构建错误信息中可以看到:
驱动程序/media/platform/msm/camera_v2/sensor/msm_sensor.c:20:27: 致命错误: ./mh1/msm_mh1.h: 没有那个文件或目录 #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文件。
更新
回答您在评论中的问题:
“有没有办法使它压缩成zImage?”
来自Documentation/arm64/booting.txt
“AArch64内核目前不提供解压程序,因此如果使用压缩的Image目标(例如Image.gz),则需要引导加载程序执行解压缩(gzip等)。对于没有实现此要求的引导加载程序,可以使用未压缩的Image目标。”
基本上,zImage只是被压缩和自解压的Image。因此,zImage文件包含在开头用于解压缩gzip存档的程序,后跟gzip压缩的Image,当由引导加载程序运行内核时,它会自行解压缩(因此称为“自解压缩”),然后开始运行。
“...所以我可以使其可闪存”
在arm64的情况下,您没有zImage,因此最有可能需要使用Image文件(其工作方式相同,但只是大小更大)。您可以从Image文件创建boot.img并构建AFS RAM磁盘映像(使用mkbootimg工具),然后只需执行fastboot flash boot boot.img。请参考文档作为示例。当然,对于您的平台,某些事情可能会有所不同,因此请尝试查找适用于您平台的说明。

你太棒了!我今晚会尝试一下,祈求好运!非常感谢您,先生。我永远也想不到这个。 - Zach
非常感谢,它已经编译成功了,我没有看到任何错误!有没有办法让它压缩成zImage?这样我就可以将其刷入设备中了。 - Zach
好的,所以没有办法像CWM或TWRP一样在恢复模式中进行可刷写吗?他们必须通过Fastboot进行刷写吗? - Zach
我不了解CWM / TWRP(从未真正听说过它),但是如果它允许您刷写引导分区,您可以使用获得的boot.img文件(我已经描述了如何创建它)并将其刷写到引导分区。因为boot.img只是引导分区的映像。这足够了吗?如果不行,请描述CWM / TWRP使用的图像格式,也许我可以帮助您想出一种从内核的“Image”文件中创建它的方法。 - Sam Protsenko
好的,我会试着搞一下。非常感谢你的帮助!!你有电子邮件或其他联系方式吗?有时候我想请教你的意见。 - Zach
显示剩余2条评论

1
你需要安装正确的工具链: git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9 并适当地配置Makefile。 错误的工具链在这里: git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-android-4.9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接