编译内核 - JackA1ltman/NonGKI_Kernel_Build_2nd GitHub Wiki

编译内核

基础编译 · 第三步

小米 Mix2s 设备的第三方系统 Evolution X 10 内核为例:

  • 源码地址:https://github.com/Evolution-X-Devices/kernel_xiaomi_sdm845
  • 分支:vic

选用 AOSP Clang 12Google 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/