整理内容.

Signed-off-by: lion.chan <cy187lion@sina.com>
This commit is contained in:
lion.chan 2022-05-02 22:37:15 +08:00
parent 42f22a8f4d
commit 598fc64ce3

View File

@ -8,13 +8,13 @@
通常硬件系统具有一组上电自动复位电路这将引起整个硬件系统的复位包括将某些寄存器赋予初始值以及将程序指针IP/PC指针指向复位位置。如果该位置具有有效指令则程序将继续执行从而进入到引导阶段。
随着系统复杂度的增加以及接口的持续标准化,一些硬件厂商倾向于在系统中嵌入一段引导代码,用于完成一部分初始化工作,这段代码运行在其他软件引导程序之前,可认为是硬件引导程序。
随着系统复杂度的增加以及接口的持续标准化,一些硬件厂商倾向于在系统 ROM 中嵌入一段引导代码,用于完成一部分初始化工作,这段代码运行在其他软件引导程序之前,可认为是硬件引导程序。
硬件引导完成之后,将跳转到特定程序位置继续执行,软件引导代码接管系统权限。软件引导可以由一个程序完成,也可以分为多个引导程序
以 ARM 平台为例,硬件引导阶段通常不具备外部 DRR 的驱动能力,只使用内部的 s-RAM 进行工作。硬件引导在完成一系列准备工作后,将加载第一阶段软件引导程序到 s-RAM 中的指定位置,并跳转到该程序位置继续执行,此时软件引导代码接管系统权限
引导程序执行完毕后,再次修改程序指针,使之指向内核程序段首地址,运行内核程序的第一条指令。
软件引导可以由一个程序完成,也可以分为多个引导程序,一般而言,第一级软件引导程序执行完毕后系统就具备的访问 DDR 的能力,具备简单的外部存储器的驱动能力,但不具备文件系统功能,因此无法从文件系统中加载程序,只能装载外存中 Boot 区的内容。外存 Boot 区存有二级引导程序,当二级引导程序运行完毕后,系统就具备了文件系统的访问能力。引导程序执行完毕后,再次修改程序指针,使之指向内核程序段首地址,运行内核程序的第一条指令。
从整个上电和引导流程来看,引导技术的关键就是修改程序指针到特定地址去执行下一阶段的程序。而在这之前,又要能够将下一阶段程序加载到内存中,并且准备好其运行环境,比如分配内存空间等。另外,对于引导系统而言就是要提供某些用户功能,比如命令行交互,串口、以太网和外部存储器的的驱动等,甚至是加载文件系统,当然也要准备好对应的中断资源。
从整个上电和引导流程来看,引导程序的关键就是逐步的为下一级程序创造合适的运行环境,然后通过程序跳转等方式修改程序指针到下一级程序的首地址,直至系统具备全部的硬件访问能力,并能够从外存的文件系统中加载程序和文件,完成内核的引导和文件系统的装载工作。另外,对于二级软件引导系统而言,很可能需要提供一些额外的用户功能,比如命令行交互,串口、以太网和外部存储器的的驱动等,甚至是加载文件系统,当然也要准备好对应的中断资源。
引导系统体现的是从实际问题出发,实事求是的解决主要矛盾的核心思想。比如,由于硬件能力有限,最初的 x86 系统,其刚启动时,硬件只会加载磁盘第一个扇区并引导其运行,这一扇区中的程序又要能够继续访问外部存储器,加载后续程序,准备其运行环境,并执行之。这就要求这段程序必须十分简洁,并且整个引导系统都要进行合理的设计。