




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章基于ARM的嵌入式系统软件设计技术,嵌入式系统软件结构基于嵌入式操作系统的软件开发技术常见的嵌入式操作系统引导程序的开发:bootloader驱动程序的开发应用程序的开发,1/52,简单的嵌入式应用若嵌入式系统的功能需求比较简单,嵌入式系统软件只需完成较简单的监控、驱动和处理功能,则不需要嵌入式操作系统的支持。如基于8051的应用:玩具、家电、汽车等的控制系统复杂的嵌入式应用若嵌入式系统的功能需求比较复杂,需要图形用户界面、网络管理、存储管理、进程/线程管理或需要支持二次开发等,则通过嵌入式操作系统的帮助,可以加快嵌入式系统软件的开发进度和可靠性。如基于ARM的应用:手机、PDA,复杂嵌入式系统软件的一般结构,ARM+M+I/O,硬件抽象层、底层封装、部分由OS提供,BOOTLOADER,上电复位,复杂嵌入式系统软件工作流程,完成基本硬件模块的初始化(如CPU寄存器初始化、RAM初始化、中断控制寄存器初始化等),这由汇编代码完成。,将OS内核和用户文件映射(装入)至运行空间,从NANDFlash或NORFlash装载至RAM,或直接在NORFlash上运行,一般用C代码完成,为OS内核设置启动参数,初始化必要的数据空间等,之后调用内核(即跳转至内核的入口点),系统完成启动过程,一般用C代码完成。,板级初始化,引导系统,系统初始化,应用初始化,应用程序中多任务及其资源(如信号量、队列)的创建,以及与应用相关的一些初始化工作。,多任务运行,OS执行用户应用程序(即跳转至应用程序的入口点),一般为一个无限循环过程。这样,用户程序在OS的管理和调度下运行。,嵌入式实时操作系统RTlinuxuC/OSIIVxworks(windriversystems公司)嵌入式非实时操作系统嵌入Linux系统WindowsCE、Embeddedwindowsxp(Microsoft公司)Android(基于Linux内核,谷歌公司推出),嵌入式操作系统,LINUX嵌入式操作系统,Linux是一个免费的、源代码开放的操作系统;,1991年11月,芬兰赫尔辛基大学的学生LinusTorvalds写了个小程序,取名为Linux,放在互联网上。他表达了一个愿望,希望借此搞出一个操作系统的“内核”来,这完全是一个偶然事件;1993,在一批高水平黑客的参与下,诞生了Linux1.0版;1994年,Linux的第一个商业发行版Slackware问世;1996年,Linux版本1.2.1获得美国国家标准技术局的计算机系统实验室确认;2001年,Linux2.4版内核发布;2003年,Linux2.6版内核发布;2010年,Linux2.6.36版内核发布;,几种流行的LinuxOS发行版本,引导程序BootLoader,是嵌入式系统在加电启动后执行的第一段代码,功能类似pc机的BIOS,通常需要固化在目标板中(启动后,BootLoader必须映射到地址0 x00000000处,这里存放的实际为一条跳转指令,课本P232);主要负责CPU、存储器及相关硬件的初始化,以及将装载操作系统映像到内存中,然后跳转到规定的地址启动操作系统运行。Bootloader是严重依赖硬件而实现的,每一种不同体系结构的处理器都有不同的Bootloader,甚至同一种处理器的外围硬件配置不同,其Bootloader也有差别。因此开发特定的Bootloader是构建嵌入式linux系统之前的一项必要的基础工作。,Bootloader的开发,Stage1(汇编实现)基本硬件设备初始化:CPU时钟频率,寄存器,存储器数据宽度、访问周期、刷新周期,中断系统,I/O端口等;为第二阶段准备RAM空间,设置堆栈;复制第二阶段代码到RAM中,并跳转到第二阶段入口点Stage2(C实现)初始化本阶段要使用到的硬件设备,实现对板级驱动的支持;检测系统内存映射;将内核映像和根文件系统从flash读到RAM中;为内核设置启动参数;将PC指针指向内核的入口处,调用内核。,Linux环境下BootLoader种类,u-boot,uboot全称UniversalBootLoader,支持ARM体系等多种处理器,包含常见的外设的驱动,是一个开源的、功能强大的板极支持包;由德国DENX软件工程中心创建并维护。u-boot主要包括以下目录:include:U-Boot头文件,其configs子目录下是与目标板相关的配置头文件;board:目标板相关文件,包含SDRAM、Flash驱动等;cpu:与处理器相关文件,如网口、中断初始化等;lib_xxx:处理器体系相关的文件,如lib_ppc,lib_arm目录分别包含与PowerPC、ARM体系结构相关的文件;driver:通用设备驱动,如CFIFLASH驱动;net:与网络功能相关的文件目录,如bootp,nfs,tftp;post:上电自检文件目录。doc:U-Boot的说明文档;examples:可在U-Boot下运行的示例程序;tools用于创建U-BootS-RECORD和BIN镜像文件的工具,S3C2440启动方式(采用BootLoader启动),韩国三星公司的S3C2440支持NorFlash和NandFlash启动,可以通过硬件跳线(引脚OM1:0)设置启动方式。具体含义如下:OM1:0=00时,处理器从NANDFlash启动OM1:0=01时,处理器从16位宽度的NorFlash启动OM1:0=10时,处理器从32位宽度的NorFlash启动OM1:0=11时,处理器从TestMode启动,S3C2440NandFlash启动过程:,在系统上电后,NandFlash控制器会自动的把NandFlash上的前4KU-BOOT数据(stage1)搬移到内部SRAM的地址最低端(此SRAM被称为Steppingstone);,CPU从内部RAM的0 x00000000位置开始启动并在uboot前4K启动代码里完成S3C2440的核心配置,然后把U-BOOT剩余部分(stage2)搬到RAM中运行;,基于嵌入式LINUX的设备驱动程序,驱动程序是操作系统内核与硬件设备之间的接口,驱动程序屏蔽了硬件的细节,完成以下功能:对设备初始化和释放;对设备进行管理;读取应用程序传送给设备文件的数据或者回送应用程序请求的数据;检测和处理设备出现的错误。Linux系统将设备分为三种基本的设备类型,每一种类型的设备对应着不同形式的驱动,这三种设备分别为字符设备,块设备和网络设备,。Linux的内核就是由各种驱动组成的,内核源码中大约有85%是各种驱动程序的代码,可在同类驱动的基础上进行修改以符合具体的单板。,LINUX的设备驱动程序开发流程,编写一个Linux设备驱动程序流程大致如下:查看原理图、数据手册,了解设备操作方法;在Linux内核中找到相近的驱动程序,以它为模板进行开发,有时候需要从零开始;实现驱动程序的初始化:如向内核注册驱动程序,这样应用程序传入文件名时,内核才能找到相应驱动程序;设计所要实现的操作,如open(),close(),read(),wirte()等函数;实现中断服务(如果有中断操作);编译或用命令加载该驱动程序到内核;驱动程序的测试。,本章要求,理解嵌入式软件系统的结构及功能;理解系统引导加载(bootloader)技术;了解嵌入式操作系统(Linux)的任务、性能指标及移植技术;了解嵌入式操作系统下的驱动开发流程;,本章内容对应实验4,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论