嵌入式系统设计arm的软件分析_第1页
嵌入式系统设计arm的软件分析_第2页
嵌入式系统设计arm的软件分析_第3页
嵌入式系统设计arm的软件分析_第4页
嵌入式系统设计arm的软件分析_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式系统设计

ARM的软件分析

浙江大学郑音飞

议程

ARM嵌入式操作系统

嵌入式linux在ARM中的应用 ARM嵌入式系统的交叉编译和调试技术 ARM嵌入式系统的指令及编程基于ARM的嵌入式linux操作系统的移植一、ARM嵌入式操作系统基础知识操作系统内核用户界面基础知识操作系统功能

程序运行一个程序的运行离不开操作系统的配合,其中包括指令和数据载入内存,I/O设备和文件系统的初始化等等。

I/O设备访问每种I/O设备的管理和使用都有自己的特点。而操作系统接管了这些工作,从而使得用户在使用这些I/O设备的过程中会感觉更方便。

文件访问文件访问不仅需要熟悉相关I/O设备(磁盘驱动器等)的特点,而且还要熟悉相关的文件格式。另外,对于多用户操作系统或者网络操作系统,从计算机安全角度考虑,需要对文件的访问权限做出相应的规定和处理。这些都是操作系统所要完成的工作。

系统访问对于一个多用户或者网络操作系统而言,操作系统需要对用户系统访问权限做出相应的规定和处理。

错误检测和反馈当操作系统运行时,会出现这样那样的问题。操作系统应当提供相应的机制来检测这些信息,并且能对某些问题给出合理的处理或者报告用户。

系统使用纪录在一些现代操作系统中,出于系统性能优化或者系统安全角度考虑,操作系统会对用户使用过程纪录相关信息。

程序开发一般操作系统都会提供丰富的API供程序员开发应用程序,并且很多程序编辑工具,集成开发环境等等也都是通过操作系统提供的。操作系统内核操作系统内核的功能:(1)、内存管理(2)、进程与中断管理(3)、调度机制(4)、I/O设备(5)、文件管理内存管理功能一般而言,内存管理需要完成以下功能:二次定址、保护、共享、逻辑组织和物理组织。内存分割有

固定分割、动态分割、分页和分段等四种内存分割机制。虚拟内存虚拟内存机制基于分页技术或者分页与分段两种技术的结合,它是现代操作系统的一个显著特征。虚拟内存技术的实现需要有硬件支持,并得到操作系统配合共同完成,从而能够提供给每个进程一个几乎不受限制的虚拟内存空间。虚拟内存机制的实现不仅需要操作系统方面的软件支持,而且需要有相应的硬件(MMU)支持,比如地址转换功能支持等。内存管理进程与中断管理

对每一个现代操作系统而言,其基本任务之一就是进程管理。操作系统需要为进程分配资源;实现进程间共享和交换信息;保护进程资源;以及实现进程间同步,为此,操作系统需要为每一个进程维护一个特定的数据结构用于描述该进程的状态和资源占用情况,从而实现对进程的管理和控制。中断是现代计算机系统普遍采用和支持的技术。因为中断响应的本质是占用一段处理器时间,必然与进程有密切的联系。几乎所有的计算机系统都提供了中断机制以便让系统中的其它模块能够中断正在执行中的进程从而完成一些紧急任务,这就是中断。最常见的中断类型主要有四类,即软件中断、定时中断、I/O中断和硬件故障。

中断会引发一系列的事件发生。中断的一般处理流程如下:第一步,某个中断源(如软件、I/O、定时器甚至是硬件故障)向处理器发出中断信号;第二步,处理器在响应中断之前完成当前指令;第三步,处理器检测是否存在中断,并发给中断源一个确认信号,这个确认信号可以让中断源撤出其中断信号;第四步,处理器将处理器时间交给中断处理例程之前需要做一些准备工作,这其中主要包括保存在中断点时当前程序的状态。最低限度的保存信息应该包括程序状态字信息和当前程序下一条指令的地址;第五步,处理器执行中断处理例程;第六步,中断例程执行完毕后,处理器保存与中断例程相关的必要信息,处理器恢复被中断程序在中断点时的状态;第七步,处理器继续原来的指令执行过程。调度机制

在计算机系统中,最宝贵并且最容易引起各进程竞争的资源就是处理器。如何公平合理地分配给各进程足够的处理器时间,并且尽可能提高处理器的利用率同样是操作系统原理研究的重要内容。而这个任务是由操作系统的调度机制完成的。调度类型分为:单处理器调度,多处理器调度和实时调度都会遇见的三种类型,即长期调度、中期调度和短期调度。I/O设备

