您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第三章 嵌入式系统的设计方法(第三讲)
嵌入式系统教案云南师范大学信息学院2复习1、嵌入式系统的定义:嵌入式系统是指以应用为核心,以计算机技术为基础,软硬件可裁剪,对功能、可靠性、成本、体积和功耗严格要求的专用计算机系统。2、下列不属于操作系统的是()A、VxWorksB、WindowsCEC、BootLoaderD、Linux3复习3、嵌入式系统由硬件和软件两大部分组成。在硬件方面,嵌入式系统的核心嵌入式处理器一般可以分成4类,即()、()、()和()。而软件由嵌入式操作系统和应用软件组成。4、嵌入式系统的设计过程步骤为:需求分析体系结构设计软件/硬件设计系统集成代码固化413245嵌入式软件开发ARM主流开发工具6第二章嵌入式系统的设计方法启动代码嵌入式软件设计和调试流程操作系统及开发工具的选择BootLoader分析5链接定位脚本ldscript链接定位是系统级软件开发过程中必不可少的一部分,而嵌入式软件开发均属于系统级开发,绝大部分嵌入式软件都涉及链接定位脚本文件,链接定位脚本使得目标代码的组织更加灵活。链接定位过程一般由链接器根据链接定位脚本来完成,链接定位的关键是链接定位脚本的编写。6链接定位脚本ldscript7链接定位脚本ldscript段Text段;rodata段;data段;bss段。符号Image_RO_LimitImage_RW_BaseImage_ZI_BaseImage_ZI_LimitGCC库专用调试信息8链接脚本示例程序在SDRAM中运行程序在FLASH中运行9GCC库GCC库标准C函数库libc.a-lc标准数学函数库libm.a-lm标准函数库的支持库libg.a-lgGCC的支持库libgcc.a-lgcc链接排列顺序-lm–lc–lgcc-lg10JXARM9-2410启动代码分析在基于ARM920Tcore的嵌入式系统中,系统在上电或复位时都从地址0x00000000开始执行,因此在这个地址处安排的通常就是系统的启动代码。它通常也是BootLoader程序的一部分,可以在启动代码基础上编写BootLoader。用汇编语言编写。启动代码是在复位后运行其它程序之前运行的一段小程序。通过它,初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用C函数准备好正确的环境。11启动代码的移植和修改启动代码除了依赖于CPU的体系结构外,实际上也依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,RAM芯片的类型,其他外设的类型等。对于两块不同的嵌入式板卡而言,即使它们是基于同一种CPU而构建的,如果他们的硬件资源和配置不一致的话,要想让运行在一块板子上的启动代码也能运行在另一块板子上,也还是需要作一些必要的修改。12设置异常跳转表复位异常直接跳转到ResetHandler处,它是相对跳转,位置无关。13关闭看门狗设置S3C2410WTCON寄存器必须设置0x01e000000x01d3000014设置中断模式并禁止中断设置S3C2410中断寄存器设置所有一级中断源与二级中断源为不可用状态15配置存储器控制寄存器宽度0x01e00000配置值16堆栈初始化17C代码初始化拷贝RW数据段ZI段清零跳转到Main函数处执行18JXARM9-2410BOOTLOADER分析BootLoader是在启动代码的基础之上,通常启动代码包含于BootLoader之中;BootLoader常用于引导操作系统或者应用程序;BootLoader可以包含一些简单的调试手段;JXARM9-2410使用通用的u-boot。19u-boot简介u-boot是由德国DENX小组开发的交叉平台BootLoader,其全称为“universalBootLoader”。u-boot的开发目标是支持尽可能多的嵌入式处理器和嵌入式操作系统。它提供数百种嵌入式开发板和各种CPU,包括PowerPC、ARM、Xscale、MIPS、Coldfire、NIOS、Microblaze和x86等,同时它除了支持Linux系统的引导外,还支持NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS等多种嵌入式操作系统的引导。20u-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#21BootLoader的基本概念BootLoader是系统加电后运行的第一段软件代码。嵌入式系统中,整个系统的加载启动任务完全由BootLoader来完成。比如在一个基于ARM920Tcore的嵌入式系统中,系统在上电或复位时都从地址0x00000000开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。简单地说,BootLoader就是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。通常,BootLoader是依赖于硬件而实现的,特别是在嵌入式领域,为嵌入式系统建立通用的BootLoader是很困难的。22BootLoader的移植和修改BootLoader除了依赖于CPU的体系结构外,BootLoader实际上也依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,RAM芯片的类型,其他外设的类型等。对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,如果他们的硬件资源和配置不一致的话,要想让运行在一块板子上的BootLoader程序也能运行在另一块板子上,也还是需要作一些必要的修改(移植和修改)。23BootLoader的安装系统加电或复位后,所有的CPU通常都从CPU制造商预先安排的地址上取指令。比如,S3C2410在复位时都从地址0x00000000取它的第一条指令。嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM或FLASH等)被安排这个起始地址上,因此在系统加电后,CPU将首先执行BootLoader程序。也就是说对于基于S3C2410的这套系统,我们的BootLoader是从0地址开始存放的,而这块起始地址需要采用可引导的固态存储设备如FLASH。24用来控制BootLoader的设备或机制串口通讯是最简单也是最廉价的一种双机通讯设备,所以往往在BootLoader中主机和目标机之间都通过串口建立连接,BootLoader程序在执行时通常会通过串口来进行I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。当然如果认为串口通讯速度不够,也可以采用网络或者USB通讯,那么相应的在BootLoader中就需要编写各自的驱动。25BootLoader的操作模式启动加载模式:这种模式也称为自主(Autonomous)模式。也即BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是BootLoader的正常工作模式。下载模式:在这种模式下,目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机下载文件,比如:下载应用程序、数据文件、内核映像等。从主机下载的文件通常首先被BootLoader保存到目标机的RAM中,然后再被BootLoader写到目标机上的固态存储设备中。BootLoader的这种模式通常在系统更新时使用。工作于这种模式下的BootLoader通常都会向它的终端用户提供一个简单的命令行接口。在u-boot中可以通过修改环境变量实现自主模式。26BootLoader与主机间文件传输的通信设备及协议最常见的情况就是,目标机上的BootLoader通过串口与主机之间进行文件传输,传输可以简单的采用直接数据收发,当然在串口上也可以采用xmodem/ymodem/zmodem协议以及在以太网上采用TFTP协议。27BootLoader的主要任务与典型结构框架从操作系统的角度看,BootLoader的总目标就是正确地调用内核来执行。大多数BootLoader都分为stage1和stage2两大部分。依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的,也就是前面说的启动代码。而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且代码会具有更好的可读性和可移植性。28BootLoader的主要任务与典型结构框架BootLoader的stage1通常包括以下步骤为加载BootLoader的stage2准备RAM空间;拷贝BootLoader的stage2到RAM空间中;设置好堆栈;跳转到stage2的C入口点。BootLoader的stage2通常包括以下步骤初始化本阶段要使用到的硬件设备;调用应用程序或启动内核。29Stage1初始化流程图stage1的功能:RAM初始化,设置各个部件的时钟和片选,将BootLoader拷贝到RAM中,设置堆栈,调用Stage2。注意:在本阶段,特别是在堆栈设置之前,进行函数调用(也有些汇编子程序不需要使用堆栈)或者使用堆栈保存数据将产生不可预知的结果;BootLoader入口设置中断向量表切换到超级模式,并禁止中断ResetHandler:复位入口设置中断模式,关闭所有中断初始化硬件关闭看门狗使能回写Buffer和Cache设置非Cache区域设置端口关闭数据线0-15上拉设置外部中断的触发方式设置时钟设置CPU的运行频率,系统各部件的总线矿宽度以及各部件的时钟将BootLoader拷贝到RAM拷贝代码到RAM跳至C代码程序30Stage2流程stage2的功能:初始化串口,显示菜单,通过控制台获取用户输入,并执行相应的命令操作。31板级支持包的特点硬件相关性:因为嵌入式实时系统的硬件环境具有应用相关性,所以,作为高层软件与硬件之间的接口,BSP必须为操作系统提供操作和控制具体硬件的方法。操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。32板级支持包的功能33板级支持包BSP的功能嵌入式系统初始化片级初始化;板级初始化;系统级初始化。硬件相关的设备驱动程序和BootLoader存在一定的重叠34系统级初始化这是一个以软件初始化为主的过程,主要进行操作系统初始化。BSP将控制转交给操作系统,由操作系统进行余下的初始化操作。包括加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块,比如网络系统、文件系统等;最后,操作系统创建应用程序环境并将控制转交给应用程序的入口。35硬件相关的驱动程序与初始化过程相反,硬件相关的设备驱动程序的初始化和使用通常是一个从高层到底层的过程。尽管BSP中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不直接由BSP使用,而是在系统初始化过程中由BSP把它们与操作系统中通用的设备驱动程序关联起来,并在随后的应用中由通用的设备驱动程序调用,实现对硬件设备的操作。
本文标题:第三章 嵌入式系统的设计方法(第三讲)
链接地址:https://www.777doc.com/doc-3327876 .html