首页 > 其他分享 >文件系统(三):嵌入式、计算机系统启动流程与步骤

文件系统(三):嵌入式、计算机系统启动流程与步骤

时间:2024-04-16 10:44:49浏览次数:19  
标签:计算机系统 启动 程序 文件系统 嵌入式 BIOS UEFI 加载

liwen01 2024.04.14

前言

我们身边的各种电子设备,手机、手表、相机、个人电脑等等,从用户体验的角度看,好像只要给它们一上电,它们就开始启动可以工作了,这个过程一般是比较短暂的。

从一个嵌入式开发的角度来看,不管是嵌入式系统,还是其它的计算机系统,其启动过程都是一个相对复杂的过程。这个过程一旦出错,基本上设备就不能正常运行了。

(一)嵌入式系统启动

(1)存储架构示意图

我们先看一个嵌入式系统的存储架构示意图

嵌入式设备的存储介质一般有NOR FlashNAND FlashSD卡EEPROM等,其中根据Flash接口的不同,又可以分期串行Flash(SPI Flash) 和并行Flash。在芯片内部有它们对应的控制器。

于此同时,一般在芯片的内部,都会有一个比较小的SRAM和ROM,我们一般称它为内部SRAM和内部ROM。

我们的程序,包括系统程序和应用程序,一般都是存放在这些外接的存储介质上。

(2)启动过程

  1. 芯片上电执行的第一条程序,不是执行放置在外部Flash中的Boot程序,执行的是内部ROM上的程序
  2. 内部ROM里面的程序,会根据BOOT_SEL引脚的电平状态,判断需要从哪个存储器中启动,然后初始化该存储器的接口
  3. 存储器接口初始化完成后,将存储设备最开始的一小段程序程序(一般4~5K)加载到内部SRAM,通过这一小部分程序去初始化外部的DDR内存
  4. 外部DDR初始化完之后,再将Flash中剩下的代码复制到外部DDR中,然后再跳转到外部DDR中去执行BOOT剩下的代码
  5. DDR上的BOOT程序会去初始化硬件并引导kernel的启动,随后kernel去挂载根文件系统
  6. 根文件系统去执行应用程序、并挂载在存储器上其它分区上的文件系统

这里需要对几个知识点需要注意:

  • 并不是所有的系统都有BOOT_SEL引脚,在有些SOC上,还会通过BOOT_SEL引脚判断是否在烧录模式
  • 如果去分析boot的编译连接脚本,你会发现,放置在boot程序最前面4K位置的代码,都是一些初始化、代码复制、重定位的代码,这部分一般是汇编实现。
  • 因为内部SRAM的空间很小,所以内部ROM上的程序才会只复制前面的一小段程序。
  • 启动过程的1~4步骤,有叫BOOT的自举,也有的叫BOOT 的重定位。

(3)启动阶段

其实不管是嵌入式系统,还是其它的计算机系统,其启动过程大概都可以分为三个阶段

  • ROM 阶段
  • RAM 阶段
  • BOOT 阶段

ROM阶段:指的是处理器内部的ROM程序阶段,主要作用是加载存储头部的一小段程序到内部RAM上,这部分的程序一般是使用汇编来实现。

RAM阶段:是指外部DDR已经被初始化,并且存储器中的程序已经被重定位到外部DDR上,从这开始,程序的堆栈空间可以被建立起来,C语言可以开始执行。

BOOT阶段:是指开始其它外围硬件初始化和引导系统启动。

(二)计算机系统启动

计算机系统因为历史悠久,外设种类众多,它的启动流程会复杂一些,根据固件类型(BIOS或UEFI)和分区表类型(MBR或GPT)的不同,计算机的启动一般可以分为BIOS启动UEFI启动两种。

查资料看文档发现BIOS、UEFI、LEGACY这几个概念有些混乱,没有统一的定义。对大部分来说,它们理解的引导计算机启动的程序就叫BIOS

因此在这之前,我们统一一下说法,计算通过BIOS引导系统启动,根据BIOS固件的不同和磁盘的分区类型不同,又可以分为两种方式:LEGACY(传统BIOS) 和 UEFI启动

(1)计算机主板接口与组件介绍

要了解计算机的启动流程,我们先看下一台个人计算机的主板上都有些什么接口和组件

主要的组件有:电源CPU南桥北桥芯片组BIOS芯片磁盘接口、还有各种扩展接口和连接器(内存、显卡、网卡声卡等等)

