1.1 BootLoader的角色
当一个嵌入式开发板上电时,哪怕执行最简单的程序,都要初始化非常多的硬件。每种体系结构、处理器都有一组预定义的动作和配置,它们包含从单板的存储
设备获取初始化代码的功能。最初的初始化代码是BootLoader的一部分,它负责启动处理器和相关硬件设备。
在上电复位时,大多数处理器都有一个获取第一条执行指令的默认地址。硬件设计人员利用该信息来进行存储空间的布局。这样一来,上电的时候可从一个通用
的已知地址获取代码,然后建立软件的控制。
BootLoader提供最初的初始化代码,并初始化单板,这样就可以执行其他的程序。最初的初始化代码都是由该处理器体系结构下的汇编语言写成。当然,在
BootLoader已经执行完基本的处理器和平台的初始化之后,它的主要工作就是引导完整的操作系统。它将定位、加载操作系统,并将控制权移交给操作系统。另
外,BootLoader可能含有一些高级特性,比如校验OS镜像、升级OS镜像、从多个OS镜像中选择性引导。与传统的PC-BIOS不同,当操作系统获取控制权后,嵌入
式下的BootLoader就不复存在了。
1.2 BootLoader的来历
我们从4个角度来阐述BootLoader的来历,第一个是从半导体芯片技术(特别是处理器的发展)来看Boot的出现:
在集成电路只读存储器出现之前,早期的计算机ENIAC在存储中并没有程序,而是通过连接电缆的配置来解决问题。ENIAC中并没有自举电路或引导程序,因为
它只要上电,其硬件配置就开始解决问题。在早期的计算机中,根本就没有BootLoader的概念,连Boot这个名称都没有。
稍晚时间出现的IBM 701计算机(1952~1956年)有一个“Load”按键,按下它,可以从外部储存中加载最初的36位的字到主存中。有一个加载选择开关来决
定外部储存是穿孔卡片、磁带,还是磁鼓(看到这里是不是觉得它和现代的嵌入式系统有些类似,在有些嵌入式电路板中,同样用一些拨码开关来控制电路板从SD
卡、Flash等多种存储设备中选择某一种存储设备进行启动)。接下来的18位半字作为一条指令执行,它通常会读取更多的字到主存中。这时开始执行Boot程序,它
将依次从外部存储媒质加载更大的程序到主存中。在1958年,“Boot”这个计算机名词便开始使用了。请读者注意,这里的“Load”按键和Loader是有本质区别
的:“Load”是通过外部操作来进行加载的,而Loader是软件实现的加载器,它可以自行完成加载的动作。
Boot这个词的原意是靴子,那靴子怎么会与计算机系统中的引导发生关联呢?原来,这里的Boot是Bootstrap(鞋带)的缩写,它来自于一句谚语:“Pull
oneself up by one’s own bootstraps”,直译的意思是“拽着鞋带把自己拉起来”,这当然是不可能的事情。最早的时候,工程师用它来做比喻,比如自举电路
振荡器(Bootstrap Generator)就是指,不外加激励信号而自行产生恒稳和持续的振荡。对于早期计算机的启动,也存在这样一个问题:必须先运行程序,然后计
算机才能启动,但是计算机不启动就无法运行程序。于是,当时的人们想尽各种办法,他们把一小段程序装进内存,之后计算机就能正常运行了。因此,工程师们将
这个过程称为“拉鞋带”,久而久之就简称为Boot了。而且随着处理器的发展,Boot处理的事务越来越多,比如对CPU运行模式的设置,比如对CPU内部时钟的配
置,还包括对Cache和MMU的配置。
第二个是从存储技术的发展来看Loader的出现:
首先介绍两类半导体存储器:ROM和RAM。ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然
可以保持数据,而RAM通常在掉电之后就丢失数据,但是其存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关。
ROM分为ROM、PROM、EPROM和EEPROM等。只读存储器(ROM)是只能读取资料的内存。其资料内容在写入后就不能更改。此种内存的制造成本极低,
常用于电脑中的开机启动。可编程只读存储器(PROM)一般可编程一次。PROM存储器在出厂时各个存储单元皆为1,或皆为0,用户在使用时,再采用编程的方法
使PROM存储所需要的数据。可擦除可编程存储器(EPROM)可多次编程,这是一种便于用户根据需要来写入,并能把已写入的内容擦去后再改写,即为一种多次
改写的ROM。由于能够改写,因此能对写入的信息进行校正,修改错误后再重新写入。电子可擦除可编程只读存储器(EEPROM)的运作原理类似于EPROM,但是
擦除的方式更加方便。
RAM按照存储单元的工作原理分为静态随机存储器(SRAM)和动态随机存储器(DRAM)。SRAM的存取速度要比DRAM快,同时价格也更高。在计算机中
SRAM常用来作为Cache,而DRAM常作为内存来使用。
闪存(Flash Memory)是一种高密度、非易失性的读/写半导体存储器。它既有EEPROM的特点,又有RAM的特点,是一种全新的存储结构。Nor Flash和
Nand Flash是市场上两种主要的闪存技术。Intel公司于1988年首先开发出Nor Flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,1989
年,东芝公司发表了Nand Flash结构,强调降低每比特的成本,提供更高的性能,并且Nand Flash像磁盘一样可以通过接口轻松升级。Nor Flash和Nand Flash有
几个重要的区别:Nor Flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取内部的每一个字节,可以做到芯片内执行(XIP),应用程序可以直接在
Nor Flash内运行。Nand Flash使用复杂的I/O口来串行地存取数据,并且读写操作都是块操作,因此它无法做到XIP。Nor Flash的读取速度比Nand Flash稍快,但
是写入速度却要慢很多。Nand Flash的存储密度更高,成本更低。因此,很多嵌入式单板都使用小容量的Nor Flash来运行启动代码,而使用Nand Flash存储其他
信息。
评论