linux-kernel - 使用 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-
内核开始编译,直到我收到以下输出:
在 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_defconfig O=out
使 menuconfig O=out
构建它:
使 O=out
记得先在源目录下make distclean
推荐阅读
- php - 使用 PHP 获取客户端 IP
- algorithm - 基于玩家偏好的团队创建算法
- javascript - ReactJS - 如何找到 paymentId 的值并呈现它的值作为回报
- ruby-on-rails - 续集模型属性(db 列)的 instance.attribute_name 和 instance[:attribute_name] 是否完全相同?
- ios - HTTP POST 不适用于我的 ios 应用程序中的 Route 类,swift 4.1
- c# - 出现频率最高的单词图表
- python-2.7 - 使用 BS4 抓取网站数据时出错
- c++ - 删除静态向量中的唯一类对象指针
- asp.net-mvc - 编辑用户删除密码 - ASP.NET MVC
- javascript - 在Node Js中一一读取目录中的多个文件