`
buliedian
  • 浏览: 1196914 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
阅读更多

引导程序再认识

刘建文(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与开发主机进行通信来执行这些操作。

分享到:
评论

相关推荐

    计算机引导过程

    认识计算机的引导过程

    PID算法简单认识.zip_pid_pid程序 简易_pid算法的认识_我对pid的认识

    pid简单测试算法,通过简单的程序结构编写引导pid入门。

    认识计算机硬件教学设计.docx

    教学过程 认识计算机硬件教学设计全文共8页,当前为第3页。教学环节 认识计算机硬件教学设计全文共8页,当前为第3页。 教师活 预设学生行为 设计意图 创设情景 激情引入 抛出问题 师:(面带微笑走进教室),手里拿...

    认识计算机网络.doc

    一、教材分析 本节分别从计算机网络的功能、组成结构和应用的角度看待到底什么是计算机网络, 它与通信网络的关系是怎样的,引导学生认识计算机网络的概念以及它的分类。作为本 书的开首节,一方面是对学生从前已有...

    C++程序设计(谭浩强)PDF扫描版第3卷(共3卷)

    本书作者深入调查了我国大学的程序设计课程的现状和发展趋势参阅了国内外数十种有关C++的教材,认真分析了学习者在学习过程中遇到的困难,研究了初学者的认识规律。在本书中做到准确定位,合理取舍内容,设计了读者...

    1认识计算机网络.doc

    一、教材分析 本节分别从计算机网络的功能、组成结构和应用的角度看待到底什么是计算机网络, 它与通信网络的关系是怎样的,引导学生认识计算机网络的概念以及它的分类。作为本 书的开首节,一方面是对学生从前已有...

    电子信息工程认识实习报告.doc

     通过在陕西捷盈电子有限公司 和陕西如意数字网络科技有限公司的实习,对从电路图到最后完成板子焊接的过程,包 括大器件和小器件的安装顺序逐渐在脑中形成概念,将学到的知识能在现实中进行连接 ,达到实践运用的...

    认识计算机网络单元整体教学设计表单.docx

    学习活动设计 教师活动 学生活动 环节一:(根据课堂教与学的程序安排) 认识计算机网络单元整体教学设计表单全文共4页,当前为第3页。认识计算机网络单元整体教学设计表单全文共4页,当前为第3页。教师活动1 认识...

    C++程序设计_谭浩强

    本书以面向过程的程序设计为切入点,从编写简单的程序开始,循序渐进,由面向过程、基于对象到面向对象,逐步深入,符合读者的认识规律。 (3)例题丰富,通俗易懂。 本书作者花费了很大的精力去考虑怎样使读者易于...

    《谭浩强C++程序设计》

    《C++程序设计》作者深入调查了我国大学的程序设计课程的现状和发展趋势,参阅了国内外数十种有关C++的教材,认真分析了学习者在学习过程中遇到的困难,研究了初学者的认识规律。在本书中做到准确定位,合理取舍...

    C++程序设计(谭浩强)PDF扫描版第2卷(共3卷)

    本书作者深入调查了我国大学的程序设计课程的现状和发展趋势参阅了国内外数十种有关C++的教材,认真分析了学习者在学习过程中遇到的困难,研究了初学者的认识规律。在本书中做到准确定位,合理取舍内容,设计了读者...

    C++程序设计谭浩强

    《C++程序设计》作者深入调查了我国大学的程序设计课程的现状和发展趋势,参阅了国内外数十种有关C++的教材,认真分析了学习者在学习过程中遇到的困难,研究了初学者的认识规律。在本书中做到准确定位,合理取舍...

    C++程序设计(谭浩强

    参阅了国内外数十种有关C++的教材,认真分析了读者在学习中的困难和认识规律,设计了读者易于学习的教材体系,于2004年出版了《C++程序设计》一书。该书降低入门起点,不需要C语言的基础,从零起点介绍程序设计和C++...

    教学设计《用选择结构程序做出判断》.docx

    用选择结构做出判断 一、教材分析 本课选自泰山出版社《信息技术》初中第一册第二单元第二课的... 过程与方法:通过解决实际问题,掌握选择结构的表达式及嵌套程序的使用。 情感态度与价值观:通过选择结构程序的运用解

    1.1-认识计算机网络-教学设计.doc

    一、教材分析 本节分别从计算机网络的功能、组成结构和应用的角度看待到底什么是计算机网络,它 与通信网络的关系是怎样的,引导学生认识计算机网络的概念以及它的分类。作为本书 的开首节,一方面是对学生从前已有...

    C++程序设计

    《C++程序设计》作者深入调查了我国大学的程序设计课程的现状和发展趋势,参阅了国内外数十种有关C++的教材,认真分析了学习者在学习过程中遇到的困难,研究了初学者的认识规律。在本书中做到准确定位,合理取舍...

    大数据导论:认识大数据.pdf

    课程: 大数据导论 课程简介 本课程首先介绍大数据的概念和商业应用,再引导理解大数据存储、处理和管理的技术 架构,浅尝 Hadoop2 生态圈、以及 Spark 框架结构,领略这些流行的框架是如何支持 大数据管理的。...

    (完整版)1.1认识计算机网络-教学设计.doc

    一、教材分析 本节分别从计算机网络的功能、组成结构和应用的角度看待到底什么是计算机网络,它 与通信网络的关系是怎样的,引导学生认识计算机网络的概念以及它的分类。作为本书 的开首节,一方面是对学生从前已有...

Global site tag (gtag.js) - Google Analytics