与启动比较相关的是电源CPU南北桥芯片组BIOS芯片磁盘内存

(1)ATX电源ATX是一种主板的规范、符合ATX规范的电源就叫ATX电源,它的作用是是把交流220V的电源转换为计算机内部使用的5V、12V、24V等不同压值的直流电源。

另外,它还支持电源管理, ATX电源标准接口(如PS_ON、PWR_OK等)与主板通信,以实现电源的管理和控制,包括开机、关机、睡眠模式和节能功能等。

(2)嵌入式控制器(EC)

EC(Embedded Controller)是笔记本电脑上的一个16位小芯片,在不同的设备上,它的名字有些不一样,功能也有些差异:

  • 台式机一般使用的是超级输入输出控制器(SIO)
  • 手机上一般使用的是功率管理集成电路(PMIC)
  • 笔记本上使用的是嵌入式控制器(EC)

EC的主要功能有:

  1. 电源管理
  2. 温度监测和风扇控制
  3. 输入设备管理
  4. 系统监控与故障检测
  5. 启动时序管理
  6. 电池管理(适用于笔记本电脑)

(3)BIOS芯片

我们常说的BIOS(Basic Input/Output System,基本输入/输出系统),它其实是位于主板上的一块芯片,里面存储着BIOS程序。

它主要负责启动、初始化计算机硬件,引导操作系统启动。

最开始BIOS程序是存储在ROM中,后面存储在EEPROM,现在大多数都存储在Nor Flash中,因为是存储在Nor Flash 中,所以现在的BIOS 程序是可以被升级更新的。

(4)南桥与北桥

南桥和北桥是指计算机主板上的两个重要芯片组,它们协同工作以连接和管理主板上的各种硬件组件。

北桥(Northbridge):

  • 位于主板上靠近CPU的区域,负责处理与CPU及高速外设连接相关的任务。
  • 包括内存控制器、图形接口(AGP或PCIe)、高速系统总线(例如FSB,Front Side Bus),负责管理CPU与内存之间的数据传输和控制显卡。
  • 在较新的主板设计中,随着技术的发展,一些功能逐渐集成到CPU中,北桥的功能逐渐减少。

南桥(Southbridge):

  • 位于主板上较远离CPU的区域,负责处理I/O设备和外围总线的控制。
  • 包括硬盘控制器、USB控制器、PCI总线、声卡、网卡等外围设备接口,负责管理和控制这些设备。
  • 处理I/O设备的低速操作,与北桥的高速总线相对应。

随着技术的发展和新型架构的出现,北桥和南桥的功能划分逐渐变得模糊。现代的芯片组设计趋向于集成更多的功能到单个芯片中,以提高效率并减少组件数量

(5)磁盘

磁盘在前面已经有过介绍

文件系统(一):存储介质、原理与架构

文件系统(二):分区、格式化数据结构

(6)扩展介绍

不同的主板规格,主板上的接口和器件会有差异。

对于台式计算机而言,关机和设备断电,它是处于不同的工作状态的,关机状态下,BIOS和主板上的一些其它器件还是在工作的,比如跟开机按键检测相关的一些器件。

台式机在断电的时候,它里面的时钟也是有在运行,它是通过主板上的纽扣电池来进行供电。纽扣电池最开始是为CMOS供电的,这里的CMOS其实就是一个小的RAM,保存的是用户设置的一些BIOS参数,以及主板器件的一些参数。

(2)LEGACY(BIOS) + MBR 方式启动

LEGACY 方式它只能加载MBR分区格式的引导盘,它的启动方式,大概可以分为6个阶段:

  • CPU上电
  • BIOS硬件检测
  • BIOS更新参数
  • BIOS交出控制权
  • 执行MBR引导程序
  • 活动分区加载操作系统

(a)CPU上电

  • 按下开机键,电源开始给主板和其他器件供电,CPU开始初始化
  • 电源稳定后(电源会发出PWR_OK信号),CPU开始从FFFF0H处开始执行指令
  • FFFF0H是BIOS器件在CPU的一个映射地址,这个地址程序的功能是跳转到BIOS的代码处

