嵌入式系统原理复习题.doc
嵌入式系统原理复习题1、 嵌入式系统的概念广义上讲,凡是带有微处理器的专用软硬件系统都可称为嵌入式系统。如各类单片机和DSP系统。从狭义上讲,我们更加强调那些使用嵌入式微处理器构成独立系统,具有自己操作系统,具有特定功能,用于特定场合的嵌入式系统。根据IEEE(国际电气和电子工程师协会)的定义:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。2、 嵌入式系统的特点系统内核小 专用性强 运行环境差异大 可靠性要求高 系统精简和高实时性操作系统 具有固化在非易失性存储器中的代码 无自举开发能力3、 嵌入式系统的硬件平台由哪些部分组成嵌入式系统的微硬件包括嵌入式核心芯片、存储器系统及外部接口嵌入式核心芯片指EMPU、EMCU、EDSP、ESoC、EPSoC嵌入式系统的存储器系统包括程序存储器(ROM、EPROM、Flash)、数据存储器、随机存储器、参数存储器等4、 嵌入式系统的分类按嵌入式微处理器的位数分类:4位8位16位32位64位按软件实时性需求分类:非实时系统 软实时系统 硬实时系统按嵌入系统的复杂程度分类:小型嵌入式系统 中型嵌入式系统 复杂嵌入式系统6、 ARM9处理器的工作状态有哪些ARM处理器核可以工作在以下2种状态1) ARM状态32位,ARM状态下执行字对准的32位ARM指令;2)Thumb状态16位,Thumb状态下执行半字对准的16位Thumb指令。在Thumb状态下,程序计数器PC使用位1选择另一个半字。 7、 ARM9处理器的内部寄存器结构ARM处理器总共有37个寄存器,可以分为以下两类寄存器 :1)31个通用寄存器 :R0R15; R13_svc、R14_svc; R13_abt、R14_abt; R13_und、R14_und; R13_irq、R14_irq; R8_frq R14_frq。 2)6个状态寄存器 CPSR、SPSR_svc、SPSR_abt、SPSR_und、SPSR_irq和SPSR_fiq 。8、 ARM9处理器的工作模式有哪些7种工作模式:用户模式(usr)、快速中断模式(fiq)、外部中断模式(irq)、管理模式(svc)、中止模式(abt)、未定义模式(und)、系统模式(sys)。特权模式:除usr之外的其它的六种工作模式都是特权模式。异常模式:除usr和sys之外的其它的五种工作模式都是异常模式。9、 CPRS寄存器各数据位的作用CPSR包含条件码标志、中断禁止位、当前处理器模式以及其它状态和控制信息。所有处理器模式下都可以访问当前的程序状态寄存器CPSR。a)高四位用做条件码标志位b)中间有几位用做保留位c)后八位是控制位,其中第一位是工作状态为,第二位是FIQ中断禁止位,第三位是IRQ中断禁止位,最后五位是用户状态模式位 10、如何实现ARM状态和Thumb状态的切换进入 Thumb 状态:当操作数寄存器的状态位(位 0)为 1 时,可以采用执行 BX 指令 的方法,使微处理器从 ARM 状态切换到 Thumb 状态。此外,当处理器处于 Thumb 状态时 发生异常(如 IRQ、FIQ、Undef、Abort、SWI 等),则异常处理返回时,自动切换到 Thumb 状态。 进入 ARM 状态:当操作数寄存器的状态位为 0 时,执行 BX 指令时可以使微处理器从 Thumb 状态切换到 ARM 状态。此外,在处理器进行异常处理时,把 PC 指针放入异常模式 链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到 ARM 状态。11、 ARM为何集成了32位的ARM指令集和16位的Thumb指令集Thumb指令集不是完整的指令集,它是ARM指令集的子集。但是Thumb指令具有更高的代码密度,即占用存储空间小,仅为ARM代码规格的65%,但其性能却下降的很少。所以,Thumb指令集使ARM处理器能应用到有限的存储带宽,并且,代码密度要求很高的嵌入式系统中去。12、 ARM指令寻址方式与ARM指令集中各类常用指令的用法立即寻址 寄存器寻址 寄存器间接寻址 基址加偏址寻址 堆栈寻址 块拷贝寻址 相对寻址 数据处理指令 Load/Store指令 程序状态寄存器与通用寄存器之间的传送指令 转移指令 异常中断指令 协处理器指令1、ARM的数据处理指令主要完成寄存器中数据的算术和逻辑运算操作。数据处理指令根据指令实现处理功能可分为以下六类: 数据传送指令;算术运算指令;逻辑运算指令;比较指令;测试指令;乘法指令。2、ARM的数据存取指令Load/Store是唯一用于寄存器和存储器之间进行数据传送的指令。ARM指令集中有三种基本的数据存取指令: 单寄存器的存取指令(LDR,STR) 多寄存器存取指令(LDM,STM) 单寄存器交换指令(SWP) 3、ARM指令中有两条指令,用于在状态寄存器和通用寄存器之间传送数据。修改状态寄存器一般是通过“读取修改写回”三个步骤的操作来实现的。 这两条指令分别是:状态寄存器到通用寄存器的传送指令(MRS)通用寄存器到状态寄存器的传送指令(MSR) 4、ARM的转移指令可以从当前指令向前或向后的32MB的地址空间跳转,根据完成的功能它可以分为以下4种 : B 转移指令 BL 带链接的转移指令 BX 带状态切换的转移指令 BLX 带链接和状态切换的转移指令 5、异常中断指令可以分为一下两种:软件中断指令(SWI) 断点指令(BKPT仅用于v5T体系)软件中断指令SWI用于产生SWI异常中断,用来实现在用户模式下对操作系统中特权模式的程序的调用;断点中断指令BKPT主要用于产生软件断点,供调试程序用。 6、ARM支持16个协处理器,用于各种协处理器操作,最常使用的协处理器是用于控制片上功能的系统协处理器,例如控制ARM720上的高速缓存和存储器管理单元等,也开发了浮点ARM协处理器,还可以开发专用的协处理器。ARM协处理器指令根据其用途主要分为以下三类:数据操作指令;数据传送指令;寄存器和内存单元之间的传送数据13、 什么是交叉编译,为什么要进行交叉编译在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。 简单地说,就是在一个平台上生成另一个平台上的可执行代码。有时是因为目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。14、 简述构建交叉编译链的主要步骤· 安装交叉编译内核头文件/安装交叉编译的binutils (不分先后)· 安装target machine c库头文件。· 通过内核、C头文件和binutils安装gcc的c交叉编译器(bootstrap gcc)· 编译交叉编译的c库· 通过c库,头文件,编译出gcc的c+编译器。· 安装gdb15、 简述嵌入式系统的开发流程第一步:系统需求分析第二步:体系结构设计第三步:软,硬件协同设计第四步:系统集成第五步:系统测试第六步:形成产品16、嵌入式系统与通用计算机的区别简单的说,嵌入式操作系统就是支持嵌入式系统工作的操作系统。在本质上与通用的操作系统没有太大的区别,一般用于比较复杂的嵌入式系统中,例如手机、PDA等电子类消费产品机顶盒、路由器等通用计算机具有一般计算机的基本标准形态,通过装配不同的应用软件,以基本雷同的的面目应用在社会的各种领域,其典型产品为PC机;而嵌入式计算机,则是非通用计算机形态的计算机应用,它以潜入系统核心部件的形式隐藏在各种装置、设备、产品和系统中。因此,嵌入式计算机是一种计算机的存在形式,是从计算机技术的发展中分离出来的。17、 常见的嵌入式操作系统有哪些,各自有什么特点VxWorks Windows CE Palm OS 嵌入式Linux uc OS Palm OS 特点操作系统的节能功能。在Palm OS的应用程序中,如果没有事件运行,则系统设备进入半休眠(doze)的状态;如果应用程序停止活动一段时间,则系统自动进入休眠(sleep)状态。合理的内存管理。Palm的存储器全部是可读写的快速RAM,动态RAM(Dynamic RAM)类似于PC机上的RAM,它为全局变量和其它不需永久保存的数据提供临时的存储空间;存储RAM(Storage RAM)类似于PC机上的硬盘,可以永久保存应用程序和数据。Palm OS的数据是以数据库(database)的格式来存储的。嵌入式Linux特点(以中科红旗嵌入式Linux为例)开放源码,丰富的软件资源,广泛的软件开发者的支持,价格低廉,结构灵活,适用面广。精简的内核,性能高、稳定,多任务。适用于不同的CPU,支持多种体系结构,如X86、ARM、MIPS、ALPHA、SPARC等。能够提供完善的嵌入式GUI以及嵌入式X-Windows。提供嵌入式浏览器、邮件程序、MP3播放器、MPEG播放器、记事本等应用程序。提供完整的开发工具和SDK,同时提供PC上的开发版本。用户可定制,可提供图形化的定制和配置工具。常用嵌入式芯片的驱动集,支持大量的周边硬件设备,驱动丰富。针对嵌入式的存储方案,提供实时版本和完善的嵌入式解决方案。完善的中文支持,强大的技术支持,完整的文档。Palm OS与Windows CE的比较从技术层面上讲,Palm OS是一套专门为掌上电脑开发的操作系统;Windows CE相对则过于臃肿。Palm OS是一套具有极强开放性的系统。开发者向用户免费提供Palm OS的开发工具,允许用户利用该工具在Palm OS基础上方便地编写、修改相关软件。18、什么是Boot Loader,ARM系统中Boot Loader的主要作用是什么答:(1)Boot Loader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们能初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。(2)Boot Loader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们能初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。19、简述Boot Loader的启动过程分成两个步骤:(why)因此大多数 Boot Loader都分为 stage1 和 stage2 两大部分。依赖于 CPU 体系结构的代码,比如设备初始化代码等,通常都放在 stage1 中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而 stage2 则通常用C语言来实现,这样可以实现给复杂的功能,而且代码会具有更好的可读性和可移植性。a) Stage1:i. 硬件设备初始化 ii. 为加载 Boot Loader 的 stage2 准备 RAM 空间 iii. 拷贝 Boot Loader 的 stage2 到 RAM 空间中 iv. 设置好堆栈 v. 跳转到 stage2 的 C 入口点b) Stage2:i. 初始化本阶段要使用到的硬件设备 ii. 检测系统内存映射(memory map) iii. 将kernel映像和根文件系统映像从Flash上读到RAM空间中 iv. 为内核设置启动参数 v. 调用内核20、Linux内核源码是如何组织的,主要的目录文件有哪些?(1) Linux内核源码非常庞大,采用C语言和少量汇编实现,并且随着版本的发展不断增加。源码的工程管理采用目录树结构,并使用Makefile组织配置编译顶层目录中另一个比较重要的文件是Makefile,它是整个内核配置编译的核心文件,负责组织目录树中的子目录的配置编译管理,还决定了体系结构和内核版本号等。(2) 网上找的答案:1,内核主目录linux 2,引导启动程序目录boot 3,文件系统目录fs 4, 头文件主目录include 5,内核初始化程序目录init 6,内核程序主目录kernel 7,内核库函数目录lib 8,内存管理程序目录mm 9,编译内核工具程序目录toolsarch 包含和硬件体系结构相关的代码,每种平台占一个相应的目录。如arm、avr32、blackfin、mips等。block块设备驱动程序的IO调度。crypto常用的加密和离散算法,还有一些压缩和CRC校验算法Documentation内核的说明文档。drivers设备驱动程序,其下细分为不同种类的设备。如block、char、mtd、net、usb、video等等。fs 内核支持的文件系统的实现,如ext2、ext3、cramfs、jffs2、nfs等。include头文件。与系统相关的头文件放在include/linux下,与ARM体系结构相关的头文件放在include/asm-arm下。init内核初始化代码。ipc 进程间通信代码。kernel内核的核心代码,包括进程调度、定时器等。和arm平台相关的核心代码在arch/arm/kernel目录下。lib库文件代码mm内存管理代码,和arm平台相关的内核管理代码在arch/arm/mm目录下。net网络相关的代码,实现了各种常见的网络协议。scripts包含用于配置内核的各种脚本文件。只在配置时是有意义的。sound音频设备驱动的通用代码和硬件驱动代码都在这个文件件下面。21、内核移植的一般步骤1 内核修改(1)解压内核源码(2)修改Makefile(3)修改目标板输入时钟(4)修改MTD分区(5)配置yaffs2文件系统的补丁2 内核配置1, Makefile文件的修改2, 设置NAND FLASH 分区3, 设置晶振频率4, 配置内核选项3 内核编译22、嵌入式系统中根文件系统架构是如何组织的根文件系统的结构 (1)/dev 设备文件。 (2)/root root用户主目录。 (3)/usr。 (4)/var。 (5)/home。(6)/proc。(7)/bin。(8)/sbin。(9)/etc。(10)/boot。(11)/lib。 (12)/mnt。(13)/tmp。(14)/initrd 制作根文件系统(1)建立目录结构(2)编译busybox (3)创建设备节点(4)建立配置文件 (5)添加共享链接库(6)制作映像23,设备驱动程序的功能,设备驱动程序的分类(1)l 设备驱动程序将复杂的硬件抽象成一个结构良好的设备,并通过提供统一的程序接口为系统的其它部分提供使用设备的能力和方法。l 设备驱动程序(应该只是)为系统的其它部分提供各种使用设备的能力,使用设备的方法应该由应用程序决定。(2)l 字符设备驱动程序,如:各种串行接口,并行接口等。l 块设备驱动程序,如:磁盘设备等l 网络设备驱动程序,如:网卡等。l 杂项设备驱动程序,即不属于上述三种设备之外的一些设备,如SCSI,时钟等24、简述字符设备驱动程序的主要组成部分a) 头文件,宏定义和全局变量:一个典型的设备驱动程序一般都包含有一个专用的头文件,这个头文件中包含一些系统函数的声明,设备寄存器的地址,寄存器状态位和控制位和控制位的定义以及用于此设备驱动程序的全局变量的定义。b) open( ) : 无论一个进程何时试图去打开这个设备都会调用这个函数。c) release ( ) : 当一个进程试图关闭这个设备特殊文件的时候调用这个函数。d) read ( ): 当一个进程已经打开此设备文件以后并且试图去读它的时候调用这个函数。e) write ( ): 当试图将数据写入这个设备文件的时侯,这个函数被调用f) 设备驱动程序提供给文件系统的接口: 当一个进程试图对我们生成的设备进行操作的时候就利用下面这个结构,这个结构就是我们提供给操作系统的接口,它的指针保存在设备表中,在init_module()中被传递给操作系统。g) 模块的初始化和模块的卸载: 这个函数用来初始化这个模块 注册该字符设备。init_module ()函数调用module_register_chrdev,把设备驱动程序添加到内核的字符设备驱动程序表中,它返回这个驱动程序所使用的主设备号。