收藏 分销(赏)

嵌入式系统原理复习题及答案.doc

上传人:w****g 文档编号:2571483 上传时间:2024-06-01 格式:DOC 页数:11 大小:103.01KB 下载积分:8 金币
下载 相关 举报
嵌入式系统原理复习题及答案.doc_第1页
第1页 / 共11页
嵌入式系统原理复习题及答案.doc_第2页
第2页 / 共11页


点击查看更多>>
资源描述
嵌入式系统原理复习题 1、 嵌入式系统的概念 广义上讲,凡是带有微处理器的专用软硬件系统都可称为嵌入式系统。如各类单片机和DSP系统。这些系统在完成较为单一的专业功能时具有简洁高效的特点。但由于他们没有操作系统,管理系统硬件和软件的能力有限,在实现复杂多任务功能时,往往困难重重,甚至无法实现。 从狭义上讲,我们更加强调那些使用嵌入式微处理器构成独立系统,具有自己操作系统,具有特定功能,用于特定场合的嵌入式系统。本书所谓的嵌入式系统是指狭义上的嵌入式系统。 根据IEEE(国际电气和电子工程师协会)的定义:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”(原文为devices used to control, monitor, or assist the operation of equipment, machinery or plants)。 嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 2、 嵌入式系统的特点 1) 系统内核小 2) 专用性强 3) 运行环境差异大 4) 可靠性要求高 5) 系统精简和高实时性操作系统 6) 具有固化在非易失性存储器中的代码 7) 无自举开发能力 3、 嵌入式系统的硬件平台由哪些部分组成 嵌入式系统的微硬件包括嵌入式核心芯片、存储器系统及外部接口 4、 什么是分时系统、软实时系统、硬实时系统,它们的区别是什么? 分时操作系统按照相等的时间片调度进程轮流运行,分时操作系统由调度程序自动计算进程的优先级,而不是由用户控制进程的优先级。这样的系统无法实时响应外部异步事件。 硬实时系统有一个刚性的、不可改变的时间限制,它不允许任何超出时限的错误。超时错误会带来损害甚至导致系统失败、或者导致系统不能实现它的预期目标。 软实时系统的时限是一个柔性灵活的,它可以容忍偶然的超时错误。失败造成的后果并不严重,仅仅是轻微的降低了系统的吞吐量。 5、 嵌入式系统的分类 按嵌入式微处理器的位数分类 a) 4位 b) 8位 c) 16位 d) 32位 e) 64位 按软件实时性需求分类 a) 非实时系统 b) 软实时系统 c) 硬实时系统 按嵌入系统的复杂程度分类 b) 小型嵌入式系统 c) 中型嵌入式系统 d) 复杂嵌入式系统 6、 ARM9处理器的工作状态有哪些 ARM状态,Thumb状态 7、 ARM9处理器的内部寄存器结构 ARM处理器总共有37个寄存器,可以分为以下两类寄存器 : 1) 31个通用寄存器 : R0~R15; 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处理器的工作模式有哪些 用户,FIQ,IRQ,SVC,中止,未定义,系统 9、 CPSR寄存器各数据位的作用 CPSR包含条件码标志、中断禁止位、当前处理器模式以及其它状态和控制信息。 10、 如何实现ARM状态和Thumb状态的切换 ARM处理器在两种工作状态之间切换方法: 进入Thumb状态: 当操作数寄存器Rm的状态位bit[0]为1时,执行BX Rm指令进入Thumb状态。如果处理器在Thumb状态进入异常,则当异常处理(IRQ,FIQ,Undef,Abort和SWI)返回时,自动切换到Thumb状态。 进入ARM状态: 当操作数寄存器Rm的状态位bit[0]为0时,执行BX Rm指令进入ARM状态。如果处理器进行异常处理(IRQ,FIQ,Undef,Abort和SWI),在此情况下,把PC放入异常模式链接寄存器LR中,从异常向量地址开始执行也可以进入ARM状态。 11、 ARM为何集成了32位的ARM指令集和16位的Thumb指令集 ARM的RISC体系结构的发展中已经提供了低功耗、小体积、高性能的方案。而为了解决代码长度的问题,ARM体系结构又增加了T变种,开发了一种新的指令体系,这就是Thumb指令集。它有从标准32位ARM指令集抽出来的36条指令格式,可以重新编成16位的操作码。这能带来很高的代码密度。 12、 ARM指令寻址方式与ARM指令集中各类常用指令的用法 (内容太多,第三章全部内容!) 13、 什么是交叉编译,为什么要进行交叉编译 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,这个编译过程就叫交叉编译。 原因:有时是因为目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。 14、 简述构建交叉编译链的主要步骤 1) 获取相关的源代码和补丁包 2) 它们都存放在src目录下 3) 安装binutils 4) 安装Linux header 5) 安装Glibc 头文件 6) 编译GCC Stage1 7) 使用刚编译出的GCC编译Glibc 8) 重新编译GCC,即GCCStage2 15、 简述嵌入式系统的开发流程 主要包括系统需求分析(要求有严格规范的技术要求)、体系结构设计、软硬件及机械系统设计、系统集成、系统测试,最终得到最终产品。 16、 嵌入式系统与通用计算机的区别 一是能力不同。通用计算机系统通常什么都能做,我们买个电脑,上网、听音乐、看电影、做软件都不在话下。嵌入式系统一般面向某一特定应用,不是什么都能干。例如鼠标里的嵌入式系统任务只是监视鼠标的按键,并向主CPU发送键码,数码相机里面的嵌入式系统主要进行图像处理,让它们什么都能做,有点难也没必要。     二是大小不同。通用计算机系统通常对个头没有要求,台式机占据一张桌子,大型服务器可以占据一个房间,笔记本放到膝盖上就行。嵌入式系统由于要嵌入到它服务的主体里面,一般都比较小,而且要与服务的主体有机结合成为一个整体。     三是实时性要求不同。实时性指完成任务的时间要求。通用计算机系统一般实时性要求不高,但嵌入式系统往往实时性要求很高。比如汽车里的嵌入式系统,如果发动机过热,必须要求在规定的时间内作出反应,如果像PC那样不紧不慢的,后果可想而知。     四是可靠性要求不同。电脑死机估计每个人都经常遇到,死机了怎么办?重启就是。但是如果火箭发射时里面的嵌入式系统死机了......,     五是二次开发能力不同。我们买来个电脑,通常也就装了个操作系统,其它的程序我们需要什么就可以装什么,我们甚至可以打开机箱,加几条内存。但嵌入式系统通常买来后就那样了,软件和硬件都不变了。数码相机相信多数人没有打开过,也没有再安装什么新软件。倒是智能手机可以装一些软件,但能力有限。        六是数量不同。嵌入式系统的数量远大于通用计算机系统的数量。因为一个通用计算系统中至少包括数十个嵌入式系统。更别说其它的嵌入式系统了。         17、 常见的嵌入式操作系统有哪些,各自有什么特点 1) VxWorks: 性能优越,开发调试便利,强大的技术支持,但是昂贵的价格让开发者望而却步。 2) Windows CE: 精简的模块化操作系统 多硬件平台支持 支持有线和无线的网络连接 稳健的实时性支持 丰富的多媒体和多语言支持 强大的开发工具 3) Palm OS: 3Com公司产品,专门为掌上电脑开发的32位的嵌入式操作系统 占有非常小的内存,基于Palm OS编写的应用程序占用的空间也非常小(通常只有几十KB) Palm提供了串行通信接口和红外线传输接口,利用它可以方便地与其它外部设备通信、传输数据 拥有开放的OS应用程序接口,开发商可根据需要自行开发所需的应用程序 具有强开放性,现在有大约数千种专门为Palm OS编写的应用程序,从程序内容上看,小到个人管理、游戏,大到行业解决方案,Palm OS无所不包。在丰富的软件支持下,基于Palm OS的掌上电脑功能得以不断扩展。 操作系统的节能功能。在Palm OS的应用程序中,如果没有事件运行,则系统设备进入半休眠(doze)的状态;如果应用程序停止活动一段时间,则系统自动进入休眠(sleep)状态。 合理的内存管理。Palm的存储器全部是可读写的快速RAM,动态RAM(Dynamic RAM)类似于PC机上的RAM,它为全局变量和其它不需永久保存的数据提供临时的存储空间;存储RAM(Storage RAM)类似于PC机上的硬盘,可以永久保存应用程序和数据。 Palm OS的数据是以数据库(database)的格式来存储的。 4) 嵌入式Linux: 嵌入式Linux OS逐渐形成了可与Windows CE等EOS相抗衡的局面。目前正在开发的嵌入式系统中,49%的项目选择Linux作为嵌入式操作系统。Linux现已成为嵌入式操作系统的理想选择。 开放源码,丰富的软件资源,广泛的软件开发者的支持,价格低廉,结构灵活,适用面广。 精简的内核,性能高、稳定,多任务。 适用于不同的CPU,支持多种体系结构,如X86、ARM、MIPS、ALPHA、SPARC等。 能够提供完善的嵌入式GUI以及嵌入式X-Windows。 提供嵌入式浏览器、邮件程序、MP3播放器、MPEG播放器、记事本等应用程序。 提供完整的开发工具和SDK,同时提供PC上的开发版本。 用户可定制,可提供图形化的定制和配置工具。 常用嵌入式芯片的驱动集,支持大量的周边硬件设备,驱动丰富。 针对嵌入式的存储方案,提供实时版本和完善的嵌入式解决方案。 完善的中文支持,强大的技术支持,完整的文档。 18、 什么是Boot Loader,ARM系统中Boot Loader的主要作用是什么 Boot Loader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们能初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。 作用:硬件初始化,操作系统引导。 19、 简述Boot Loader的启动过程  大多数 BootLoader 都包含两种不同的操作模式:启动加载模式和下载模式。启动加载模式也称为自主模式,即 BootLoader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。而下载模式则是目标机上的 BootLoader 将通过串口连接或网络连接等通信手段从主机(Host)下载文件。从主机下载的文件通常首先被 Boot Loader 保存到目标机的 RAM 中,然后再被 BootLoader 写到目标机上的FLASH 类固态存储设备中。这种模式通常在第一次安装内核与根文件系统时被使用,或系统更新时使用。一般嵌入式系统的Boot Loader较为常用的是启动加载模式,它的加载流程也是我们要重点讨论的内容。     (1)启动部分    启动部分主要是实现初始化硬件的功能。在参考板的BootLoader目录下,会发现一些.s文件,可能会是init.s或者是reset.s等,这样的文件是CPU加电后最先执行的代码。接着Oal.exe通过Startup函数完成硬件的初始化,StartUp 函数是Boot Loader的入口函数。该函数一般是使用汇编语言编写,与CPU关系非常紧密,能完成初始化CPU、内存等核心硬件。     Startup.s代码与硬件平台的Bootloader启动代码共用。如果是热启动,即在该函数调用之前已经启动了Bootloader程序,相当基本硬件初始化已经完成,则直接跳转到OALStartUp函数中;否则需要进行硬件中断屏蔽、内存、系统时钟频率、电源管理等硬件的基本初始化过程。在系统硬件初始化完毕之后,Startup调用OALStartUp函数,OALStartUp函数主要完成将OEMAddressTable表传递给内核,然后调用KernelStart函数跳转到内核。因此,这部分工作是BootLoader的一大重点。     (2)主控部分  StartUp 函数初始化CPU等核心硬件并跳转到Main函数后,系统就会转入C语言代码执行环境。这时函数分为3个模块:BLCOMMON、Download 、FLASH 。其中BLCOMMON模块是由微软提供的,执行一些逻辑上的功能,因此建议开发人员不要对其进行修改。而Download 、FLASH 中的函数与硬件平台息息相关,因此对于每种硬件平台都要将函数的实现进行修改。     其中,BLCOMMON库是与BootLoader程序链接在一起的,BLCOMMON库的入口点为BootloaderMain函数,它是Startup汇编函数完成后跳转至该入口的。Main函数的主要任务时调用BLCommon中的 BootloaderMain()函数,这是BootLoader的主控函数,它控制了BootLoader的完整执行流程。这部分代码由C语言实现,是BLCOMMON代码的一部分,它可以用来执行比较复杂的操作。比如检测内存和Flash的有效性、检测外部设备接口、检测串口并且向已经连接的主机发送调试信息、通过串口等待命令、启动网络接口、建立内存映射等汇编无法完成的工作。      (3)下载部分    一般在平台调试完毕后,可以在不用人工干预的情况下自动加载CE,这也是BootLoader的功能之一。而在调试阶段时,这需要通过Loader所支持的命令来进行操作的,借助于这些命令不仅可以完成硬件平台的部分测试,还能完成CE的BootLoader程序最为重要的一个功能--下载CE映像。如果说硬件调试功能可以由其它的程序代替而不放入BootLoader中,但是下载映像文件却是BootLoader必需的功能。     CE映像文件通常叫做nk.bin,它是Windows CE二进制数据格式文件,不仅包含了有效的程序代码,还有按照一定规则加入的控制信息。当然,也可以选择生成.sre格式的代码文件,但是相于对前一种格式,它的代码要长很多,所需要的下载时间也更长。     (4)支持DOC部份  对于WinCE操作系统而言,丰富的多媒体功能是其一大特点。但是随之而来的问题是,如果选择了图形界面和中文支持,系统很容易大大超出嵌入式系统上百KB的数量级。而DOC(Disk On Chip)则提供了一种相对廉价的大存储容量的解决方案。     DOC本质上是一种加以软件控制的NAND格式的Flash,通过TFFS这一软件层提供对WinCE的支持。由于DOC不能像内存一样被直接访问,所以其加载WinCE的过程有些特殊,必须要在BootLoader中加入专门的代码,才能使用DOC来存放WinCE映像文件 20、 Linux内核源码是如何组织的,主要的目录文件有哪些? arch 包含和硬件体系结构相关的代码,每种平台占一个相应的目录。和32位PC相关的代码存放在i386目录 下,其中比较重要的包括: kernel  内核核心部分 mm      内存管理  math-emu    浮点单元仿真 lib   硬件相关工具函数 boot    引导程序 pci      PCI总线和 power CPU相关状态  block 部分块设备驱动程序         crypto 常用加密和散列算法如 AES、SHA等 还有一些压缩和CRC校验算法。  /*********************************************************************************************************************************/  drivers      放置系统所有的设备驱动程序;每种驱动程序又各占用一个子目录:如,/block 下为块设备驱动程序,比如 ide(ide.c)。如果你希望查看所有可能包含文件系统的设备是如何初始化的,你可以看drivers/block/genhd.c中的device_setup()。它不仅初始化硬盘,也初始化网络,因为安装nfs文件系统的时候需要网络; fs       文件系统代码,每个支持的文件系统有相应的子目录,如cramfs,yaffs,jffs2等 。  include       包括编译内核所需的大部分头文件,与平台无关的头文件放在include/linux子目录下,平台相关的头文件如include/asm-arm  init         这个目录包含核心的初始化代码(注:不是系统的引导代码),包含两个文件main.c和Version.c,这是研究核心如何工作的好的起点之一。  kernel        主要的核心代码,此目录下的文件实现了大多数linux系统的内核函数,其中最重要的文件当属sched.c;同样,和体系结构相关的代码在arch/*/kernel中。  Lib 库函数代码。 Mm         这个目录包括所有独立于 cpu 体系结构的内存管理代码,如页式存储管理内存的分配和释放等;而和体系结构相关的内存管理代码则位arch/*/mm/,例如arch/i386/mm/Fault.c;    Net 网络支持代码 sound         音频设备驱动代码 Scripts          描述文件,脚本,用于对核心的配置; documentation         关于内核各部分的通用解释和注释 ipc         进程间通信的代码。 security         主要是一个SELinux的模块。 Modules        模块文件目录,是个空目录,用于存放编译时产生的模块目标文件。  /**********************************************************************************************************************************/  在每个子目录下,都有一个 Makefile 和一个Readme 文件,仔细阅读这两个文件,对内核源码的理解很有用。 其中顶层目录下的 Makefile 负责整个内核的编译,编译的时候递归的调用各个目录下的 Makefile 文件,最终将产生内核的可执行映像文件。     Makefile:分布在Linux内核源码中的Makefile定义了Linux内核编译的规则。Makefile  决定编译哪些文件、 怎样编译这些文件 、按什么顺序连接这些文件。 config:在配置内核时生成的一个文件,根据.config来决定使用哪些Makefile。    21、 内核移植的一般步骤 第一阶段: 1、获取源码 解压 2、在系统中添加对平台(ARM)的支持: toplevel Makefile 改交叉编译器路径 3、改平台输入: arch/arm/mach-s3c2440/mach-smdk2440.c 4、改机器码,与U-Boot配合才能启动: arch/arm/tools/mach-types 5、改镜像的存放地: arch/arm/boot-->Makefile 默认镜像存在arch/arm/boot 6、做自己的配置单: #make menuconfig 加载2410的配置单 修改System type 修改版本信息: general setup 使支持交叉编译器 kernel features 7、保存.config 并复制一个配置单的备份 8、编译镜像: #make distclean #make zImage 9、启动内核看console信息 第二阶段: 1、移植NandFlash驱动: (驱动内核已做好,只修改几个地方) arch/arm/plat-s3c24xx/common-smdk.c 改分区信息 改读写匹配时间 Drivers/mtd/nand/s3c2410.c 去掉ECC校验(内核与U-Boot校验不同) #make menuconfig 添加NandFlash支持 2、完善串口驱动(内核只支持两个串口,可把红外接口修改为串口)(可选操作) 红外改串口: arch/arm/mach-smdk2440.c drivers/serial/s3c2410.c和samsung.c 配置菜单 3、移植文件系统 1、获得 yaffs文件系统源码和yaffs文件系统补丁 解压 2、内核中添加yaffs支持  打补丁  改配置单Device Drivers、File system 3、编译BusyBox: 目的是生成文件系统所需要的一些目录和文件 3.1、解压BusyBox源码 进入源码目录添加编译器路径 改Makefile 3.2、改BusyBox配置单 #make menuconfig 保存配置单 3.3、编译安装BusyBox #make; make install 生成文件系统部分源码在_install 4、构建文件系统: 目的是构建一个比较完整的文件系统 4.1、构建框架 主目录: root_2.6.30.4 子目录: 复制:BusyBox生成的_install目录下的目录 新建:#mkdir dev etc home lib mnt opt proc root sddisk sys tmp udisk var web usr/lib usr/share 4.2、添加文件 dev设备目录/etc配置文件目录/home用户目录/lib库目录 /mnt移动设备挂载目录/opt与QT等相关/proc虚拟文件系统和目录 /root超级用户目录/sys可能mdev建目录/tmp临时文件目录 /var临时文件目录/usr/bin串口有关 5、编译文件系统镜像: #mkyaffs2image root_2.6.30.4 root_2.6.30.4.bin 得到文件系统镜像 第三阶段: 1、移植网卡驱动 2、移植USB驱动 3、移植LCD驱动 4、移植触摸驱动 5、移植声卡驱动 6、移植SD卡驱动 7、移植IIS驱动 8、移植RTC驱动 9、移植看门狗驱动 22、 嵌入式系统中根文件系统架构是如何组织的 1./bin目录 该目录下存放所有用户都可以使用的、基本的命令,这些命令在挂接其它文件系统之前就可以使用,所以/bin目录必须和根文件系统在同一个分区中。 2./sbin 目录 该目录下存放系统命令,即只有管理员能够使用的命令,系统命令还可以存放在/usr/sbin,/usr/local/sbin目录下,/sbin目录中存放的是基本的系统命令,它们用于启动系统,修复系统等,与/bin目录相似,在挂接其他文件系统之前就可以使用/sbin,所以/sbin目录必须和根文件系统在同一个分区中。 3、/dev目录 该目录下存放的是设备文件,设备文件是Linux中特有的文件类型,在Linux系统下,以文件的方式访问各种设备,即通过读写某个设备文件操作某个具体硬件。比如通过"dev/ttySAC0"文件可以操作串口0,通过"/dev/mtdblock1"可以访问MTD设备的第2个分区。 4./etc目录 该目录下存放着各种配置文件,对于PC上的Linux系统,/etc目录下的文件和目录非常多,这些目录文件是可选的,它们依赖于系统中所拥有的应用程序,依赖于这些程序是否需要配置文件。在嵌入式系统中,这些内容可以大为精减。 5./lib目录 该目录下存放共享库和可加载(驱动程序),共享库用于启动系统。运行根文件系统中的可执行程序,比如:/bin /sbin 目录下的程序。 6、/home目录 用户目录,它是可选的,对于每个普通用户,在/home目录下都有一个以用户名命名的子目录,里面存放用户相关的配置文件。 7./root目录 根用户的目录,与此对应,普通用户的目录是/home下的某个子目录。 8./usr目录 /usr目录的内容可以存在另一个分区中,在系统启动后再挂接到根文件系统中的/usr目录下。里面存放的是共享、只读的程序和数据,这表明/usr目录下的内容可以在多个主机间共享,这些主要也符合FHS标准的。/usr中的文件应该是只读的,其他主机相关的,可变的文件应该保存在其他目录下,比如/var。/usr目录在嵌入式中可以精减。 9、 /var目录 与/usr目录相反,/var目录中存放可变的数据,比如spool目录(mail,news),log文件,临时文件。 10、/proc目录 这是一个空目录,常作为proc文件系统的挂接点,proc文件系统是个虚拟的文件系统,它没有实际的存储设备,里面的目录,文件都是由内核临时生成的,用来表示系统的运行状态,也可以操作其中的文件控制系统。 11、 /mnt目录 用于临时挂载某个文件系统的挂接点,通常是空目录,也可以在里面创建一引起空的子目录,比如/mnt/cdram /mnt/hda1 。用来临时挂载光盘、硬盘 12. /tmp目录 用于存放临时文件,通常是空目录,一些需要生成临时文件的程序用到的/tmp目录下,所以/tmp目录必须存在并可以访问。 23、 设备驱动程序的功能,设备驱动程序的分类 设备驱动程序的功能: 1) 设备驱动程序将复杂的硬件抽象成一个结构良好的设备,并通过提供统一的程序接口为系统的其它部分提供使用设备的能力和方法。 2) 设备驱动程序(应该只是)为系统的其它部分提供各种使用设备的能力,使用设备的方法应该由应用程序决定。 设备驱动程序的分类: 1) 字符设备驱动程序 各种串行接口,并行接口等。 2) 块设备驱动程序 磁盘设备等 3) 网络设备驱动程序 网卡等。 4) 杂项设备驱动程序 不属于上述三种设备之外的一些设备,如SCSI,时钟等。 24、 简述字符设备驱动程序的主要组成部分 1) 模块初始化 2) 添加设备 3) 激活设备 4) 实现file_operation中需要的几个函数(其中包括对中断的处理) 5) 释放资源
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服