(b)BIOS硬件检测

  • BIOS 检测系统中的关键器件是否正常,比如内存、显卡
  • BIOS 找到显卡后,调用显卡上初始化代码,完成显卡的初始化
  • BIOS 逐一的查找主板上的其它器件,看它们是否存在
  • BIOS 显示自己的启动画面
  • 检测CPU类型和CPU的频率,并显示在屏幕上
  • 检测系统中的一些标准硬件设备,比如硬盘,串行接口,并行接口等

(c)BIOS更新参数

  • BIOS完成硬件检测完之后,会去更新ESCD(Extended System Configuration Data,扩展系统配置数据)
  • 实际是系统硬件配置发生变化才会去更新

(d)BIOS交出控制权

  • BIOS执行完ESCD更新操作后,BIOS会依次去查找磁盘、光盘、U盘等设备上是否有操作系统(该顺序用户可以通过BIOS参数设置)。
  • 传统的LEGACY启动方式,它只能识别MBR方式分区的存储设备
  • 探测到存储设备存在后,将启动控制权交给MBR分区上的引导程序

(e)执行MBR引导程序

  • 先将第0扇区的512字节复制到内存的一个安全区域去执行
  • 判断第0扇区的最后两个字节是否为"55 AA",如果不是,提示出错
  • 查找分区表中是否有活动分区
  • 如果有活动分区,判断活动分区所在的扇区位置
  • 将活动分区的引导扇区读入内存中,并判断数据是否合法
  • 如果活动扇区数据合法,就将引导权交给活动扇区
  • 活动扇区去引导操作系统启动,MBR引导程序退出
  • 如果该MBR上没有活动分区,引导权交还给BIOS,由BIOS去查找下一个存储设备

(f)活动分区加载操作系统

  • MBR的引导程序找到活动分区后,会跳转到活动分区所在为止,将引导权交给活动分区
  • 活动分区是指包含引导加载程序(Boot Loader)的分区,它负责加载操作系统的核心部分
  • 操作系统的引导是由操作系统的类型来决定的。

(3)UEFI+GPT  方式启动

Windows系统中大概的一个启动流程是:

  1. 计算机上电
  2. BIOS自检
  3. UEFI固件启动
  4. 根据RAM中保存的启动顺序加载启动设备
  5. 判断启动设备中是否存在ESP分区,如果有则加载,没有则下一个存储器中查找
  6. 读取ESP分区中的EFI应用信息,加载到BCD文件
  7. 读取BCD文件下的记录以加载系统

在UEFI启动模式中,大部分的工作是在ESP分区中进行

ESP分区ESP(EFI System Partition)是用于存储 EFI(Extensible Firmware Interface)引导加载程序和相关引导文件的分区。它是启动过程中的重要组成部分,包含操作系统引导加载程序、配置文件和其他与引导相关的文件。

与启动比较相关的是下面三个文件:

  • EFI/Boot/bootx64.efi(或bootia32.efi)
  • EFI/Microsoft/Boot/bootmgfw.efi
  • EFI/Microsoft/Boot/BCD 其中必须要有的是:BCD和bootmgfw.efi 两个文件文件

UEFI BIOS 程序执行阶段

一般分为7个过程:

步骤 阶段缩写 英文全称 中文名字
1 SEC Security Phase 安全验证阶段
2 PEI Pre-EFI Initialization EFI前期初始化阶段
3 DXE Driver Execution Environment 驱动执行环境阶段
4 BDS Boot Device Selection 启动设备选择阶段
5 TSL Transitional System Load 操作系统加载前期阶段
6 RT Runtime 系统运行时阶段
7 AL System Recovery or Shutdown 系统灾难恢复期或关机阶段

1.SEC(安全验证):安全验证是UEFI启动过程的第一步。在这个阶段,执行UEFI固件的固定代码,主要负责初始化CPU、内存和一些基本的系统硬件。

2.PEI(EFI前期初始化):在这个阶段,UEFI固件负责执行更多的硬件初始化,包括DRAM初始化,建立PEI系统服务,为后续的DXE阶段做准备。

3.DXE(驱动执行环境):DXE阶段是加载和执行UEFI驱动程序的阶段。这些驱动程序可以是固件驱动程序、外部设备驱动程序等,以提供更多的硬件支持和功能。

4.BDS(启动设备选择):在这个阶段,UEFI选择启动设备,例如硬盘、光盘、USB驱动器等。用户可以通过UEFI设置来配置启动顺序。

5.TSL(操作系统加载前期):这个阶段涉及加载操作系统引导加载器,准备操作系统加载。UEFI启动管理器在这个阶段起到关键作用。

