單獨編譯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)