编译内核 - JackA1ltman/NonGKI_Kernel_Build_2nd GitHub Wiki
编译内核
基础编译 · 第三步
以 小米 Mix2s 设备的第三方系统 Evolution X 10 内核为例:
- 源码地址:
https://github.com/Evolution-X-Devices/kernel_xiaomi_sdm845 - 分支:
vic
选用 AOSP Clang 12 与 Google GCC 4.9,假设目录结构如下:
/home/username/
├── Clang/clang_aosp_12/bin/
├── Gcc/
│ ├── google_gcc_arm/bin/
│ └── google_gcc_arm64/bin/
└── Kernel/evox_mix2s_a15/
第一步:确定 defconfig 文件
defconfig 文件位于内核源码的 arch/arm64/configs/ 目录下,通常命名规则为:
设备代号_defconfig内核命名_defconfig- 被修改时间最晚的 defconfig 文件
本例说明:需合并两个 config 文件:
vendor/mi845_defconfig:负责基础小米 config 项vendor/polaris.config:负责 Mix2s 专属驱动 config 项
第二步:生成 .config 文件
export PATH=/home/username/Clang/clang_aosp_12/bin:$PATH
make ARCH=arm64 O=out CC="clang" \
CROSS_COMPILE="/home/username/Gcc/google_gcc_arm64/bin/aarch64-linux-android-" \
CROSS_COMPILE_ARM32="/home/username/Gcc/google_gcc_arm/bin/arm-linux-androideabi-" \
CLANG_TRIPLE=aarch64-linux-gnu- LD=ld.lld \
vendor/mi845_defconfig vendor/polaris.config
| 参数 | 说明 |
|---|---|
ARCH=arm64 |
编译目标架构 |
O=out |
编译输出目录,避免与源码混淆 |
CROSS_COMPILE |
交叉编译器(GCC ARM64)路径 |
CROSS_COMPILE_ARM32 |
交叉编译器(GCC ARM)路径 |
CLANG_TRIPLE |
备用 Clang,主 Clang 失败时回退 |
LD=ld.lld |
替换链接器为 Clang 自带链接器 |
执行成功后将在 out/ 目录下生成 .config 文件。
第三步:正式编译
make -j$(nproc --all) ARCH=arm64 O=out CC="clang" \
CROSS_COMPILE="/home/username/Gcc/google_gcc_arm64/bin/aarch64-linux-android-" \
CROSS_COMPILE_ARM32="/home/username/Gcc/google_gcc_arm/bin/arm-linux-androideabi-" \
CLANG_TRIPLE=aarch64-linux-gnu- LD=ld.lld \
vendor/mi845_defconfig vendor/polaris.config 2>&1 | tee error.log
| 参数 | 说明 |
|---|---|
-j$(nproc --all) |
调用全部核心,也可指定如 -j4 |
2>&1 | tee error.log |
将错误输出同步写入 error.log |
编译时间约 5–30 分钟(2 核心机器可能需要 1 小时以上)。出现以下输出则代表编译成功:
OBJCOPY arch/arm64/boot/Image.gz
若无
Error 2出现,并存在上述OBJCOPY行,则编译成功,内核文件位于out/arch/arm64/boot/。