🧩 简述:
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.sh 后 m 或 make |
典型命令 | lunch rk3566_r-userdebug && m -j
|
是否依赖 kernel | ✅ 需要内核 Image 和 dtb.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 等
|