嵌入式系统中引导程序的实现

嵌入式系统中引导程序的实现

ID:38183974

大小:31.00 KB

页数:3页

时间:2019-05-24

嵌入式系统中引导程序的实现_第1页
嵌入式系统中引导程序的实现_第2页
嵌入式系统中引导程序的实现_第3页
资源描述:

《嵌入式系统中引导程序的实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、嵌入式系统中引导程序的实现    在嵌入式系统的开发过程中,技术难点主要在于系统引导程序的编写,为此本文将详细论述在ARM7基础上开发嵌入式系统时引导程序的实现。   引导加载程序是系统加电后运行的第一段软件代码。当一个微处理器最初启动时,他首先执行预定地址处的指令。通常这个位置是只读内存,其中存放着系统初始化或引导程序。在PC系统中,引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的操作系统BootLoader(比如,LILO和GRUB等)一起组成。BIOS进行CPU初始化、配置其他硬件,并完成硬件检测和资源分配。然后,BIOS判断出哪

2、一个磁盘包含有操作系统,再把硬盘MBR中的BootLoader读到系统的RAM中,然后将控制权交给操作系统BootLoader。BootLoader的主要运行任务就是将内核映象从硬盘上读到RAM中,然后跳转到内核的入口点去运行,也即开始启动操作系统,并把控制权交给操作系统,再由操作系统引导其他应用程序。   在嵌入式系统中,通常并没有像BIOS那样的固件程序(注:有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。比如在一个基于ARM7TDMIcore的嵌入式系统中,系统在上电或复位时通常都从地址0x

3、00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。2引导程序流程   嵌入式系统的资源有限,程序通常都是固化在ROM中运行。ROM中程序执行前,需要对系统硬件和软件运行环境进行初始化,这些工作由用汇编语言编写的引导程序完成。引导程序是嵌入式程序的开头部分,应与应用程序一起固化在ROM中,并首先在系统上运行。他应包含各模块中可能出现的所有段类,并合理安排他们的次序。写好引导程序是设计好嵌入式程序的关键,系统引导程序所执行的操作依赖于正在开发其软件的系统,一般流程包括:初始化端口,屏蔽中断,把程序拷贝到SRAM中;完成代码

4、的重映射;配置中断句柄,连接到C语言人口,进入应用程序主循环。3详细步骤(1)设置人口指针   引导程序首先必须定义人口指针,而且整个应用程序只有一个入口指针。(2)设置中断向量   ARM7要求中断向量表必须设置在从。地址开始,连续8X4B的空间。在0x0一Ox000000lc位置放置7条跳转指令,分别实现各种异常处理程序,包括0x00000000:Reset_Handler(复位),0x00000004:Undefined-Handler(未定义指令错误),Ox00000008:SWI_Handler(软件中断),0x0000000C:Prefetch

5、_Handier(预取指令错误),0x00000010:Abort_Handler(数据存取错误),0x00000014:保留的中断向量,0x00000018:IRQ_Handier,0x0000001C:FIQ_Handler。   如果ROM定位于0地址,中断向量表包含一系列指令跳转到中断服务程序,否则向量必须被动态初始化。可以在启动程序中添加一段代码,使其在运行时将向量表拷贝到。地址开始的存储器空间。对于各未用中断,使其指向一个只含返回指令的哑函数,以防止错误中断引起系统的混乱。(3)初始化堆栈和寄存器   程序从Reset_Handler(复位)进

6、入后,先进行相关硬件的初始化操作,如初始化SDRAM,CPUSPEED,InterruptController,UART,Timer等。系统堆栈初始化取决于用户使用了哪些中断,以及系统需要处理哪些错误类型。一般来说管理者堆栈必须设置,如果使用了IRQ中断,则IRQ堆栈也必须设置。如果系统使用了DRAM或其他外设,需要设置相关的寄存器,以确定其刷新频率,数据总线宽度等信息。(4)初始化存储器系统   有些芯片可通过寄存器编程初始化存储器系统,而对于较复杂系统通常集成有MMU来管理内存空间。(5)如有必要改变处理器模式、状态   如果应用程序是运行在用户模式下

7、,可在此处将系统改为用户模式并初始化用户堆栈指针。(6)初始化C语言所需的存储器空间   为正确运行应用程序,在初始化期间应将系统需要读写的数据和变量从ROM拷贝到RAM里;一些要求快速响应的程序,如中断处理程序,也需要在RAM中运行;如果使用Flash,对Flash的擦除和写入操作也一定要在RAM里运行。ARM公司软件开发工具包中的链接器提供了分布装载功能,可以实现这一目的。(7)呼叫C程序   ARM有两种指令集:16bThumb指令集和32bARM指令集。使用16b的存储器可以降低成本,在这种情况下,Thumb指令集的整体执行速度比ARM32b指令集

8、快,而且提高了代码密度,所以一般用Thumb编译器将C语言程序编译

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。