- image.png
- 上电复位
- 在 ARM 架构中,复位向量地址一般是
0x00000000
,找到地址为 0 的内存地址空间ROM(ROM也是内存),这里是芯片厂家事先固化好的程序,主要是初始化时钟,根据拨码开关找到bootloader是存在SD卡还是MMC或者其他外存中。 - 加载引导加载程序(Boot Loader)到内存iRAM和DRAM中
- 负责初始化硬件设备(如关中断、初始化时钟和内存设备)
- 加载操作系统内核镜像zImage到内存DRAM,并将控制权交给内核
- 引导加载程序 bootloader 会根据预先配置的参数,从存储设备(如 SD 卡、NAND Flash、eMMC 等)中读取内核镜像文件(通常是
zImage
或uImage
格式)到内存 DRAM 中的指定地址, - 启动内核
- 内核初始化:
- 如果内核是以压缩形式存储的,内核会首先进行自解压操作,将自身展开到内存中;
- 内核会根据设备树或预先配置的信息,加载和初始化各种硬件驱动程序,使系统能够与硬件设备进行通信。
- 挂载临时的根文件系统:
initramfs/initrd
是一种基于内存的临时根文件系统,它以压缩的形式包含在 Linux 内核镜像中,内核执行initramfs/initrd
中的/init
脚本,加载必要的驱动(如磁盘驱动、网络驱动)并挂载真正的根文件系统(如/dev/sda1
或者网络挂载) - 挂载真正的根文件系统:内核会根据启动参数中指定的根文件系统类型和设备,将根文件系统挂载到内存中
- 内核初始化:
- 启动用户空间的第一个进程
- 通常是
init
进程(在现代 Linux 系统中,也可能是systemd
)。这个进程负责进一步初始化系统,会执行一系列的初始化系统服务脚本(如网络服务)和配置文件。 - 登录提示
- 初始化完成后,系统会显示登录提示,等待用户输入用户名和密码进行登录,进入用户交互界面(Shell或者图形会话)
- BIOS
- BIOS 主要用于传统 x86 计算机系统的硬件初始化和引导,在嵌入式系统中使用较少但并非不存在。
- BIOS:硬件初始化和启动设备选择(硬盘、U盘、光盘或者SD卡、MMC),它是一组固化到计算机内主板上一个ROM芯片上的程序。
- initramfs
initramfs
是一种基于内存的临时根文件系统,它以压缩的形式包含在 Linux 内核镜像中。在系统启动时,内核会将initramfs
解压到内存RAM中,并将其作为临时的根文件系统进行挂载。- 真正的根文件系统是系统最终使用的根文件系统,它通常存储在外部存储设备(如 SD 卡、NAND Flash、eMMC 等)上,包含了系统运行所需的所有文件和目录,而不是内存RAM中
- 嵌入式系统和个人PC
- U-Boot 和 GRUB 都是Bootloader,一个是用在嵌入式设备,一个是用在PC个人计算机或者服务器。
- zImage和vmlinuz都是内核镜像,一个是用在嵌入式设备,一个是用在PC个人计算机或者服务器。