【RK3576】【Android14】如何在Android14下单独编译kernel-6.1?

单独编译kernel依赖如下几个源码:

【交叉编译工具链】

prebuilts/clang/host/linux-x86/clang-r487747c

【内核源码】

kernel-6.1

为什么Android下编译内核使用clang作为交叉编译工具链而不是GCC?

Android 14 选择使用预置的 Clang 工具链(如 clang-r487747c)而非 GCC 来编译内核,主要是因为 Google 为统一和掌控整个 Android 生态的构建环境。Clang 作为 LLVM 项目的一部分,相比 GCC 具有编译速度更快、内存占用更低、错误提示更清晰易懂等优势,并且其模块化设计更易于集成到 Android 的现代构建系统(如 Soong/Bazel)中。更重要的是,Google 能主动为 Clang 开发和集成针对 Android 平台的特定优化、安全强化特性(如更严格的未定义行为检查、内核控制流完整性保护 CFI)以及对现代 C/C++ 标准的支持,从而确保跨不同设备和内核版本构建的一致性、安全性和性能。

编译kernel-6.1内核,配置如下:

复制代码
# 配置交叉编译工具链路径
export PATH=【绝对路径】/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH

# 配置menuconfig
make LLVM=1 LLVM_IAS=1 ARCH=arm64 rockchip_defconfig

# 编译内核源码
make LLVM=1 LLVM_IAS=1 ARCH=arm64 -j16 Image.gz dtbs

参数解析如下:

【LLVM=1】:

核心参数。告知内核构建系统使用 clang 作为编译器,而不是默认的 gcc。

【LLVM_IAS=1】:

告知内核构建系统使用 Clang 的集成汇编器来编译汇编代码(.S 文件),而不是使用 GNU 的 as 汇编器。这避免了潜在的不兼容问题。

【ARCH=arm64】:

指定目标 CPU 架构为 ARM64(AArch64)

相关推荐
p66666666683 小时前
【☀Linux驱动开发笔记☀】linux下led驱动(非设备树)_03
linux·驱动开发·笔记·嵌入式硬件·学习
以琦琦为中心3 小时前
在RK3568开发板嵌入式开发中,配置NFS服务是实现与Ubuntu虚拟机之间文件共享的常用方法
linux·运维·ubuntu·rk3568
Nimsolax4 小时前
Linux网络DNS与ICMP
linux·网络
赖small强4 小时前
【Linux驱动开发】Linux UART 通信详解:从硬件到驱动再到应用
linux·驱动开发·uart
赖small强4 小时前
【Linux驱动开发】Linux 设备驱动中的阻塞与非阻塞 I/O:机制、源码与示例
linux·驱动开发·阻塞与非阻塞
yolo_guo4 小时前
opencv 学习: QA_02 什么是图像中的高频成分和低频成分
linux·c++·opencv·计算机视觉
q***56384 小时前
在 Ubuntu 22.04 上安装和配置 Nginx 的完整指南
linux·nginx·ubuntu
大聪明-PLUS4 小时前
Linux 中的 CPU。文章 1. 利用率
linux·嵌入式·arm·smarc
热爱编程的OP5 小时前
Linux进程池与管道通信详解:从原理到实现
linux·开发语言·c++
想学好C++的oMen6 小时前
文件基础IO
linux·服务器