首页 > 解决方案 > 使用 clang-r383902 为 Android 11 (R) Beta 版本 1 编译 Linux 内核时出错

问题描述

我正在使用安装了最新版本的平台工具和(我相信)所有必要依赖项的 Ubuntu 20.04 机器。

我创建了一个新目录 ~/beta1-kernel-coral 并在该目录中克隆了内核:

git clone -b android-msm-coral-4.14-r-beta-1 https://android.googlesource.com/kernel/msm/

我注意到使用的 clang 版本是 clang-r383902。我下载了这个目录并将其解压缩,以便在 ~/beta1-kernel-coral 中有两个单独的目录:msm 和 clang-r383902。

在 ~/beta1-kernel-coral/msm 中,我运行了两个命令:

make floral_defconfig
make menuconfig

接下来,使用来自 Github 的 Nathan Chance 指南,我运行了以下命令:

PATH="/home/jherwig/beta1-kernel-coral/clang-r383902/android_prebuilts_clang_host_linux-x86_clang-6443078-10.0/bin:/usr/bin:/usr/bin:${PATH}" make -j$(nproc --all) ARCH=arm64 CC=clang CLANG_TRIPLE=aarch64-linux-gnu- CROSS_COMPILE=aarch64-linux-android- CROSS_COMPILE_ARM32=arm-linux-androideabi-

内核开始编译,直到我收到以下输出:

https://pastebin.com/61pkd6uf

在 Nathan 的指南中,他指导使用:

PATH="<path to clang folder>/bin:<path to 64-bit gcc folder>/bin:<path to 32-bit gcc folder>/bin:${PATH}" \ ...

由于我安装了 gcc-multilib,我认为<path to 64-bit gcc folder>并且<path to 32-bit gcc folder>会在 /usr/bin 中。当我输入which gcc终端时,我得到/usr/bin/gcc。

标签: linux-kernelclangcross-compilingbetaandroid-11

解决方案


CAF 内核不是主线内核,您不能这样编译它们。您必须运行 make distclean 并为每个 make 命令指定一个输出目录,包括 defconfig

示例:使 O=out

如果您没有为每个 make 命令指定 O=out,您将遇到这些错误分配给 O 的值可以是任何值,不必为 out,但您不能在与源代码相同的目录中构建内核

改变这个:

制作floral_defconfig

制作菜单配置

对此:

制作floral_defconfig O=out

使 menuconfig O=out

构建它:

使 O=out

记得先在源目录下make distclean


推荐阅读