已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章ARM启动代码设计及中断的处理,内容,5.1嵌入式软件开发5.2启动代码分析5.3BootLoader分析5.4ARM中断处理,5.1嵌入式软件开发,无操作系统的软件开发启动代码应用程序基于操作系统的软件开发bootloader操作系统移植BSP板级支持包应用程序开发,启动代码,功能硬件初始化引导C代码特征通常用汇编语言编写程序复位运行入口点代码量非常小,程序流程设置中断、异常入口关中断硬件寄存器初始化(GPIO配置、总线配置、PLL时钟)初始化栈指针数据区初始化C入口函数调用BLMain,应用程序(无操作系统),功能硬件驱动应用特征通常用C语言或者嵌入式汇编语言编写程序较复杂,代码量较大,bootloader,功能硬件初始化引导操作系统下载程序(串口、网口、USB)烧写flash特征程序复位运行入口点通常用汇编语言+C语言编写代码量较小,嵌入式操作系统移植,LinuxWindowsCEuC/OSIIuClinuxNucleus,BSP板级支持包,功能为应用程序提供统一的硬件操作接口特征高度硬件相关高度依赖于具体硬件平台各种操作系统各异,应用程序开发(操作系统),功能GUI图形、人机交互控制算法特征硬件依赖程度小部分可仿真调试各种操作系统各异,嵌入式软件设计和调试流程,编辑创建工程添加文件、编写程序汇编语言加C语言编译配置编译、汇编和连接参数编写连接脚本文件编译,调试连接调试器下载程序运行、调试固化通过仿真器烧写flash专用或通用的编程器通过bootloader烧写flash,交叉编译,GNU交叉编译编译.carm-elf-gcc汇编.Sarm-elf-gas连接.oarm-elf-ld操作文件汇编文件.SC文件.c链接脚本文件ldscript库文件.o.lib.a,生成调试格式文件.elfDWARF-1DWARF-2生成bin文件elf2binarm-elf-objcopy,ARM代码结构,ARM程序编译后得到的二进制代码通常包含:代码段(text段或code段):编译后的代码,只读读写数据段(data段):可读写的全局变量,读写只读数据段(rodata段):只读数据,如const类型的全局变量BSS段:需要清0的数据这些段在链接(link)过程中产生,并且在链接过程中都应该设置各段的起始地址。程序必须从代码段指定的起始位置处运行。根据代码段运行所在地址的硬件介质不同可以将程序分为在RAM运行的程序和在ROM运行的程序。,链接脚本,段Text段rodata段data段bss段符号Image_RO_LimitImage_RW_BaseImage_ZI_BaseImage_ZI_Limit,GCC库专用调试信息,链接脚本示例,程序在SDRAM中运行,程序在FLASH中运行,在RAM运行程序结构图,在ROM运行程序结构图,GCC库,GCC库标准C函数库lib.a-lc标准数学函数库libm.a-lm标准函数库的支持库libg.a-lgGCC的支持库libgcc.a-lgcc链接排列顺序-lmlclgcc-lg,5.2启动代码,由于ARM软件编程一般采用高级语言,如C语言,因此在系统启动后必须有一段程序能够将CPU带入到能够运行C语言的状态,这段程序就是启动代码。启动代码通常用汇编语言完成,并在系统复位入口点(ARM系统中为0地址)运行。在嵌入式系统中系统复位入口点所在的硬件通常是Flash等芯片,存储在这些芯片中的数据即使掉电也能够保存,而且这个地方的硬件的访问宽度是由硬件设计决定,软件不能更改,这样就能保证上电后该地址的数据有效。,启动代码主要功能(1),1、建立异常向量表2、初始化硬件:初始化RAM、关闭中断、关闭看门狗等3、初始化堆栈4、初始化读写数据段、BSS段:在ROM中运行的程序必须将数据段从ROM中拷贝到RAM中,并将BSS段清零;在RAM中运行的程序则需要将BSS段清零,然后将整个代码段、只读数据段、读写数据段和BSS段从ROM拷贝到RAM。,启动代码主要功能(2),5、重定向位置无关的代码是指该代码不用在编译指定的地址运行也能保证程序的执行流程和执行逻辑不会改变。位置相关代码运行的地址必须和编译时的地址一致,否则将导致程序运行流程改变。在初始化程序区、数据区之后需要一条跳转指令将PC跳转到编译时指定的运行地址接着运行。LDR指令及之前的指令都在ROM中运行,而startram标号之后的代码则跳转到编译时指定的地址(RAM或者ROM中)中运行了,因为startram标号表示的地址是由编译时就确定的。这个过程就是重定向。LDRPC,=startramstartram:重定向之前运行的代码必须是位置无关的代码。,启动代码主要功能(3),6、跳转到C代码LDRPC,=Main,5.2启动代码分析,在基于ARM920Tcore的嵌入式系统中,系统在上电或复位时都从地址0 x00000000开始执行,因此在这个地址处安排的通常就是系统的启动代码。它通常也是BootLoader程序的一部分,可以在启动代码基础上编写BootLoader。用汇编语言编写。启动代码是在复位后运行其它程序之前运行的一段小程序。通过它,初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用C函数准备好正确的环境。,启动代码的移植和修改,启动代码除了依赖于CPU的体系结构外,实际上也依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,RAM芯片的类型,其他外设的类型等。对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,如果他们的硬件资源和配置不一致的话,要想让运行在一块板子上的启动代码也能运行在另一块板子上,也还是需要作一些必要的修改。,启动代码流程图,启动代码的功能:RAM初始化,设置各个部件的时钟和片选,将BootLoader拷贝到RAM中,设置堆栈,调用C函数。注意:在本阶段,特别是在堆栈设置之前,进行函数调用(也有些汇编子程序不需要使用堆栈)或者使用堆栈保存数据将产生不可预知的结果;,设置异常跳转表,复位异常直接跳转到ResetHandler处,它是相对跳转,位置无关。,关闭看门狗,设置S3C2410WTCON寄存器必须设置,设置中断模式并禁止中断,设置S3C2410中断寄存器设置所有一级中断源与二级中断源为不可用状态,配置存储器控制寄存器宽度,堆栈初始化,C代码初始化,拷贝RW数据段,ZI段清零,跳转到Main函数处执行,5.3BOOTLOADER分析,BootLoader是在启动代码的基础之上,通常启动代码包含于BootLoader之中BootLoader常用于引导操作系统或者应用程序BootLoader可以包含一些简单的调试手段JXARM9-2410使用通用的u-boot,u-boot简介,u-boot是由德国DENX小组开发的交叉平台BootLoader,其全称为“universalBootLoader”。u-boot的开发目标是支持尽可能多的嵌入式处理器和嵌入式操作系统。它提供数百种嵌入式开发板和各种CPU,包括PowerPC、ARM、Xscale、MIPS、Coldfire、NIOS、Microblaze和x86等,同时它除了支持Linux系统的引导外,还支持NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS等多种嵌入式操作系统的引导。,u-boot简介,u-boot的用户接口类似于Linux的shell界面,通过串口连接以后,用户可以交互式的输入命令和看到结果,u-boot的启动界面如下所示:U-Boot1.1.1(Sep62004-12:12:06)U-Bootcode:33F80000-33F9CED0BSS:-33FA116CRAMConfiguration:Bank#0:3000000064MBFlash:32MBIn:serialOut:serialErr:serialHitanykeytostopautoboot:0JX2410#,BootLoader的基本概念,BootLoader是系统加电后运行的第一段软件代码。嵌入式系统中,整个系统的加载启动任务完全由BootLoader来完成。比如在一个基于ARM920Tcore的嵌入式系统中,系统在上电或复位时都从地址0 x00000000开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。简单地说,BootLoader就是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。通常,BootLoader是依赖于硬件而实现的,特别是在嵌入式领域,为嵌入式系统建立一个通用的BootLoader是很困难的。,BootLoader的移植和修改,BootLoader除了依赖于CPU的体系结构外,BootLoader实际上也依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,RAM芯片的类型,其他外设的类型等。对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,如果他们的硬件资源和配置不一致的话,要想让运行在一块板子上的BootLoader程序也能运行在另一块板子上,也还是需要作一些必要的修改。,BootLoader的安装,系统加电或复位后,所有的CPU通常都从CPU制造商预先安排的地址上取指令。比如,S3C2410在复位时都从地址0 x00000000取它的第一条指令。嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM或FLASH等)被安排这个起始地址上,因此在系统加电后,CPU将首先执行BootLoader程序。也就是说对于基于S3C2410的这套系统,我们的BootLoader是从0地址开始存放的,而这块起始地址需要采用可引导的固态存储设备如FLASH。,用来控制BootLoader的设备或机制,串口通讯是最简单也是最廉价的一种双机通讯设备,所以往往在BootLoader中主机和目标机之间都通过串口建立连接,BootLoader程序在执行时通常会通过串口来进行I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。当然如果认为串口通讯速度不够,也可以采用网络或者USB通讯,那么相应的在BootLoader中就需要编写各自的驱动。,BootLoader的操作模式,启动加载模式:这种模式也称为自主(Autonomous)模式。也即BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是BootLoader的正常工作模式。下载模式:在这种模式下,目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机下载文件,比如:下载应用程序、数据文件、内核映像等。从主机下载的文件通常首先被BootLoader保存到目标机的RAM中,然后再被BootLoader写到目标机上的固态存储设备中。BootLoader的这种模式通常在系统更新时使用。工作于这种模式下的BootLoader通常都会向它的终端用户提供一个简单的命令行接口。在uboot中可以通过修改环境变量实现自主模式。,BootLoader与主机间文件传输的通信设备及协议,最常见的情况就是,目标机上的BootLoader通过串口与主机之间进行文件传输,传输可以简单的采用直接数据收发,当然在串口上也可以采用xmodemymodemzmodem协议以及在以太网上采用TFTP协议。,BootLoader的主要任务与典型结构框架,从操作系统的角度看,BootLoader的总目标就是正确地调用内核来执行。大多数BootLoader都分为stage1和stage2两大部分。依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的,也就是前面说的启动代码。而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且代码会具有更好的可读性和可移植性。,BootLoader的主要任务与典型结构框架,BootLoader的stage1通常包括以下步骤为加载BootLoader的stage2准备RAM空间拷贝BootLoader的stage2到RAM空间中设置好堆栈跳转到stage2的C入口点BootLoader的stage2通常包括以下步骤初始化本阶段要使用到的硬件设备调用应用程序或启动内核,Stage1初始化流程图,stage1的功能:RAM初始化,设置各个部件的时钟和片选,将BootLoader拷贝到RAM中,设置堆栈,调用Stage2。注意:在本阶段,特别是在堆栈设置之前,进行函数调用(也有些汇编子程序不需要使用堆栈)或者使用堆栈保存数据将产生不可预知的结果;,Stage2流程图,stage2的功能:初始化串口,显示菜单,通过控制台获取用户输入,并执行相应的命令操作。,板级支持包,BSP(板级支持包)是介于底层硬件和操作系统之间的软件层次,它完成系统上电后最初的硬件和软件初始化,并对底层硬件进行封装,使得操作系统不再面对具体的操作。,板级支持包的特点,硬件相关性:因为嵌入式实时系统的硬件环境具有应用相关性,所以,作为高层软件与硬件之间的接口,BSP必须为操作系统提供操作和控制具体硬件的方法。操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。,板级支持包的功能,板级支持包的功能,嵌入式系统初始化片级初始化板级初始化系统级初始化硬件相关的设备驱动程序,系统级初始化,这是一个以软件初始化为主的过程,主要进行操作系统初始化。BSP将控制转交给操作系统,由操作系统进行余下的初始化操作。包括加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块,比如网络系统、文件系统等;最后,操作系统创建应用程序环境并将控制转交给应用程序的入口。,硬件相关的驱动程序,与初始化过程相反,硬件相关的设备驱动程序的初始化和使用通常是一个从高层到底层的过程。尽管BSP中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不直接由BSP使用,而是在系统初始化过程中由BSP把它们与操作系统中通用的设备驱
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 隧道机电工程施工规范
- 精神科焦虑障碍治疗方案
- 视觉美学提升的设计操作手册
- 面形转换技术发展趋势预测分析
- 管理案例的分析方法
- 2025年工业园区车辆临时占用协议
- 2025自考会计制度试题及答案
- 陕师大教育技术学教案第12章 教学评价
- 2025年采油工的工作总结(2篇)
- 2025年(制药工程)生药学试题及答案
- 脑机接口技术在康复医学中的应用与展望
- CZ-42船舶航次安全风险评估管理须知 - 副本
- GB/T 9573-2013橡胶和塑料软管及软管组合件软管尺寸和软管组合件长度测量方法
- 劳动争议调解仲裁法知识讲座
- 矮小症诊治指南
- GB 14443-2007涂装作业安全规程涂层烘干室安全技术规定
- 解一元一次方程移项说课稿课件
- 危机管理及风险评估基础知识课件
- 多原子分子的结构和性质
- 中兴视频会议MCU MS9000开局配置
- 江苏股权交易中心章程
评论
0/150
提交评论