使用 clang-r383902 为 Android 11 (R) Beta 版本 1 编译 Linux 内核时出错

Error when Compiling Linux Kernel for Android 11 (R) Beta version 1 with clang-r383902

我正在使用 Ubuntu 20.04 机器,安装了最新版本的 platform-tools 和(我相信)所有必要的依赖项。

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

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

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

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

make floral_defconfig
make menuconfig

接下来,使用 Nathan Chance's guide from Github,我 运行 以下命令:

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.

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

示例: 让 O=out

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

改变这个:

使floral_defconfig

制作菜单配置

为此:

使floral_defconfigO=输出

make menuconfig O=out

构建它:

制作 O=out

记得先在源码目录做distclean