




已阅读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 xC000000 0 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 0 1 UART设置 使用UART前需要设置的寄存器 UnLCR 4 11UART 0 1 UART设置 使用UART前需要设置的寄存器 UnLCR UART 特殊寄存器 位置相同的寄存器 UART应用示例 操作流程 UART应用示例 初始化代码 UART0初始化代码 defineUART BPS115200VoidUART0 Ini void uint16Fdiv PINSEL0 0 x00000005 U0LCR 0 x83 Fdiv Fpclk 16 UART BPS U0DLM Fdiv 256 U0LLM Fdiv 256 U0LCR 0 x03 UART应用示例 初始化代码
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 磁场强度演化规律-洞察及研究
- 氯噻酮治疗心力衰竭的多学科协作临床试验-洞察及研究
- 生成对抗网络-第1篇-洞察及研究
- 家电维修质检方案
- 挖掘地产需求的市场调研报告
- 排气扇维修技巧总结
- 北京城建重工桥梁钢结构项目:机遇、策略与商业蓝图
- 剖析我国场内货币基金套利方式:策略、案例与风险管控
- 创新视野下中小企业融资困境与突破之道
- 500kV变压器中性点加装小电抗:影响、原理与试验研究
- 中药药剂员职业考核试卷及答案
- 2025年脚手架租赁合同3篇
- 医院检验科实验室生物安全程序文件SOP
- 焊材入库、发放与回收记录模板
- 生药学-绪论-第一章
- 一建市政记忆口诀
- Q∕GDW 12175-2021 单相智能物联电能表技术规范
- PETS公共英语二级大纲词汇
- 消控室制度上墙
- 蜗轮参数化设计(creo2.0)
- 高应变检测报告(共9页)
评论
0/150
提交评论