嵌入式系统ARM的通用bootloader的设计与实现 第6页
Bootloader的操作模式
大多数bootloader都包含两种不同的操作模式:“启动加载”模式和“下载”模式,这种区别对于开发人员才有意义。但从最终用户的角度看,bootloader的作用永远就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。
启动加载模式:这种模式也称为“自主”模式,即bootloader从目标机上的某个固体存储设备上将操作系统加载到RAM中运行,整个过程没有用户的介入。这种模式是bootloader的正常工作模式,因此当以嵌入式产品发布的时候,bootloader必须工作在这种模式下。
下载模式:在这种模式下,目标机上的bootloader将通过串口或者网络连接或者其它通信手段从主机下载文件,比如:下载内核镜像和根文件系统镜像等。从主机下载的文件通常首先被bootloader保存到目标机的RAM中,然后被bootloader写到目标机上的FLASH类固态存储设备中。Bootloader的这种模式通常在第一次安装内核与根文件系统时使用;此外,以后的系统更新也会使用bootloader的这种工作模式。工作于这种模式下的bootloader通常都会向它的中断用户提供一个简单的命令行接口。
3.3 Bootloader的概念扩展
Bootloader最主毕业论文
http://www.Lwfree.cn行开发和调试。从这个层面上看,功能扩展后的bootloader可以虚拟地看成是一个微小的系统级的代码包。
3.4 ARM Bootloader的共性
从上面bootloader的基本概念可以看出,bootloader的设计与实现是与具体的CPU以及具体的硬件系统紧密相关的,从上一章的实现就可以看出,要实现一个通用的ARM bootloader,即要适合所有的ARM处理器以及硬件系统,是不太可能的事情。另外,不同的操作系统,可能对具体的bootloader还会有另外额外的要求。但是,我们还是可以根据ARM的体系结构,从理论上总结出一些ARM系统bootloader实现的共性,而这仅仅局限于理论上。至于涉及到具体的设计与实现,可以参看第四章的具体内容,并根据自己的硬件系统进行移植,也不是一件困难的事情。
对于ARM bootloader的一些共同特性,理论上只局限于bootloader的基本功能,因为扩展功能众多,可以有串口、USB、以太本文来自优文论文网网接口、IDE、CF等,无法进行归纳与总结。
对于一个ARM系统来说,本质上,bootloader作为引导与加载内核镜像的“工具”,在实现上,必须提供以下几个功能,更确切地说,必须做到以下几点[ 1]:
(1) 初始化RAM(必需):bootloader必须能够初始化RAM,因为将来系统要通过它保存一些Volatile数据,但具体地实现要依赖与具体的CPU以及硬件系统。
(2) 初始化串口(可选,推荐):bootloader应该要初始化以及使能至少一个串口,通过它与控制台联系进行一些debug的工作;甚至与PC通信。
(3) 创建内核参数列表(针对linux操作系统,推荐)。
(4) 启动内核镜像(必需):根据内核镜像保存的存储介质不同,可以有两种启动方式:FALSH启动以及RAM启动;但是无论是哪种启动方式,下面的系统状态必须得到满足:
CPU寄存器的设置: R0=0;
R1=机器类型;
R2=启动参数标记列表在RAM中的起始地址;
这三个寄存器的设置是在最后启动内核时通过启动参数来传递完成的。
CPU模式: 关闭中断;
属于SVC模式;
Bootloader中没有必要支持中断的实现,这属于内核机制以及设备驱动管理的管理范畴;SVC模式是系统的一种保护模式,这样就可以进行一些只能在SVC模式下的操作,例如一些特定寄存器访问操作。
Cache和MMU的设置: MMU必须关闭;
数据cache必须关闭;
指令cache可以关闭也可以开启;
Bootloader中所有对地址的操作都是使用物理地址,是实在的实地址,不存在虚拟地址,因此MMU必须关闭。Bootloader主要是装载内核镜像,镜像数据必须真实写回SDRAM中,所以数据cache必须关闭;而对于指令cache,不存在强制性的规定,但是一般情况下,推荐关闭指令cache。
Bootloader启动内核镜像的方法是通过跳转语句直接跳转至内核镜像的第一句指令语句。
第四章 Bootloader的设计与实现
本章开始叙述bootloader的设计与实现,主要涉及代码的实现以及系统存储空间的具体分配,基本上为软件的设计与实现。
4.1 课题研究的平台环境
在本章开始,首先介绍本文研究的硬件平台和软件开发平台。
4.1.1 硬件平台
Booltoader是与硬件环境息息相关的,特别是与具体的处理器与具体硬件系统。对于本本文,其具体的实现与验证都需要具体的硬件环境。本课题的硬件平台是围绕PXA255(前面章节已有介绍)搭建起来的。整个系统的硬件框架如图所示。
图4.1
选择以Intel Xscale系列的PXA255为核心的硬件系统,是因为该系统既与相关的项目重叠,而且Xscale核本身是StrongArm的一个毕业论文
http://www.Lwfree.cn集,它与ARM V5TE构架兼容,另外PXA系列目前广泛应用于各类嵌入式系统中,是市场主流的嵌入式微处理器系列。对其研究,既有一定的典型性,又有一定的前瞻性。
对于图4.1描述的硬件环境中,本课题需关注的是处理器、存储器以及在bootloader中需要支持的一些外部设备(如串口、USB、LCD)等。
4.1.2 软件环境以及软件开发工具
4.1.2.1 操作系统
本文操作系统使用的是开放源码的Linux操作系统,因此最终bootloader的实现是针对Linux操作系统的,加载的kernel镜像也是Linux kernel生成。
4.1.2.2 编程语言
由于本文与芯片底层关系密切,甚至还涉及到相关协处理器,因此在与硬件芯片底层相关的部分使用汇编,这样可以大大提高性能以及移植性;而在很多系统板级的支持上,则使用C语言,以提高代码的可读性以及层次性。
4.1.2.3 编译环境
本文所使用的编译工具均为GNU的编译工具。其主要包括汇编器as、C编译器gcc、C++编译器g++、连接器ld和相关的二进制转换工具,而基于ARM平台的工具分别为arm-linux-as、arm¬-linux-gcc、arm-linux-g++、arm-linux-ld和,这些也是平常所说的交叉编译工具。GNU的编译器功能非常强大,共有上百个操作选项,不过在本课本文来自优文论文网题实际开发中只需要用到有限的几个,大部分采用缺省选项。本课题使用的版本为2.95.3。GNU的所有开发工具都可以从www.youerw.com上下载,基于ARM的工具可以从www.251com.cn获得。
一般地,GNU工具地开发流程如下:(1)编写C、C++或者汇编源程序(2)用相关编译器生成目标文件(3)编写连接脚本(4)用连接器生成最终文件(elf格式)(5)用二进制转换工具生成可下载的二进制代码。
在以后篇幅介绍具体bootloader的实现时,基本就根据以上流程进行开发。
4.2 Bootloader的总体设计
4.2.1 阶段设计
在前面的章节中,已经介绍过bootloader的启动可以是分阶段的。在设计时,我们将bootloader分为两个阶段:阶段1和阶段2。分为两个阶段的原因是因为:(1)基于编程语言的考虑。阶段1用主要用汇编语言,它主要进行与CPU核以及存储设备密切相关的处理工作,进行一些必要的初始化工作,是一些依赖于CPU体系结构的代码,为了增加效率以及因为涉及到协处理器的设置,只能用汇编编写,这部分直接在FLASH中执行;阶段2用一般的C语言,来实现一般的流程以及对板级的一些驱动支持,这部分会被拷贝到RAM中执行。(2)代码具有更好的可读性与移植性:若对于相同的CPU以及存储设备,要增加外
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页
嵌入式系统ARM的通用bootloader的设计与实现 第6页下载如图片无法显示或论文不完整,请联系qq752018766