一 、Linux 系统构成
- Uboot
- kernel
- 设备树
- 根文件系统
Linux系统的启动过程通常包括以下几个步骤:
- BIOS/UEFI阶段:计算机通电后,进行硬件自检和初始化。检测各硬件设备,初始化它们,并检查引导设备的可用性。
- 引导加载程序阶段: 引导加载程序负责加载操作系统内核和初始化RAM磁盘映像。
- 内核引导阶段:引导加载程序加载Linux内核到内存中。 内核初始化并配置硬件设备、文件系统等,建立起初始的内存管理和进程管理结构。
- 初始化ramdisk阶段:在一些系统中,内核会加载ramdisk(initramfs或initrd)到内存中。
ramdisk包含必要的驱动程序和工具,用于在根文件系统挂载前提供必要的支持。 - 根文件系统挂载阶段:内核挂载根文件系统到指定的挂载点(通常为根目录“/”)。根文件系统包含操作系统的核心文件和目录结构,是系统启动后的基础文件系统。
- 用户空间初始化阶段:内核启动用户空间的第一个进程(init进程或systemd),作为系统的第一个用户空间进程。init进程负责启动系统中的各种服务和用户空间程序,完成系统的初始化和启动过程。
- 用户登录阶段:用户空间初始化完成后,系统进入登录界面或命令行提示符,等待用户登录。
用户登录后,可以启动应用程序、执行命令等,正常使用Linux系统。
Uboot:
Uboot 的全称 Universal Boot Loader,是遵循 GPL 条款的开源项目。
U-Boot的主要作用是用来启动操作系统内核。
操作内核分为两个阶段(boot+loader):
- boot 阶段启动系统,初始化硬件设备,建立内存空间映射图,将系统的软硬件带到一个合适的状态。
- loader阶段将操作系统内核文件加载至内存,之后跳转到内核所在地址运行。
Kernel:
一个计算机系统是由软件和硬件构成的。计算机的硬件部分需要软件来控制完成工作的,完成这个控制工作的软件就称为操作系统,在linux中叫kernel。
Linux 内核是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。
Linux 内核的主要模块分以下几个部分:
- 进程管理子系统
- 内存管理子系统
- 文件子系统
- 网络子系统
- 设备子系统
设备树
设备树是一种描述硬件的数据结构。表示设备树的这个文件,就是 Device Tree(设备树)。
设备树包含以下几部分:
- 设备树源码(Device Tree Source,DTS)文件
- 设备树编译工具(Device Tree Compiler,DTC)
- 二进制格式设备树(Device Tree Blob,DTB)
- DTS 包含的头文件格式为DTSI
下图就是设备树:
根文件系统
linux在初始化时加载的第一个文件系统就是根文件系统。负责管理整个系统的文件结构和目录。
根文件系统包含以下几部分:
-
内核镜像:操作系统内核的二进制镜像文件,用于启动操作系统。
-
引导加载程序:引导加载程序(Bootloader)负责在计算机启动时加载内核镜像到内存中,并启动操作系统。
-
配置文件:包含系统启动配置信息的文件。
-
基本命令工具:一些基本的命令工具,如ls、cd、cp等,用于在系统启动后进行基本的文件操作。
-
系统库文件:操作系统所需的一些库文件,用于支持系统的正常运行。