镀锌板带厂家
免费服务热线

Free service

hotline

010-00000000
镀锌板带厂家
热门搜索:
成功案例
当前位置:首页 > 成功案例

当嵌入式系统引导技术研究

发布时间:2021-09-10 03:28:08 阅读: 来源:镀锌板带厂家

嵌入式系统引导技术研究

嵌入式系统应用开发不同于PC机,其开发过程同时涉及软硬件,需要将硬件平台的设计、操作系统以及上层应用开发综合考虑;而PC机应用开发建立在已经定制好的硬件和操作系统平台上,开发者只需调用系统提供的接口和服务完成相应的功能。由于应用和成本约束,嵌入式系统的硬件平台需根据应用量身定制,通常所用的MPU、存储器、外围设备等有多种选择余地,而且软件调试技术特殊,使平台的引导设计变得十分复杂。因此,对于嵌入式系统开发者而言,有必要深入分析系统引导过程,将软硬件开发有效地综合,即针对不同的硬件平台和软件运行模式,正确地进行底层上电初始化,进而引导操作系统执行。这个问题的核心在于对系统的引导模式的研究。

嵌入式系统的启动代码一般由两部分构成:引导代码和操作系统执行环境的初始化代码。其中引导代码一般也由两部分构成:第一部分是板级、片级初始化代码,主要功能是

通过设置寄存器初始化硬件的工作方式,如设置时钟、中断控制寄存器等,完成内存映射、初始化MMU等;第二部分是装载程序,其功能是将操作系统和应用程序的映像从只读存储器装载或者拷贝到系统的RAM中,并跳转到相应的代码处继续执行。操作系统执行环境的初始化代码主要由硬件抽象层HAL代码、设备驱动程序初始化代码和操作系统执行体初始代码三部分构成。

本文以摩托罗拉MPC860处理器和具有自主知识产权的操作系统CRTOSII为例,研究嵌入式系统引导程序的设计和实现技术。嵌入式软件的开发涉及调试模式和固化模式两种运行状态。调试模式主要解决如何在目标板上调试正确性未经验证的程序的问题;而固化模式主要解决如何引导已调试成功的程序的问题。相应地,引导代码的设计应针对两种模式分别进行。

1调试模式的系统引导

1.1调试模式引导代码的作用

一个完整的嵌入式软件的解决方案大致包括四建立全国统1的绿色建材标准、认证和标识方面:①硬件平台配置初始化和系统引导代码;②操作系统软件执行环境的初始化代码;③操作系统;④应用程序。

在上述四方面中,引导代码是本研究中力求解决的问题。事实上,板级初始化、操作系统硬件抽象层、设备驱动程序三者整合到一起,就构成了嵌入式系统中BSP(板级支持包)的主体。BSP的代码与具体的目标板硬件设计相关,同时也与应用程序的设计要求相关,针对应用程序提出的不同要求,例如不同设备驱动程序、不同的中断源个数、不同的中断优先级安排、是否启用MMU机制等,BSP部分应作出相应的安排。上述第四部分的应用程序是建立在前三部分正确运行的基础上,并需反复调试。

由上述分析可知,BSP和应用程序代码的正确性通过一次的编写不能得到保证,需要经历 调试 修改 调试 反复的过程,因此需要建立一个可靠的调试环境。该环境建立的基础正是调模式下的引导代码。

1.2引导代码的调试方法

本研究实验采用一种称作BDM(Background传动DebugMode)的OCD(OnChipDebuging)调试技术。BMD是由Motorola公司提供的一种硬件调试方法,类似于JTAG调试。它利用处理器提供的调试端口调试。MPC860采用一种特殊的BDM EPBDM,其运作相当于用处理器内嵌的调试模块接管中断及异常处理,用户通过设置调试许可寄存器(debugenableregister)指定哪些中断或异常发生后处理器直接进入调试状态,而不是操作系统的处理程序。进入调试状态后,内嵌调试模块向外部调试通信接口发出信号,通知一直在通信接口监听的主机调试器,然后调试器便可通过调试模块使处理器执行系统指令(相当于特权态)。由于专用的片级调试接口装置(BDI2000)的支持,不需要目标端配备相应的调试代(Monitor)软件。

1.3调试模式引导代码实现

调试模式引导代码的核心在于使用BDM协议解析微指令,通过调试接口向MPC860发送信号,初始化调试环境。由于MPC860采用RISC结构,所以初始化部分主要是设置处理器内部寄存器,这个过程包括三方面内容:

(1)对处理器相关寄存器进行初始化:主要是关于处理器状态的寄存器(MSR、SRR1、SIUMCR等),中断、时钟相关模块(SYPCR、SCCR、PLPRCR、TBSCR等)。

(2)对BDM调试端口的初始化:包括调试使能寄存器DER、支持指令断点的寄存器ICTRL等。

