🧩 简述:

U-Boot、Kernel、Android 是三层不同的系统组件,负责从上电启动到运行应用的整个流程,它们各自独立编译,但又必须紧密协同工作。


📌 一、U-Boot(Bootloader)编译

项目

说明

作用

设备上电后最早运行的程序,负责初始化内存、加载 kernel、设置参数

编译产物

u-boot.bin, idbloader.img, trust.img, uboot.img

构建方式

uboot/ 目录内运行 make

典型命令

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- rk356x_defconfig && make -j

是否依赖 Android 源码

❌ 不依赖,可单独编译

是否包含 UI

❌ 纯命令行,可能含有调试 UART 输出


📌 二、Kernel(内核)编译

项目

说明

作用

操作系统核心,负责硬件驱动、进程调度、文件系统、内存管理等

编译产物

Image, kernel.img, dtb.img, modules(驱动)

构建方式

kernel/ 目录内运行 make

典型命令

make ARCH=arm64 rk356x_defconfig && make -j

是否依赖 Android 源码

❌ 可独立编译,也可被 Android build 使用

是否包含 UI

❌ 不含 UI,仅为基础系统调度支持


📌 三、Android 系统(AOSP)编译

项目

说明

作用

Android 框架、Java 层、HAL、系统服务、Launcher 等

编译产物

system.img, vendor.img, boot.img, recovery.img, userdata.img

构建方式

在 AOSP 根目录使用 source build/envsetup.shmmake

典型命令

lunch rk3566_r-userdebug && m -j

是否依赖 kernel

✅ 需要内核 Imagedtb.img 参与打包 boot.img

是否依赖 U-Boot

❌ 不直接依赖,但必须和 U-Boot 配合启动系统


三者之间的启动流程关系图:

+------------------------+
|   U-Boot(Bootloader)   |
|  ↳ 初始化内存,加载内核|
+------------------------+
            |
            ↓
+-------------------------+
|   Kernel (Linux)        |
|  ↳ 初始化驱动,挂载分区 |
+-------------------------+
            |
            ↓
+--------------------------+
|   Android System         |
|  ↳ Zygote、SystemUI、APP |
+--------------------------+

📌 四、编译顺序建议

顺序

步骤

编译 U-Boot:准备启动基础

编译 Kernel:生成 boot.img 所需内核

编译 Android:构建完整系统、打包 boot.img、system.img 等


举个例子:编译 RK3566 的三者

阶段

命令示例

U-Boot

cd u-boot && make rk356x_defconfig && make -j

Kernel

cd kernel && make rk356x_defconfig && make rk3566-evb.img -j

Android

source build/envsetup.sh && lunch rk3566_r-userdebug && m -j


💎 五、总结:

项目

编译独立性

是否含 UI

是否依赖其他

常见产物

U-Boot

✅ 可独立

uboot.img, trust.img

Kernel

✅ 可独立

可被 Android 调用

Image, dtb.img

Android

❌ 依赖 kernel

依赖 kernel

boot.img, system.img