6.RT(系统运行时):一旦操作系统加载完成,系统进入运行时阶段。UEFI仍然提供了一些运行时服务,使操作系统能够访问硬件资源。

7. AL(系统灾难恢复期或关机):这是系统的最终阶段,涉及系统的灾难恢复、关机或重启。

(三)各种启动的区别

(1)嵌入式系统与个人计算机启动的区别

嵌入式设备与个人计算机系统,在启动方面,个人认为最大的区别是个人计算机将嵌入式设备系统SOC中大部分的功能放到BIOS上去实现了。主要的原因是嵌入式设备的SOC的外设接口和器件相对比较固定,没有个人PC机的主板这么复杂,所以放在SOC的ROM上去实现会更加的高效。

我们可以从硬件平台、引导程序、启动时间上做简单介绍

1. 硬件平台:

  • 嵌入式系统通常设计用于特定用途,硬件资源相对较少,例如智能家居设备、工业控制系统或电子设备。因此,它们的启动过程通常是针对特定硬件的定制化。
  • 个人计算机电脑是通用计算设备,硬件配置通常更为复杂和强大,例如桌面电脑、笔记本电脑或平板电脑。

2. 引导加载程序:

  • 在个人计算机上,通常使用一个引导加载程序(bootloader)来启动操作系统。这个引导加载程序会加载并运行操作系统的内核,例如Windows的NT Loader或者GNU GRUB。
  • 在嵌入式系统中,可能会使用不同的引导加载机制,例如简单的启动加载器(Simple Boot Loader)或直接由硬件启动,如芯片上的固件。

3. 启动时间:

  • 由于个人计算机通常具有更复杂的启动过程,包括硬件自检(POST)、引导加载程序和操作系统加载等步骤,因此它们的启动时间可能会相对较长。
  • 嵌入式系统通常更注重启动速度和即时响应性,因此它们的启动时间通常更短。

整体来说:嵌入式系统更加注重定制化和高效性,而个人计算机则更注重通用性和功能性。

(2)LEGACY(BIOS) 与 UEFI 启动的区别

它们主要的区别在于启动方式、启动速度、容量限制、图形界面、安全性上

1.启动方式:

  • Legacy BIOS是传统的启动方式,它使用基本输入/输出系统来启动计算机。在这种方式下,计算机会首先执行BIOS固件中存储的启动程序,然后加载操作系统。
  • UEFI是一种新一代的启动方式,它取代了传统的BIOS。UEFI提供了更加灵活和强大的启动环境,支持更多的硬件特性和功能。UEFI启动过程中,计算机会执行存储在UEFI固件中的启动程序,并且可以加载操作系统和引导加载程序。

2. 启动速度:

  • UEFI启动通常比Legacy BIOS启动更快,因为UEFI固件在启动过程中能够更有效地初始化硬件和执行启动程序。
  • Legacy BIOS启动可能会比较慢,因为它是基于较老的技术,并且在初始化硬件和执行启动程序时可能需要更多的时间。

3. 容量限制:

  • Legacy BIOS有一些容量限制,例如对于硬盘分区的大小或启动介质的容量有限制。
  • UEFI则更加灵活,支持更大容量的硬盘分区和启动介质,因此能够更好地适应现代计算机系统的需求。

4. 图形界面:

  • UEFI通常支持图形界面,可以提供更友好的用户交互体验,例如在启动时显示启动菜单或设置界面。
  • Legacy BIOS通常是基于文本界面的,用户交互相对简单,一般通过键盘输入来进行选择和设置。

5. 安全性:

  • UEFI提供了更多的安全功能,例如Secure Boot,可以帮助防止恶意软件在系统启动时加载。
  • Legacy BIOS相对较为简单,安全功能较少,容易受到恶意软件的攻击。

总的来说,UEFI相比Legacy BIOS具有更快的启动速度、更大的容量支持、更丰富的功能和更好的安全性,因此在现代计算机系统中越来越受到广泛应用。

结尾

以前在嵌入式软件开发岗位面试的时候,经常被问到系统启动流程,或者是uboot启动流程介绍。对于系统工程师而言,这些应该是需要熟练掌握,但是对于应用工程师而言,我个人认为只要了解基本流程和概念就可以了。

以上内容,如有错误,欢迎批评指正

---------------------------End---------------------------
如需获取更多内容
请关注 liwen01 公众号

