目录
入式 Linux 启动流程
简介
对于一个 SoC 芯片而言,bootloader 必不可少。因为一个 SoC 芯片一定不是独立存在的,它的载体是经过严格设计的一块硬件电路板。从电路板上电到 SoC 可以执行 Linux Kernel 并最终挂载文件系统,需要在不同阶段执行不同的特定代码。
SoC 上电伊始,根据设定的启动方式,在合适的地方运行 BootRom 代码,用于对 SoC 做一个最基本最简单的初始化。这是 SoC 执行的第一个程序。
当 SoC 执行完 BootRom 程序后,需要初始化与电路板相关的各种外设等,此时需要一份 Bootloader 来完成此项工作。
当电路板初始化完成后,SoC 可以执行任何的程序,包括加载 Kernel 以及文件系统等。
当然,若 SoC 内部 RAM 足够大同时又不考虑启动的灵活性,则完全可以将 BootRom 做成 bootloader,用于加载 Linux Kernel。
启动流程
一、硬件上电
二、一级启动:bootROM
Boot ROM 是厂商都无法进行更改,固化在芯片内部的ROM;
作用:确定用于启动的设备;从启动的设备的位置搬移一小段代码(4k/8k/16k)到RAM中运行,即SPL。
三、二级启动:SPL + uboot
1. SPL: Secondary Program Loader:
作用:初始化 DDR;从启动的设备搬移第二段代码到 RAM 中,加载 uboot(有些 SoC 是将 bootloader 复制到 RAM 后,再进行 DDR 初始化)。
2. uboot: Universal boot loader:
U-Boot 从启动设备上面读取、分析环境变量获得 kernel 和 rootfs 存储位置,以及所需的 kernel command line;
自动检测系统 RAM 和 eMMC/Nand Flash 容量和参数;
设置以太网口 MAC 地址,并配置好硬件准备加载 Linux kernel;
&n