引导程序再认识
刘建文(http://arttech.us
)
引导程序
在32位以上的现代计算机里,bootloader,中文叫【引导程序】,是一支将计算机从【开机重置态】过渡到【逻辑虚拟态】的程序。这个引导过程叫Booting。所谓【开机重置态】指机器开机时最基本的功能状态,它是机器可用的基本保证,由厂商定义和提供实现。【开机重置态】可以理解为物理态,而【逻辑虚拟态】则是逻辑态,逻辑态有一些的标准,比如32位处理器的保护模式。计算机的逻辑态是现代计算机的客观需要,比如桌面GUI应用、多进程、互联网等,但由于成本、硬件局限等原因,目前的计算机还不能设计成开机就达到逻辑态的能力要求。bootloader在一段时间内仍在计算机应用中担当重要角色。<!-- more-->
开机重置态
【开机重置态】的定义依赖了处理器的体系。虽然各体系会有差导,但Booting过程有一些共同点,例如引导的起点,引导的最小代码和最小数据,这些数据和代码是开机或重置时立即可用的。至于引导起点位于何处,最小代码和最小数据用途则根据体系设计而不同。比如很大一部分的机器的最小引导代码是用来引导功能更强的引导程序,而不是直接过渡到逻辑态。
以下是【处理器体系结构】对boot suite 的影响的例子
To illustrate the effects of the processor family on the boot suite, consider the following:
A bootloader for a device designed around the StrongARM processor has to know whether it's booting the system or waking it up from sleep, because the processor starts execution from the top of its address space (the bootloader) in both cases. The bootloader has to pass control to the kernel code that restores the system state if it's waking up from sleep or load the kernel from the boot device if the system is starting from reset.
An x86 bootloader might need to switch to protected mode to load a kernel bigger than the 1MB real-mode limit.
Embedded systems not based on x86 platforms cannot avail the services of a legacy BIOS. So, if you want your embedded device to boot, for example, from an external USB device, you have to build USB capabilities into your bootloader.
Even when two platforms are based on similar processor cores, the bootloader architecture may differ based on the SoC. For example, consider two ARM-based devices, the Compaq iPAQ H3900 PDA and the Darwin Jukebox. The former is built around the Intel PXA250 controller chip, which has an XScale CPU based on an ARMv5 core, and the latter is designed using the Cirrus Logic EP7312 controller that uses an ARMv3 core. Whereas XScale supports JTAG (named after the Joint Test Action Group, which developed this hardware-assisted debugging standard) to load a bootloader onto flash, the EP7312 has a bootstrap mode to accomplish the same task.
逻辑虚拟态
逻辑态的定义更多的依赖操作系统。另外,相对物理态,逻辑态需要代码量和状态量会更大,比如整个操作系统内核都放置入RAM内待命。
bootloader功能职责
bootloader 的主要功能职责上面已经概述过。bootloader主要职责的具体内容可以理解为对系统各个部件进行初始化。这个过程一般不是一蹴而就的,一般都分为若干阶段,例如在PC里,有BIOS和NTLDR或GRUB两段。前一阶段的计算职责是对后一阶段计算搭建环境,而不是直接完成整个bootloader的主要职责。
bootloader主要职责以外还会负责一些特殊的任务,比如硬件诊断。这类特殊任务在系统论称为【元运算】,它保证计算机可用性,而与之相对的,bootloader各阶段内的的任务称为【体运算】。
bootloader 的一些基本职责和特定功能职责
At the minimum, a bootloader is responsible for processor- and board-specific initializations, loading a kernel and an optional initial ramdisk into memory and passing control to the kernel. In addition, a bootloader might be in charge of providing BIOS services, performing POST, supporting firmware downloads to the target, and passing memory layout and configuration information to the kernel.
On embedded devices that use encrypted firmware images for security reasons, bootloaders may have the task of decrypting firmware. Some bootloaders support a debug monitor to load and debug stand-alone code on to the target device. You may also decide to build a failure-recovery mechanism into your bootloader to recoup from kernel corruption on the field.
booting vs. bootstrap
我们要严格区分两个过程概念——引导(booting)与自举(bootstrap),这两个概念在很多场合是等同的,但在这里,bootstrap是指处于【开发阶段】的引导过程。在PC里,这个过程的例子是升级BIOS,在嵌入式系统是安装系统bootloader。
下面我们以使用【Cirrus Logic EP7211】控制器核心的嵌入系统为例子理解一下bootstrap。
EP7211被设计为两种工作模式——自举模式(bootstrap mode)和普通操作模式(normal operation mode)。在自举模式下,EP7211会读取它内置的128字节记忆体里的最小引导代码。这部分最小代码通过串口下载【下一阶段的引导代码镜像】——称为bootstraper,到容量为2K的板载RAM内,然后跳转到那里,由bootstraper进一步将bootloader下载入闪存。 因此,EP7211的bootstrap必须设计成三阶段的体系结构,每一阶段都位于不同的地址上:
- 第一阶段是处理器的固件部分,大小为128-byte;
- 第二阶段是【能读写闪存的】bootstaper,位于RAM内,大小可达2KB;
- 第三阶段是功能更强的真正bootloader,位于系统闪存内。
可以说,bootstrap 是一次性的。尔后开机时,位于闪存内的bootloader会在处理器工作在普通操作模式下第一时间控制着机器。
为什么分三段?
其实完全可以只做成两段,由处理器内置功能直接下载bootloader镜像到闪存中的,但那样设计会增加处理器开发成本,也降低处理器本身的灵活性。
很多嵌入式处理器并不支持【自举操作模式】,它们是通过一个称为JTAG接口把bootloader写入闪存的。也有一些嵌入式处理既支持自举操作模式,也支持JTAG,例如基于AMR9核心的Freescale i.MX21 。
当bootloader 被安装入闪存后,它不只可引导系统,还可带有升级自身和其它固件组件(内核和根文件系统)的功能,bootloader可以通过UART、USB或Ethernet与开发主机进行通信来执行这些操作。
分享到:
相关推荐
二、认识引导程序 BIOS 将所检查磁盘的第一个扇区(512B)载入内存,放在 0x0000:0x7c00 处,如果个扇区的最后两个字节是“55 AA” ,那么这就是一个引导扇区,这个磁盘也就是一块可引导盘。 通常这个大小为 512B ...
通过本次实验,参与者不仅掌握了嵌入式Linux系统开发的关键技能,如交叉编译器的配置和引导程序的移植,还加深了对ARM9架构和嵌入式操作系统原理的认识。此外,实验过程中的问题解决、团队协作以及对细节的关注,都...
Windows的开机引导过程是一系列精密设计的步骤,从硬件初始化到操作系统核心加载,再到执行体和服务的逐级启动,最终呈现出用户友好的桌面环境。理解这一过程不仅有助于加深对Windows内部机制的认识,也为解决启动...
MBR包含446字节的引导程序和64字节的分区表,而UEFI则直接加载位于系统分区上的EFI系统分区中的引导程序。 4. **加载引导加载器**:MBR中的引导程序或UEFI固件会加载更高级的引导加载器,如GRUB、LILO等。这些加载...
对于Windows系统,MBR中的引导程序会加载到内存并运行NTLDR(NT Loader),这是Windows XP及更早版本的引导加载器。而在Windows Vista及以后的版本,这一角色由BOOTMGR(Boot Manager)接手。 接下来,我们关注文件...
内容概要:本文深入介绍了MCU(微控制器单元)的启动(BOOT)机制原理及其配置方法,详细探讨了各类引导模式及其配置手段,如闪存引导、RAM引导及其他类型的外部存储器引导,特别讲解了启动流程和引导加载程序的功能...
在对抗引导加载程序欺骗时,Java可能被用来编写安全程序,监控系统启动过程,检测异常行为,并在发现潜在威胁时采取防御措施。 BootloaderSpoofer_main.zip可能包含了一个演示项目或者工具,用于模拟或测试引导加载...
#### 认识引导程序 引导程序位于磁盘的第一个扇区,其大小固定为512字节。BIOS在启动时,会将该扇区的内容加载到内存特定位置(0x0000:0x7c00)。若该扇区的末尾两字节为“55AA”,则被认定为有效引导扇区。这段...
【正确认识并引导小学高段的异性交往】 小学高段的学生正处于青少年早期阶段,此时他们的生理和心理发展迅速,对异性的好奇心和交往需求逐渐增强。这是一段正常的发展过程,也是个体社会化的重要环节。然而,如果不...
【标题】"MEMZ1.0引导以及程序源码"主要涵盖了两个核心概念:MEMZ病毒和源码分析。MEMZ是一种恶意软件,通常被设计为引导扇区病毒,意在感染计算机系统的启动过程。而“1.0”通常表示这是该病毒的第一个版本。 ...
深度学习是指在教师引导下,学生全面投入、积极探索、反思总结的学习过程,旨在掌握核心知识、理解学习过程、形成积极动机和价值观,培养独立、批判、创新的素质以及合作精神。 **内部因素** 1. **学生的学习状态*...
通过研究和理解这个引导程序,不仅可以深入学习C++编程,还能对操作系统启动机制有更全面的认识。在实际应用中,对引导程序进行定制和优化,可以提升系统的启动速度和稳定性,满足特定的系统需求。
### Windows启动过程详解 在日常生活中,我们与Windows操作系统紧密相连,每一次开机,背后都有一套复杂的...理解这一过程,不仅有助于提升我们对计算机系统运作的认识,还能在遇到启动问题时,提供有效的解决思路。
在教学过程中,教师不仅讲解法律条文,更引导学生思考法律制定的原因,通过实例让学生体验道德判断和价值选择,提升他们的媒介素养。 4. **批判性思维**:教材内容鼓励批判性思考,揭示广告的潜在陷阱,如虚假广告...
在本课《认识图形》中,教师采用了一系列教学方法和策略,旨在引导一年级学生通过观察、操作和互动学习,初步认识并区分基本的平面图形:长方形、正方形、三角形和圆形。 一、教材分析: 首先,本课是《有趣的图形...
软盘引导区是软盘(虽然现在已较少使用)上的一个重要部分,它的主要功能是在计算机启动时加载并执行引导程序。引导区通常位于磁盘的前几个扇区,其中包含了启动计算机所需的基本代码。在DOS和早期的Windows系统中,...
《计算理论引导(第二版)》是一本深入探讨计算理论的教材,课后习题是学习过程中的重要组成部分,它们旨在帮助学生巩固理论知识、深化理解并锻炼问题解决能力。这份压缩包文件提供了该课程第二版的所有课后习题解答...
【入职引导人培训课程】 本课程“00170 你的引导很重要——入职引导人培训课程”旨在帮助人力资源部门...通过本课程的学习,引导人们将更好地理解自己在新员工适应过程中的关键作用,从而提高整体团队的凝聚力和效率。
这篇文档主要讨论的是在数学教学中如何通过反思数学约定来驱动深度学习,以“2、3、5倍数特征的再认识”为例。反思被强调为一种重要的学习态度,能够帮助学生从表面深入到本质,形成完整的理解。《义务教育数学课程...