[信息与通信]BootLoader与设备驱动.ppt_第1页
[信息与通信]BootLoader与设备驱动.ppt_第2页
[信息与通信]BootLoader与设备驱动.ppt_第3页
[信息与通信]BootLoader与设备驱动.ppt_第4页
[信息与通信]BootLoader与设备驱动.ppt_第5页
免费预览已结束,剩余59页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统原理与应用,第四章BootLoader与设备驱动,4.1嵌入式系统的产生和发展,嵌入式软件的体系结构包括驱动层、操作系统层、中间件层和应用层,如下图所示。,驱动层软件分为三种类型:,板级初始化程序:在系统上电后,初始化系统的硬件环境。与系统软件相关的驱动程序:用于支持操作系统和中间件等系统软件所需的驱动程序。与应用软件相关的驱动程序:这类驱动不一定需要与操作系统连接。,4.2BootLoader,4.2.1BootLoader概述4.2.2BootLoader的典型结构4.2.3实例分析,4.2.1BootLoader概述,4.2BootLoader,BootLoader是系统加电后首先运行的一段程序代码,其目的是将系统的软硬件环境带到一个合适的状态,为调用操作系统内核准备好正确的环境。,BootLoader是依赖于目标硬件实现的,可以从两个方面来理解:每种嵌入式微处理器体系结构都有不同BootLoader.BootLoader还依赖于具体的嵌入式板级硬件设备配置。,1BootLoader的安装,4.2.1BootLoader概述,BootLoader需要放在系统加电后最先取指令的地址上,很多情况下,BootLoader与操作系统内核、根文件系统甚至应用程序等都可以烧写在同一个固态存储芯片上的。,2BootLoader的操作模式,4.2.1BootLoader概述,大多数BootLoader都包含两种操作模式:启动加载模式和下载模式。,启动加载模式:也称为自主(Autonomous)模式。在这种模式下,BootLoader从目标机的某个固态存储设备上将操作系统加载到RAM中运行,整个过程中没有用户的介入。,下载模式:下载模式是指,目标机上的BootLoader将通过串口或网络连接等通信手段从宿主机上下载文件,如操作系统的内核映像和根文件系统的映像等。,3BootLoader的控制设备和机制,4.2.1BootLoader概述,串口通信:串口通信最容易实现。BootLoader程序在执行时也就可以利用这个简单实现的串口通信进行I/O操作,与外界交换数据和信息。TFTP(网络):在BootLoader中实现TFTP协议,在宿主机上利用TFTP的软件工具,通过以太网连接来下载文件。,4.2.2BootLoader的典型结构,4.2BootLoader,BootLoader的主要任务就是要建立起调用操作系统系统内核、运行用户应用程序所需要的一个良好的软硬件环境。这个任务具体包括两部分的内容:硬件设备初始化建立内存空间的映射图,4.2.2BootLoader的典型结构,BootLoader的启动过程(1),初始化CPU在各种模式下的堆栈空间设定CPU的内存映射初始化各种控制寄存器初始化CPU的外部存储器设定各外围设备的基地址,创建正确的中断向量表为C代码执行创建ZI(零创建)区进入到C代码。在C代码中继续对时钟、RS232端口进行初始化,然后打开系统中断允许位。进入到应用代码中执行,执行期间响应各种不同的中断信号并调用预先设置好的中断服务程序处理这些中断。,4.2.2BootLoader的典型结构,BootLoader的启动过程(2),整个过程的流程图,4.2.2BootLoader的典型结构,1堆栈初始化,堆栈初始化要处理的事情是为处理器的7种处理器模式(p37)分配堆栈空间。下面以FIQ模式下的堆栈设置为例进行说明:,ORRR1,R0,#LOCKOUT|FIQ_MODE;把处理器模式放在R1中;LOCKOUT用来屏蔽中断位MSRCPSR,R1;改变CPU的CPSR寄存器;进入到指定的FIQ模式MSRSPSR,R2;保存前一模式LDRSP,=FIQ_STACK;把FIQ模式下的堆栈起始;值赋给当前的SP;FIQ_STACK是分配给FIQ;模式堆栈空间(比如说1K;字节)的起始地址,4.2.2BootLoader的典型结构,2DRAM初始化,DRAM的初始化是根据系统配置信息决定的。主要的处理内容是ROM和RAM基地址的设定、数据总线宽度的设定、SDRAM刷新时间的设定等,这些设置可以参照S3C4510B芯片的用户手册。,4.2.2BootLoader的典型结构,3设置特殊寄存器,特殊寄存器的设置主要是针对I/O口的。寄存器的设定主要根据硬件的配置情况而定。由于启动代码是烧录到ROM中的,而中断向量必须位于零地址,所以在存储单元没有重新映射之前ROM基址的设定应该为零地址。,4.2.2BootLoader的典型结构,4拷贝镜像文件,拷贝镜像文件的目的主要是为了提高运行速度。将编译生成的映像文件代码从ROM拷贝到RAM中,程序的执行也就在RAM中了。,4.2.2BootLoader的典型结构,4内存初始化,内存初始化的目的是为C代码的运行开辟内存区。分为:只读区,可读/可写区,零初始化区。内存初始化处理的内容是:(1)当只读区截止地址等于可读/可写区基址时,把零初始化区各字节清零;,只读区,可读/可写区,地址,零初始化区,(2)当只读区截止地址不等于可读/可写区基址时,如果可读/可写区基址小于零初始化基址,就从只读区截止地址处开始把数据拷贝到可读可写区基址处,直到到达零初始化基址,然后把零初始化区各字节清零。,只读区,可读/可写区,地址范围中的数据,零初始化区,地址范围中的数据,清零,否则(如果可读/可写区基址大于或等于零初始化基址)也只用把零初始化区各字节清零。,只读区,可读/可写区,零初始化区,清零,4.2.2BootLoader的典型结构,5建立中断向量表,中断向量表用于处理异常情况,当发生异常时,首先要保存当前程序的返回地址和CPSR寄存器的值,然后进入到相应的异常向量地址。,ENTRYBReset_Handler;系统复位,通过这个跳转指令进入堆栈初始化操作BUndefined_Handler;未定义异常向量BSWI_Handler;软中断异常向量BPrefetch_Handler;预取指异常向量BAbort_Handler;中止异常向量NOP;保留BIRQ_Handler;IRQ中断向量BFIQ_Handler;FIQ中断向量(快速响应用户中;断,支持高速数据传输),跳转指令地址依次+4,4.2.2BootLoader的典型结构,6系统重新映射,系统重新映射与前面镜像文件的拷贝有关。当为了提高运行速度把ROM的镜像文件拷贝到RAM后,中断向量表就不在零地址处了,因此要重新映射存储单元,把RAM的地址重新设定为零地址。,为什么要系统重新映射?,整个过程是把启动代码从ROM(EEPROM或者Flash)拷贝到SDRAM运行,同时在拷贝完毕后进行内存的重新映射,把SDRAM映射到原来的ROM地址(0 x00000000)中,这样就可以用SDRAM中的代码写Flash,使得程序代码得以更新。,4.2.2BootLoader的典型结构,7切换到用户模式,进入C代码区,CPU切换到用户模式下,并把堆栈指针SP指定到用户堆栈区,就可以进入到C代码区运行。在C代码中继续对时钟、RS232端口进行初始化,然后打开系统中断允许位,进入到应用代码中执行。,4.2.2BootLoader的典型结构,BootLoader结构,从程序结构上来讲,BootLoader一般都分:Stage1:存放依赖于CPU体系结构的代码,如设备初始化代码等,通常使用汇编语言来实现,达到短小精悍的目的。Stage2:用来实现复杂功能,通常使用C语言来实现,使代码具有更好的可移植性。,4.2.2BootLoader的典型结构,1Stage1,Stage1部分的代码按照执行的先后顺序,通常包括以下步骤:,硬件设备初始化为加载Stage2程序准备RAM空间拷贝Stage2程序到RAM空间设置好堆栈跳转到Stage2的C程序入口点,4.2.2BootLoader的典型结构,2Stage2,Stage2部分的代码通常包括以下步骤:,初始化本阶段用到的硬件设备,如RS232检测系统内存映射将操作系统内核映像和根文件系统映像从Flash读到RAM空间中为操作系统内核设置启动参数调用操作系统内核,4.2.3实例分析,4.2BootLoader,本小节使用基于ARM7TDMI内核的S3C44B0X为例详细介绍BootLoader的设计与实现。与S3C4510B有区别的是:S3C44B0X没有存储器重映射的功能,所有存储区地址固定;另外,S3C44B0X提供了矢量中断的功能,扩展了向量表,4.2.3实例分析,硬件初始化程序(1),说明:硬件初始化程序编译环境:ADS1.2*存储器空间;GCS664M16bit(8MB)DRAM/SDRAM(0 xC000000-0 xC7FFFFF);APPRAM=0 xC0000000 xC7EFFFF;44BMONRAM=0 xC7F0000-0 xC7FFFFF(对于不同的RAM,可以修改此地址);STACKRAM=0 xC7FFA00,4.2.3实例分析,中断控制预定义INTPNDEQU0 x01E00004INTMODEQU0 x01E00008INTMSKEQU0 x01E0000CI_ISPREQU0 x01E00020I_CMSTEQU0 x01E0001CI_ISPCEQU0 x01E00024*看门狗定时器预定义WTCONEQU0 x01D30000*,4.2.3实例分析,初始化程序开始EXPORTInitSystem禁止看门狗LDRR0,=WTCONLDRR1,=0STRR1,R0,4.2.3实例分析,初始化堆栈MRSR0,CPSRBICR0,R0,#MODEMASKORRR1,R0,#UNDEFMODE|NOINTMSRCPSR_CXSF,R1;UndefModeLSRSP,=UndefStackORRR1,R0,#ABORTMODE|NOINTMSRCPSR_CXSF,R1;AbortModeLSRSP,=AbortStack,4.2.3实例分析,ORRR1,R0,#IRQMODE|NOINTMSRCPSR_CXSF,R1;IRQModeLSRSP,=IRQStackORRR1,R0,#FIQMODE|NOINTMSRCPSR_CXSF,R1;FIQModeLSRSP,=FIQStack,4.2.3实例分析,ORRR1,R0,#SVCMODE|NOINTMSRCPSR_CXSF,R1;SVCModeLSRSP,=SVCStack;USERmodeisnotinitialized.,4.3.1设备驱动概述,4.3设备驱动,使用任何外部设备都需要有相应驱动程序的支持。驱动程序为上层软件提供设备的操作接口。,驱动层软件有两个重要的概念:硬件抽象层(HAL,HardwareAbstractionLayer)和板级支持包(BSP,BoardSupportPackage)。,硬件抽象层,4.3.1设备驱动概述,硬件抽象层的目的是为了将硬件抽象化,即通过程序来控制诸如CPU、I/O、存储器等硬件的操作,从而使得系统的设备驱动程序与硬件无关。,板级支持包(1),4.3.1设备驱动概述,设计板级支持包的目的主要是为驱动程序提供访问硬件设备寄存器的函数包,从而实现对操作系统的支持。在功能上,板级支持包大体需要实现以下两方面的内容:,在系统启动时,完成对硬件的初始化。为驱动程序提供访问硬件的手段。,通用异步收发器(UniversalAsynchronousReceiverandTransmitter,UART)是用于控制计算机与串行设备的接口。,UART的介绍,应用示例,UART发送单元,UART0、UART1各含有1个16字节的发送FIFO缓冲区。UnTHR是UARTn发送FIFO的最高字节。UART的发送FIFO是一直使能的。,UART发送FIFO缓冲区,UART接收模块,UART0、UART1各含有1个16字节的接收FIFO缓冲区。软件设置接收FIFO缓冲区的触发字节。,UART接收FIFO缓冲区,UART0、UART1各含有1个16字节的接收FIFO缓冲区。软件设置接收FIFO缓冲区的触发字节。,UART接收FIFO缓冲区,UART0、UART1各含有1个16字节的接收FIFO缓冲区。软件设置接收FIFO缓冲区的触发字节。,UART接收FIFO缓冲区,UART0、UART1各含有1个16字节的接收FIFO缓冲区。软件设置接收FIFO缓冲区的触发字节。,UART接收FIFO缓冲区,UART0、UART1各含有1个16字节的接收FIFO缓冲区。软件设置接收FIFO缓冲区的触发字节。,UART接收FIFO缓冲区,4.11UART(0、1),UART设置,使用UART前需要设置的寄存器,4.11UART(0、1),UART设置,使用UART前需要设置的寄存器UnLCR,4.11UART(0、1),UART设置,使用UART前需要设置的寄存器UnLCR,4.11UART(0、1),UART设置,使用UART前需要设置的寄存器UnLCR,4.11UART(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论