一 芯片上电与Boot ROM启动
1.硬件复位:芯片上电,arm系统硬件复位后,CPU会从BootROM(只读寄存器)中启动,这个BootROM通常是厂商定制的,负责最初的硬件初始化,如时钟,内存,外设配置等。这里的硬件初始化是为了BootROM将引导程序加载在内存中做的准备。追求快,简单(就是只初始化了一部分,这一部分可以让BootROM工作)。
2.引导程序加载:Boot ROM将引导程序(Bootloader)加载到内存中,
二 Bootloader引导
Bootloader是系统加电运行的第一段代码,在嵌入式系统中相当于PC机中的BIOS。
Bootloader通常分为两个阶段:第一阶段(FSBL)和第二阶段(如U-Boot)。1. 第一阶段引导(FSBL):
a. 硬件初始化:对硬件进行基本的初始化,包括初始化RAM(内存控制器配置),处理器(CPU,时钟,外设等)以及设置引导介质(如NAND Flash,eMMC,SD卡等。这里的硬件初始化是从新开始把所有的硬件都初始化了。
b. 加载第二阶段引导程序:将第二阶段引导程序(如U-Boot)加载到内存。
2.第二阶段引导(U-Boot):
c. 进一步硬件初始化:包括更多外设和I/O的初始化。
d. 加载Linux内核映像:从存储设备(如eMMC,NAND Flash,SD卡)中读取Linux内核映像,并将其加载到内存。
e. 配置设备树:为内核提供硬件信息。
f. 配置启动参数:如根文件系统,内核命令行等。
g. 启动Linux内核:在配置完成后,启动Linux内核。
注意:如果不是做系统移植,这个第二阶段引导(U-Boot)里面的配置参数步骤,就可以不用配置。使用默认的即可。
三 内核加载与初始化
1.内核加载:Bootloader将Linux内核映像加载到内存,并传递必要的启动参数。
2.内核初始化:Linux内核启动后,进行硬件检测和初始化,包括内存,CPU,设备树等。内核会设置系统环境,为后续的用户空间程序运行做准备。
四 用户空间启动
1.启动init进程:内核初始化完成后,会启动init进程,init进程是系统的第一个用户空间进程,负责初始化系统环境,启动必要的服务和应用程序。
2.服务和应用程序运行:在init进程启动后,用户空间的所有服务和应用程序开始运行,这些程序可以是系统自带的,也可以是用户自行安装的。例如:自己在arm开发板上写了亮灯程序,就可以运行了。