I/O设备作为计算机系统与外界的交互和通讯媒介,其管理和控制也不容忽视。而且,由于I/O设备千差万别,这就给操作系统的I/O设备管理和控制造成了不少的难度和麻烦。

I/O设备尽管很多,但是我们可以根据其信息传递的发送者和接收者的不同来将其分为三类,即人机交互型、计算机系统内交互型、通讯类型。其中人机交互型I/O是指用于人机交互的I/O设备,如,显示器、键盘、鼠标或者打印机;而对计算机系统内交互型I/O而言,所传递信息只是计算机内部可识别的,如,磁盘驱动器、传感器、控制器等;而通讯类型I/O则用于计算机系统与外部设备的交互,这样的I/O设备包括调制解调器、网卡等等。文件管理

文件管理的核心部分是文件系统。它对操作系统的性能影响颇大。现在人们已经提出了很多不同类型的文件系统,形成了操作系统研究与实践的一道亮丽的风景线。几个常用的概念:文件是一些相似纪录的集合。文件都有一个唯一标示的文件名,应用程序或用户可以通过它来对文件定位。文件系统向用户或程序提供一个使用文件的统一界面,从而能够使得对文件的各类操作能够在更加抽象更加简便的层次上进行。文件组织是指其中纪录的逻辑结构。文件组织类型有堆文件、顺序文件、索引顺序文件、快速文件等五种组织类型。

随着计算机技术的发展,计算机的应用开始面向普通大众。字符型用户界面产生了。Linux的控制台、DOS的命令提示符状态等等都是字符型用户界面的典型代表。在字符型用户界面,界面的基本显示单元是ASCII编码的字符。当然,通过精细编程,字符型用户界面也可以达到很好的交互。但是,由于基本显示单元是字符,并不能得到灵活自然的效果。图形用户界面的引入,使得计算机的交互能力得到显著增强。在苹果公司第一次引入图形用户界面的时候,人们因为它会消耗更多的计算机资源而为它的前途担忧。但是在微软公司的极力倡导下,图形用户界面技术得到了广泛的应用和完善,各类图形用户界面层出不穷。而微软公司也因为其采用了图形用户界面的Windows95系统而开始登上操作系统领域的霸主地位。用户界面

图形用户界面图形用户界面(GUI)是迄今为止计算机系统中最为成熟的人机交互技术。GUI分为以下几个模块:底层I/O设备驱动(显示设备驱动、鼠标驱动、键盘驱动等)、基本图形引擎(画点、画线、区域填充)、消息驱动机制、高层图形引擎(画窗口、画按钮)以及GUI应用程序接口(API)。智能化用户界面智能化用户界面是将人工智能技术融入到用户界面中去的产物。现在比较成熟的智能化用户界面技术有语音输入、手写识别。而正在蓬勃兴起的是利用Agent技术对用户界面的改造和提升上。议程

ARM嵌入式操作系统

嵌入式linux在ARM中的应用 ARM嵌入式系统的交叉编译和调试技术 ARM嵌入式系统的指令及编程基于ARM的嵌入式linux操作系统的移植嵌入式linux在ARM中的应用嵌入式linux内核嵌入式设备的文件系统嵌入式用户界面驱动程序举例嵌入式linux内核

嵌入式Linux主要可以分为两类:第一类是在利用Linux强大功能的前提下,使它尽可能的小,以满足许多嵌入式系统对体积的要求,如uClinux;第二类是将Linux开发成实时系统尤其是硬(firm)实时系统,应用于一些关键的控制场合,如RTLinux、HardHatLinux等。

uCLinux的设计思想就是通过对标准Linux内核的裁减,去除虚拟内存管理部分代码,并且对内存分配进行优化,从而达到提高系统运行效率的目的。它经过各方面的小型化改造,形成了一个高度优化的、代码紧凑的嵌入式Linux,虽然它的体积很小,但是仍然保留了Linux的大多数的优点:稳定、良好的移植性、优秀的网络功能、完备的对各种文件系统的支持、以及标准丰富的API。(1)通用LinuxAPI(2)内核体积<512KB(3)内核+文件系统<900KB(4)完整的TCP/IP协议栈(5)支持大量其它的网络协议(6)支持各种文件系统,包括NFS、ext2、ROMfsandJFFS、MS-OS和FAT16/32嵌入式设备的文件系统

