1 从上电到bootloader
rom boot:
初始化硬件:cpu上电后,首先从片内rom中执行指令,即片内boot程序
加载引导程序:ROM Bootloader 从可访问的存储介质(如闪存、SD卡等)中读取引导程序,并将其加载到正确的内存位置。引导程序负责进一步的系统初始化和加载操作系统。
(读取外部固件到片内ram,最后跳转到片内ram执行新的用户boot程序)
2 bootloader分类及其作用
GRUB(GRand Unified Bootloader):GRUB 是一个功能强大且广泛使用的引导加载程序,支持多种操作系统,包括 Linux、Windows 和 macOS。它可以从多个存储介质(如硬盘、CD/DVD、USB 等)中加载操作系统,提供了灵活的配置选项和图形界面。
LILO(LInux LOader):LILO 是最早出现的 Linux 引导加载程序之一。它支持从硬盘的主引导记录(MBR)加载 Linux 内核,并提供了简单的文本界面进行配置。然而,由于其较为限制的功能和配置选项,LILO 在现代系统中被其他引导加载程序所取代。
systemd-boot:systemd-boot 是由 systemd 项目提供的引导加载程序,用于启动基于 Systemd 的 Linux 发行版(如 Arch Linux)。它具有快速启动时间和简单的配置,支持 GPT 分区表和 EFI 标准,并提供了命令行界面进行调整。
rEFInd:rEFInd 是一个图形化的引导管理器,特别设计用于 EFI 或 UEFI 固件的电脑。它支持多个操作系统的启动,具有可定制的主题和用户界面,以及自动检测和配置引导项的功能。
Das U-Boot(Denx U-Boot):Das U-Boot 是 U-Boot 的一个派生版本,提供了一种开源的引导加载程序解决方案。它被广泛应用于嵌入式系统中,支持多种处理器架构和平台,并具有丰富的功能和可扩展性。
作用:
1 由于cpu固化代码不会兼容所有外设内存,所以需要外部程序引导初始化外部内存,flash,硬件等。
2 加载内核,设置启动参数,内核跳转
3 bootloader与kernel的区别
1 bootloader是裸机程序,目的是引导内核,在跳转到内核之后,生命周期结束
2 kernel运行的是操作系统程序,主要负责:
硬件管理:内核负责管理和控制计算机系统中的硬件资源,例如处理器、内存、设备等。它与硬件交互,分配和管理资源的使用,确保不同的进程或任务能够公平地访问和利用硬件资源。
进程管理:内核管理计算机系统中的进程(或线程),负责创建、删除、调度和切换它们。它分配CPU时间给不同的进程,并确保它们按照一定的调度策略得到执行,以实现系统的多任务处理能力。
内存管理:内核负责管理系统的内存资源,包括内存的分配、回收和地址映射。它维护进程的虚拟地址空间,并将其映射到物理内存。内核还处理内存的分页(paging)、内存保护(protection)、页面置换(page swapping)等操作。
文件系统:内核提供文件系统接口,用于管理文件和目录。它负责文件的读取、写入、打开、关闭等操作,以及目录的创建、重命名、删除等操作。内核还处理文件权限、访问控制和磁盘空间管理等问题。
设备驱动程序:内核提供设备驱动程序接口,用于与硬件设备进行通信和控制。它管理设备的初始化、配置和操作,允许用户程序通过系统调用与设备进行交互。驱动程序可以处理各种设备,如硬盘、网络接口、图形显示等。
系统调用:内核提供系统调用接口,允许应用程序请求核心服务。通过系统调用,应用程序可以请求创建进程、分配内存、进行文件操作等。内核会验证请求的合法性,并执行相应的操作。
安全和权限管理:内核负责管理系统的安全和权限,确保不同的用户或进程之间的隔离和保护。它控制资源的访问权限,防止未经授权的访问和恶意行为。