标签:计算机系统,启动,程序,文件系统,嵌入式,BIOS,UEFI,加载
From: https://www.cnblogs.com/liwen01/p/18137617

相关文章

  • 分享一款嵌入式开源按键框架代码工程MultiButton
    一、工程简介MultiButton是一个小巧简单易用的事件驱动型按键驱动模块。Github地址:https://github.com/0x1abin/MultiButton这个项目非常精简,只有两个文件:(1)可无限扩展按键;(2)按键事件的回调异步处理方式可以简化程序结构,去除冗余的按键处理硬编码,让按键业......
  • 在Linux中,如何管理和优化文件系统的性能?
    在Linux中,管理和优化文件系统的性能是确保系统高效运行的关键。以下是一些提高文件系统性能的方法:1.选择合适的文件系统类型不同的文件系统类型具有不同的性能特点。例如,ext4提供了良好的性能和稳定性,而XFS则在处理大文件和大量数据时表现更优。根据你的应用需求选择合适的文件......
  • 在Linux中,如何进行文件系统的迁移和升级?
    在Linux中,文件系统的迁移和升级是涉及数据完整性和系统稳定性的重要操作。以下是进行文件系统迁移和升级的一般步骤:1.文件系统迁移文件系统迁移通常涉及将数据从一个文件系统迁移到另一个文件系统,例如从ext3迁移到ext4,或者从一个分区迁移到另一个分区。备份数据:在进行任何......
  • 在Linux中,如何创建、检查和修复文件系统?
    在Linux中,创建、检查和修复文件系统是磁盘管理和维护的重要部分。以下是使用常用命令行工具进行这些操作的步骤:1.创建文件系统创建分区:使用fdisk或parted命令创建一个新的磁盘分区。sudofdisk/dev/sdx在fdisk提示符下,使用n创建新分区,w写入分区表并退出。格式化分区:......
  • 在Linux中,如何实现文件系统的快照和克隆?
    在Linux中,文件系统快照和克隆是两种用于数据备份和恢复的技术。快照是文件系统在特定时间点的只读副本,而克隆则是快照的可写副本。1.文件系统快照LVM(逻辑卷管理)提供了一种创建文件系统快照的简单方法。快照可以用于数据恢复、备份、升级系统或应用程序等场景。创建逻辑卷:如......
  • fatfs文件系统读取剩余空间实例解析
    一前记 文件系统读取剩余内存空间并显示是一个常用的功能。这个函数是:FRESULTf_getfree(constTCHAR*path,DWORD*nclst,FATFS**fatfs);/*Getnumberoffreeclustersonthedrive*/第一个入参是文件路径,第二个参数剩余空间的指针,第三个参数是文件名。二实例......
  • centos 7 新增数据盘,lvm分区,xfs文件系统 永久挂载
    centos7新增数据盘,lvm分区,xfs文件系统永久挂载步骤1:连接数据盘将新的数据盘连接到你的CentOS7服务器上。确认系统已经检测到了新的磁盘,你可以使用lsblk命令查看 步骤2:创建物理卷(PhysicalVolume)使用fdisk或parted工具对新磁盘进行分区。 使用pvcreate......
  • 如何使用 Grafana 监控文件系统状态
    当JuiceFS文件系统部署完成并投入生产环境,接下来就需要着手解决一个非常重要的问题——如何实时监控它的运行状态?毕竟,它可能正在为关键的业务应用或容器工作负载提供持久化存储支持,任何小小的故障或性能下降都可能造成不利的影响。JuiceFS启动后会实时发布自身的运行状态数......
  • FIT1047计算机系统、网络和安全
    FIT1047计算机系统、网络和安全-S12024课业2——流程和MARIE编程目的过程和程序使计算机做我们希望它们做的事情。在本课业的第一部分,学生将调查运行的过程在他们的电脑上。第二部分是关于MARIE汇编中的编程语言这将使学生能够展示他们对处理器工作的基本方式。本课业涉及单元学......
  • 痞子衡嵌入式:使能i.MXRT1050,1060 Hab签名或加密启动时App链接在片内SRAM的限制
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是使能i.MXRT1050,1060Hab签名或加密启动时App链接在片内SRAM的限制。最近有客户反馈,在RT1060上测试Non-XIP程序启动,如果程序体部分链接进0x20280000地址之后的片内OCRAM区域(这部分是由FlexRAM......