暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
深入理解BootLoader.pdf
737
53页
0次
2023-12-06
25墨值下载
BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射,从而将系统的软硬件环境设置
成一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
在嵌入式系统中,通常没有像PC中的BIOS那样的固件程序,因此整个系统的加载启动任务就完全由BootLoader来完成。BootLoader是CPU上电后运行的第一段程
序,它的作用就是对嵌入式系统中的硬件进行初始化,创建内核需要的一些信息并将这些信息通过相关机制传递给内核,从而将系统的软硬件环境带到一个合适的状
态,最终调用操作系统内核,真正起到引导和加载内核的作用。实际上,一个功能比较强大的BootLoader已经相当于一个微型的操作系统了。
不同的CPU体系结构有不同的BootLoader。有些BootLoader支持多种体系结构的CPU,比如U-Boot就同时支持ARM体系结构和MIPS体系结构。除了依赖于CPU的体
系结构外,BootLoader实际上也依赖于具体的嵌入式板级设备的配置。也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,要想让运行
在一块板子上的BootLoader程序也能运行在另一块板子上,通常需要修改BootLoader的源程序。因此每款嵌入式产品的BootLoader都是独一无二的,但我们可以总结出
开发或者维护特定BootLoader需要哪些背景知识,掌握了这些背景知识,我们就可以做到以不变应万变
为了引导操作系统,BootLoader与CPU体系结构和操作系统有着非常紧密的联系。在本书中,我们以ARM体系结构和嵌入式Linux操作系统为原型讲述BootLoader
的原理。通过理论联系实践的方法论,让读者理解BootLoader的概念,掌握开发BootLoader的方法。本书适合从单片机向ARM过渡并希望了解嵌入式开发的在校学生
以及想要从事BootLoader开发移植工作的工程师参考使用。
下面来梳理一下需要哪些背景知识:
1)因为我们引导的操作系统是Linux,所以需要熟悉Linux开发环境。BootLoader也是一串代码,我们必须了解Linux下编辑器和编译器的用法;作为Linux下的开发
者,对shell脚本和Make工程管理工具也要有必要的了解。第1章对BootLoader做了基本介绍,第2章则详细介绍了Linux开发环境。
2)因为我们仅仅以ARM体系结构作为原型,所以会在第3~5章讲述ARM体系结构、ARM指令集和ARM独特的寻址模式
3)很多嵌入式开发人员都是通信、电子和自动化等专业的,对于计算机的编译和链接掌握得不够深入,因此第6章介绍编译和链接。控制链接行为的链接脚本是
特有的脚本语言,第7章比较详细地介绍了该脚本的细节。
4)第8章采用流水灯的实验融会贯通前面各章节的理论,接着第9章对U-Boot代码展开分析,最后在第10章一步一步地实现了BootLoader。在此过程中,我们更注
重ARM体系结构、编译链接等知识的融会贯通,不会花太多篇幅讲解DRAM、MMC等模块的驱动。
本书能够成书,要感谢LinkSprite团队的资源支持和左宝柱在pcDuino v3平台上的帮助。最后感谢家人和朋友对我的支持,鼓励我完成这项值得用心去做的工作。
因作者水平有限且时间仓促,书中难免存在疏漏,还望广大读者不吝赐教。
胡尔佳
2014年11月
1章 BootLoader
本章导读
本书讲述的主题是BootLoader,那么BootLoader是什么呢?首先从字面上来看,BootLoader是一个英文单词,那它是什么意思呢?如果使用词典查询一下,会得到
这样的结果:“对不起,词库中没有您查询的单词!您要查找的是不是:Boot Loader Boot-Loader”Boot Loader[计]引导装载程序。
可以看到BootLoader应该是Boot和Loader这两个单词的组合。Boot的意思是“[计算机科学]引导”,而Loader是“加载器”的意思。因此可以推断
BootLoader这个词是随着计算机科学的发展而衍生出现的
1.1节介绍BootLoader在嵌入式系统或者计算机系统中所扮演的角色。
1.2节结合半导体芯片技术、计算机技术以及软件工程技术的发展历史来探究BootLoader的出现过程,从而说明BootLoader的来历和它在整个计算机系统中的
定位、概念以及作用。
1.3节阐述BootLoader的概念,并以MCU下的BootLoader、嵌入式ARM和Linux下的BootLoader和PC下的引导流程为例进行说明。
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存储其他
信息。
of 53
25墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