欢迎来到天天文库
浏览记录
ID:59294042
大小:125.50 KB
页数:44页
时间:2020-09-20
《嵌入式系统软件设计ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、2021/10/21第五章嵌入式系统软件设计嵌入式系统作为一个完整的、独立的、能够单独运行的系统。与传统的通用计算机系统相比,它有许多独有的特点。这些特点也产生了它与通用计算机系统的区别。这些区别不仅表现在整个系统软件的结构上,也体现在软件的开发方法上。2021/10/225.1嵌入式软件结构及组成用户应用软件高层用户应用软件底层GUI协议设备驱动文件系统操作系统层板级支持包初始化引导代码2021/10/235.2初始化引导代码实例初始化引导代码也称为引导加载程序,即BootLoader。它是系统上
2、电后运行的第一段程序代码。通过这段代码,可以初始化存储器空间的映射,从而将系统的软硬件环境设置到一个合适的状态,以便为最终调用操作系统内核准备好环境。2021/10/24PC的启动过程:在系统上电后由BIOS(一段固件程序)进行POST(上电自检),在分配资源过后,将硬盘MBR(主引导记录)中的OSBootLoader如LILO,或者GRUB)载入内存,然后将控制权交给OSBootLoader,将操作系统内核映象加载到内存中,接着就跳转到内核的入口处去执行,即启动操作系统。2021/10/25而在嵌
3、入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。一般在上电或者复位后,嵌入式系统都会从一个固定的地址处开始执行。这个固定地址一般由CPU生产厂商决定(通常为0x0000_0000),在这个地址处安排的通常就是系统的Boot-Loader程序。2021/10/26与普通PC的启动相比较,在嵌入式系统中所说的BootLoader的功能与普通PC中的BIOS以及OSBootLoader类似。与B
4、ootloader不同的是BIOS在装载OS系统的同时,还传递一些参数设置(中断端口定义、显存大小等),而Bootloader一般只简单地装载系统。2021/10/27BootLoader的启动一般分为两个阶段。阶段一主要完成的是与CPU体系结构有关的初始化,如设备的初始化。它一般用汇编语言来实现。阶段二主要完成的是一些常规的初始化,通常用C语言实现。2021/10/28我们按照U-Boot的启动流程介绍了各个阶段主要完成的工作以及相应的一些示意代码和程序框架。对ARM9核处理器,U-boot启动流
5、程主要体现在三个文件上,即cpu/***/start.slib_arm/board.ccommon/main.c。2021/10/29start.s文件在start.s文件中通过如下语句来指定这个入口:.globl_start_start:因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本文件u-boot.lds来完成。u-boot.lds文件用来设置U-boot中各个目标文件的连接地址。注:链接脚本文件的功能是将输入文件的各节映射到输出文件中;换句话说,它将所有输入对象文件都链接到
6、单一的可执行文件中,将该可执行文件的各节装入到指定地址处。2021/10/210设置异常向量异常中断向量表是u-boot与操作系统内核发生联系的关键地方之一。即使操作系统内核已经得到处理器的运行控制权,一旦发生中断,处理器还是会自动跳转到从0x0地址开始的异常中断向量表中的某个位置(依据中断类型)处读取指令运行。ARM9要求异常中断向量表必须设置在从0地址开始,连续8×4字节的空间,分别是复位、未定义指令错误、软件中断、预取指令错误、数据存取错误、一个保留的中断向量以及IRQ和FIQ。2021/10
7、/211bresetldrpc,_undefined_instruction;将标号_undefined_instruction的地址加载到pc中。在该例中,_undefined_instruction处又放的是;undefined_instruction的地址,这样经过一次中间转换,;当未定义指令错误到来时,实际上是将;undefined_instruction处的地址加载到pc中,即运行的是;undefined_instruction处的指令。ldrpc,_software_interruptl
8、drpc,_prefetch_abortldrpc,_data_abortldrpc,_not_usedldrpc,_irqldrpc,_fiq2021/10/212_undefined_instruction:.wordundefined_instruction;在存储器中预留一个字的空间大小,并将标号undefined_instruction放到该空间中,并用标号undefined_instruction表示这个预留的空间_software_interrupt:.
此文档下载收益归作者所有