嵌入式操作系统需要一种以结构化格式存储和检索信息的方法;这就需要文件系统的参与。嵌入式存储设备通常主要是RAM和作为永久存储媒质的Flash。用户可以根据可靠性、健壮性和增强功能等需求来选择这些设备的文件系统的类型.第二版扩展文件系统Ext2fs(Extended2Filesystem)

Ext2FS的优点在于:Ext2FS支持达4TB的文件容量。Ext2FS文件名称最长可达1012个字符。当创建文件系统时,管理员可以选择逻辑块的大小(通常大小可选择1024、2048和4096字节)。Ext2FS实现快速符号链接:不需要为此目的而分配数据块,并且将目标名称直接存储在索引节点(inode)表中。这使得文件系统的性能有所提高,特别是在访问速度上。临时文件系统tmpfs(TemporaryFilesystem)

MPFS有以下优点:动态的文件系统大小:文件系统的体积可以根据复制、创建或删除的文件或目录数量来缩小或放大。这使得内存的使用非常合理。快速:因为TMPFS是驻留在RAM中的,所以读写几乎都是瞬时完成。即使以交换的形式存储文件时,由于I/O操作的快速,仍能保证足够快的速度。TMPFS的一个缺点是当系统重新引导时会丢失所有数据。因此,重要的数据、需要永久保存的数据是不能存储在TMPFS文件系统上的日志FALSH文件系统(JFFS)

JFFS2在扇区级别上执行FLASH的擦除、写、读操作,在适应FLASH芯片特性上要比Ext2FS文件系统更好。JFFS2提供了比Ext2FS更好的掉电崩溃保护。Ext2FS文件系统在修改少量数据时,是将整个扇区复制到内存中,在内存中组合成新数据,在写回整个扇区。显然,当FLASH芯片的扇区较大时,这样做的效率是非常低的。由于在数据读入内存后就擦除了FLASH的相应扇区,如果不幸在内存中组合数据时发生了电源故障或其它事故,那么将丢失整个数据集合。但是,JFFS2文件系统是附加文件而不是重写整个扇区,避免了这一点。并且JFSS2具有掉电崩溃保护功能。JFFS2是专门为FLASH芯片这样的嵌入式文件设备设计的,所以它的设计已经提供了良好的FLASH芯片管理功能。嵌入式用户界面

从用户的观点来看,图形用户界面(GUI)是系统的一个最至关重要的方面:用户通过GUI与系统进行交互,所以GUI应该易于使用并且非常可靠。此外,它不能占用太多的内存,以便在内存受限的微型嵌入式设备上无缝执行。所以,它应该是轻量级的,并且能够快速装入。

Microwindows

Microwindows是CenturySoftware的开放源代码项目,设计用于带小型显示单元的微型设备。Microwindows体系结构是基于客户机/服务器(Client/Server)的。它具有分层设计:最底层是屏幕和输入设备驱动程序(关于键盘或鼠标)来与实际硬件交互。在中间层,可移植的图形引擎提供对线的绘制、区域的填充、多边形、裁剪以及颜色模型的支持。在最上层,Microwindows支持两种API:win32/WinCEAPI实现,称为Microwindows;另一种API与GDK非常相似,它称为Nano-X。Nano-X用在Linux上。它是象X的API,用于占用资源少的应用程序。Qt/EmbeddedQt/Embedded是Trolltech新开发的用于嵌入式Linux的图形用户界面系统。Trolltech最初创建Qt作为跨平台的开发工具用于Linux台式机。它支持各种有UNIX特点的系统以及MicrosoftWindows。作为最流行的Linux桌面环境之一的KDE就是用Qt编写的。它的优点包括:(1)面向对象的体系结构有助于更快地执行(2)占用很少的资源,大约800K(3)抗锯齿文本和混合视频的象素映射它的缺点是:Qt/Embedded和Qpe只能在获得商业许可证的情况下才能使用。驱动程序举例