(3)对片级、板级内存映射的初始化:包括内部内存映射寄存器IMMR,内存控制相关寄存器OR0~0R7、BR0~BR7等。它们主要功能是地址映射、片选信号选择、内存控制器选择(UMPA、UMPB、GPCM)。如果选择UPM,由于UPM控制采用微指令方式,而这些微指令根据内存的不同(SRAM、SDRAM、DRAM等),需要设计人员自行编写代码写入MPC860内部存储区相应位置。对于需要实时刷新的存储体(如SDRAM),还需设置刷新控制微指令。

上述初始化代码得以执行,一方面依赖于目标机MPC860提供的调试接口支持,另一方面也需要宿主机GDB的支持。对于宿主机系统,可能选择Linux,在其下配置GBD;也可以选择Windows2000,使用可视化的调试工具LambdaToolsGDB(Coretek公司产品,不支持硬件断点),或者使用BDI2000(支持硬件断点的仿真器)。不管使用哪种调试工具,都可以使用该调试器能够识别的脚本文伯存放初始化指令。这些脚本在功能上是等效的,指令的描述一般都采用如下格式:

操作码寄存器数值

如在嵌入式Linux下SDRAM初始化的代码片断为:

mpcbdmsprMDR= 0x1FF77C35

mpcbdmsprMDR= 0xEFEABC34

mpcbdmsprMDR= 0x1FB57C35

而在Win很多塑料软包装资料厂、印刷厂因此而构成了损掉dows2000下使用BDI2000代码为:

WUPM0xx1FF77C35

WUPM0xxEFEABC34

WUPM0xx1FB57C35

脚本描述的指令执行后,MPC860按照预先的设想进入一个可以正常工作的状态,可以用装载器将程序下载到SDRAM中调试执行。这个程序主要包含中断表、操作系统和应用程序映象两部分,其格式可以为bin、elf、coff等。图1给出了下载完毕后的内存映象。

当程序下载完成后,PC指针指向Image代码段(text段)的首条指令,可以利用调试器提供的命令开始调试。

2固化模式的系统引导

2.1概述

经过调试后,OS和上层应用程序构成的Image的正确性得到了保证,但是这个Image不能自主运行。因为调试模式下,是通过BDM接口初始化处理器,并且通过BDM接口将程序下载到RAM中去运行。实际应用环境中,Image必须被存储在非易失性存储器中,如Flash、EPROM等,本文选择Flash。系统启动时,处理器执行一段引导程序替代调试模式下的调试脚本和装载程序的功能。启动代码主要考虑以下几个问题:

(1)系统上电和复位时程序如何执行,需要初始化哪些寄存器,重点仍然是内存映射相关部分;

(2)启动代码为几部分,每部分代码应该全部还是部分放到Flash或者RAM中执行;

(3)在时间效率和空间效率的折衷。

2.2上电初始化

在两种引导模式下,上电初始化总是必要步骤。它涉及各种核心寄存器初始化、地址映射等问题的处理。

2.2.1地址映射

MPC860的复位是通过一种异常中断来处理的(可理解为CPU自己产生的中断),向量号为0x100。异常向量表的基地址加上复位向量号即为复位向量,也就是CPU开始执行指令的地方。异常向量表在内存空间的可能位置有两个:0x和0xFFF00000。所以PowerPC的复位向量为0x100或0xFFF00100。假设复位向量为0xFFF00100,系统有128K字节的Flash,并准备把它映射到CPU内存空间0xFE000000开始的地址。MPC860内部的CS0片选信号是默认的系统启动片选信号,已被连接到Flash的片选线上。上电时,内存控制器会忽略所有参与征选逻辑的地址线的高17位,CS0总是有效。这样,Flash总会被选中,CPU从Flash偏移0x100的地方取指令,此时CPU的4GB内存空间的每个128KB的块都被映射到Flash。

2.2.2寄存器初始化

固化方式下的大致相同,但是不再采用脚本文件编写,而是直接将一段MPC860汇编程序存放在一个start.s文件中。与调试模式初始化程序一样,主要完成以下处理:

(1)初始化CPU核心寄存器;

(2)设置机器状态寄存器;

(3)禁止ceche;

(4)初始化IMMR;

(5)初始化系统接口单元(SIU);

(6)初始化时钟和中断控制寄存器;

(7)初始化通信处理机(CPM);

(8)初始化内存控制器(UPM);

(9)初始化C语言堆栈。

2.2.3地址空间重映射

上电时,由于只有一个片选信号有效,它选通了Flash,而RAM和其它存储设备地址无效,需要经过地址空间重映射才能访问。MPC860的地址空间重映射是通过设置0R0~OR7、BR0~BR7这十六个寄存器完成的。

荆州西服设计
荆州西服制作
荆州制作西服
辽源订制西装