简单起见,我们以一个按键的实现为例来讲述驱动的编写。平台上的一个按键和外部中断IRQ6相连,当按键按下时,引脚输入低电平触发中断。下面我们来看驱动程序的设计。设备初始化驱动程序在init_keyboard()中实现向系统注册主次设备号,设备名,并初始化寄存器,如下:voidinit_dev_set(void){ICR=0x00;//低电平触发中断PDDIR=0x80;//设置PD7为输入PDSEL=0x80;//PD7作为I/O与外部连接PDKBEN=0x00;//键盘中断使能}intinit_keyboard(void){#definekeyboard_major50//手动分配主设备号为50#definekeyboard_minor0//次设备号为0intrc;rc=register_chrdev(keyboard_major,"keyboard",&keyboard_fops);elseinit_dev_set();returnrc;};注册中断和中断处理程序

在open函数中向内核注册中断,如下:staticintkeyboard_open(structinode*inode,structfile*file)rc=request_irq(IRQ_MACHSPEC|IRQ6_IRQ_NUM,keyboard_interrupt,IRQ_FLG_STD,“keyboard-IRQ”,NULL/*Userdata!!!*/);//向内核注册中断if(rc)//返回值不为零,则注册失败

{printk("keyboard-Driver:Errorwhileinstallinginterrupthandler\n");return-ENODEV;};MOD_INC_USE_COUNT;return0;staticvoidkeyboard_interrupt(intirq,void*dev_id,structpt_regs*regs){//中断处理程序ISR|=(1<<18);wake_up_interruptible(&wq);/*唤醒队列*/}read的实现

staticintkeyboard_read(structinode*inode,structfile*file,char*buffer,intsize)

{char*ch;#ifdefDEBUGprintk("I'mreadingthedevice!\n");/*调用读函数时的调试信息*/#endifinterruptible_sleep_on(&wq);#ifdefDEBUGprintk(“I'mwakeup!\n");#endifreturn0;}议程

ARM嵌入式操作系统

嵌入式linux在ARM中的应用

ARM嵌入式系统的交叉编译和调试技术 ARM嵌入式系统的指令及编程基于ARM的嵌入式linux操作系统的移植ARM嵌入式系统的交叉编译和调试技术基本知识交叉编译技术调试技术基本知识

我们在编写计算机程序时所用的编程语言多为高级语言,如C/C++、Java等,而计算机只能执行机器代码,因此需要一种工具来完成从源程序到机器代码的转换,这种转换工具就是编译器。编译器是将一种语言翻译成另一种语言的计算机程序,它将源程序作为输入,产生用目标语言编写的等价(有时经过优化)程序。目标语言可以是机器代码,也可以是另一种语言,比如汇编等。编译的一般过程:(1)词法分析:输入源程序,通过对源程序字符串的扫描和分解,将其转化成一个一个的单词符号,这些单词符号构成一个单词序列。单词符号是语言的基本组成部分。(2)语法分析:把词法分析的单词符号串分解成一个一个的句型或者句子,确定输入的单词符号串是否符合给定的语法。(3)语义分析:给出各个句型和句子的含义。(4)中间代码生成:把不同的句型和句子按照高级语言的语义翻译成中间代码。(5)中间代码优化:遵循程序等价变换的原则,把中间代码加工变换成节省运行时间和存储空间的目标中间代码。(6)目标代码生成:实现最后的转换,把中间代码转换成特定的机器语言。交叉编译技术交叉编译随着硬件平台和操作系统的多样化,软件向不同平台移植的工作变得越来越繁复。交叉编译技术的引入为软件的不同平台移植创造了便利条件。在交叉编译技术中有两种比较典型的实现,一个我们称之为Java模式,即Java的字节码编译技术;另外一个我们称之为GNUGCC模式,即通常所讲的CrossGCC技术。调试技术

有很多方法可以用来监控运行着的用户空间程序:可以为其运行调试器并单步调试该程序,添加打印语句,或者添加工具来分析程序。下面将介绍几种可以用来调试Linux上运行的程序的方法。顺带介绍四种调试问题的情况,这些问题包括段错误,内存溢出和泄漏,还有挂起。内存调试内存泄漏(即malloc()内存在对应的free()调用执行后永不被释放)和缓冲区溢出(例如对以前分配到某数组的内存进行写操作)是一些常见的问题。介绍2种调试内存的工具:(1)、MEMWATCHMEMWATCH由JohanLindh编写,是一个开放源代码C语言内存错误检测工具,您可以自己下载它。只要在代码中添加一个头文件并在gcc语句中定义了MEMWATCH之后,您就可以跟踪程序中的内存泄漏和错误了。MEMWATCH支持ANSIC,它提供结果日志纪录,能检测双重释放(double-free)、错误释放(erroneousfree)、没有释放的内存(unf

温馨提示

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

评论

0/150

提交评论