嵌入式Linux实时操作系统及应用编程嵌入式Linux实时操作系统及应用编程嵌入式Linux实时操作系统及应用编程嵌入式Linux实时操作系统及应用编程附录A习题参考答案嵌入式Linux实时操作系统及应用编程第1章1.嵌入式系统是指操作系统和功能软件集成于计算机硬件系统之中。简单的说就是系统的应用软件与系统的硬件一体化,类似与BIOS的工作方式。具有软件代码小,高度自动化,响应速度快等特点。特别适合于要求实时的和多任务的体系。根据IEEE(国际电气和电子工程师协会)的定义:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”(原文为devicesusedtocontrol,monitor,orassisttheoperationofequipment,machineryorplants)。简单地讲就是嵌入到对象体中的专用计算机系统。嵌入式系统一般有3个主要的组成部分:硬件、实时操作系统以及应用软件。●硬件:包括处理器、存储器(ROM、RAM)、输入输出设备、其他部分辅助系统等。●实时操作系统(Real-TimeOperatingSystem,RTOS):用于管理应用软件,并提供一种机制,使得处理器分时地执行各个任务并完成一定的时限要求。●应用软件:实现具体业务逻辑功能。2.嵌入式系统的三要素是嵌入、专用、计算机;其中嵌入性指的是嵌入到对象体系中,有对象环境要求;专用性是指软、硬件按对象要求裁减;计算机指实现对象的智能化功能。广义地说一个嵌入式系统就是一个具有特定功能或用途的计算机软硬件集合体。即以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。3.嵌入式实时操作系统(Real-TimeOperatingSystem,RTOS)是指操作系统本身要能在一个固定时限内对程序调用(或外部事件)做出正确的反应,亦即对时序与稳定性的要求十分严格。目前国际较为知名的有:VxWorks、NeutrinoRTOS、NucleusPlus、OS/9、VRTX、LynuxOS,RTLinux、BlueCatRT等。图1.1嵌入式系统三个组成部分4.嵌入式系统一般由硬件层、中间层、软件层和功能层组成。其作用分别如下:(1)硬件层:由嵌入式微处理器、外围电路和外设组成。外围电路有:电源电路、复位电路、调试接口和存储器电路,就构成一个嵌入式核心控制模块。操作系统和应用程序都可以固化在ROM或者Flash中。为方便使用,有的模块在此基础上增加了LCD、键盘、USB接口,以及其他一些功能的扩展电路。(2)中间层:硬件层与软件层之间为中间层,也称为BSP(BoardSupportPackage,板级支持包)。作用:将系统软件与底层硬件部分隔离,使得系统的底层设备驱动程序与硬件无关;功能:一般应具有相关硬件的初始化、数据的输入/输出操作和硬件设备的配置等功能。BSP是主板硬件环境和操作系统的中间接口,是软件平台中具有硬件依赖性的那一部分,主要目的是为了支持操作系统,使之能够更好地运行于硬件主板上。(3)软件层:主要是操作系统,有的还包括文件系统、图形用户接口和网络系统等。操作系统是一个标准的内核,将中断、I/O、定时器等资源都封装起来,以方便用户使用。(4)功能层:由基于操作系统开发的应用程序组成,用来完成对被控对象的控制功能。功能层是面向被控对象和用户的,为了方便用户操作,往往需要具有友好的人机界面。5.非占先式调度法也称作合作型多任务(cooperativemultitasking),各个任务彼此合作共享一个CPU。中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。但中断服务以后控制权还是回到原来被中断了的那个任务,直到该任务主动放弃CPU的使用权时,那个高优先级的任务才能获得CPU的使用权。当系统响应时间很重要时,要使用占先式(preemptive)内核。最高优先级的任务一旦就绪,总能得到CPU的控制权。当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU的控制权。6.在实时系统中,如果系统在指定的时间内未能实现某个确定的任务,会导致系统的全面失败,这样的系统被称为强实时系统或硬实时系统。强实时系统响应时间一般在毫秒或微秒级。在弱实时系统中,虽然响应时间同样重要,但是超时却不会发生致命的错误。其系统响应时间在毫秒至秒的数量级上,其实时性的要求比强实时系统要差一些。7.嵌入式系统的设计步骤及各部分的主要工作如下。(1)需求分析阶段,罗列出用户的需求;(2)体系结构设计阶段,描述系统的功能如何实现;(3)详细设计阶段,进行硬件系统与软件系统的分类划分,以决定哪些功能用硬件实现,哪些用软件实现;(4)系统集成,把系统的软件、硬件和执行装置集成在一起,进行调试,发现并改进在设计过程中的错误;(5)系统测试,对设计好的系统进行测试,看其是否满足给定的要求。8.Linux作为嵌入式操作系统的优势主要有以下几点:(1)可应用于多种硬件平台。Linux已经被移植到多种硬件平台,这对于经费,时间受限制的研究与开发项目是很有吸引力的。原型可以在标准平台上开发后移植到具体的硬件上,加快了软件与硬件的开发过程。Linux采用一个统一的框架对硬件进行管理,从一个硬件平台到另一个硬件平台的改动与上层应用无关。(2)Linux的高度模块化使添加部件非常容易。本身内置网络支持,而目前嵌入式系统对网络支持要求越来越高。(3)Linux是一个和Unix相似、以内核为基础的、具有完全的内存访问控制,支持大量硬件(包括X86,Alpha、ARM和Motorola等现有的大部分芯片)等特性的一种通用操作系统。(4)Linux可以随意地配置,不需要任何的许可证或商家的合作关系。其程序源码全部公开,任何人可以修改并在GUN通用公共许可证(GNUGeneralPublicLicense)下发行。这样,开发人员可以对操作系统进行定制,适应其特殊需要。(5)Linux带有Unix用户熟悉的完善的开发工具,几乎所有的Unix系统的应用软件都已移植到了Linux上。其强大的语言编译器GCC,C++等也可以很容易得到,不但成熟完善,而且使用方便。9.(参考答案)Linux执行进程调度一般是在以下情况发生的:(1)正在执行的进程运行完毕;(2)正在执行的进程调用阻塞原语将自己阻塞起来进入等待状态;(3)正在执行的进程调用了P原语操作,从而因资源不足而被阻塞;或调用了V原语操作激活了等待资源的进程队列;(4)执行中的进程提出I/O请求后被阻塞;(5)系统分配的时间片已经用完;以上都是CPU为不可剥夺方式下的引起进程调度的原因。在CPU方式是可剥夺时,还有下面的原因:(6)就绪队列中的某个进程的优先级变得高于当前运行进程的优先级,从而也将引起进程调度。嵌入式Linux实时操作系统及应用编程第2章一.填空题:1、改变目录位置至用户的工作目录2、改变目录位置至相对路径user的目录下3、查看当前目录下的文件4、查看文件.bash_profile的内容5、分页查看inittab文件内容6、将目录/tmp下的文件file1复制到当前目录下,文件名为file27、将文件file1移到目录dir1下,文件名仍为file18、建立一新目录dir19、删除目录dir1,但dir1下必须没有文件存在,否则无法删除10、删除文件名中有五个字符且前四个字符为file的所有文件11、文件config的内容依次显示到屏幕上12、以分页方式查看文件名file1的内容13、以分页方式查看文件名file1的内容14、显示目录dir1的总容量15、对于目录dir1,设定成任何使用者皆有读取及执行的权利,但只有所有者可做修改16、对于文件file1,设定只有所有者可以读、写和执行的权利。17、将文件file4链接至文件file3。18、寻找文件file1中包含字符串abc所在行的文本内容。19、自根目录下寻找文件file1的路径。20、比较目录dir1与dir2内各文件的不同之处。二、单项选择题1.A2.B3.D4.C5.B6.C7.A8.C9.D10.B11.A12.D13.D14.B15.B16.B17.A18.D19.B20.B嵌入式Linux实时操作系统及应用编程第3章一.填空题:1.next2.命令模式3.预处理、编译、汇编和连接4.stepnext5.末行模式6.预处理链接7.汇编8.wtest.txt二、综合题1.参考答案:pr1:prog.osubr.ogcc–opr1prog.osubr.oprog.o:prog.cprog.hgcc–c–oprog.oprog.csubr.o:subr.csubr.hgcc–c–osubr.osubr.c2.(1)hello:main.olist.osymbol.otable.ogcc-oprogmain.olist.osymbol.otable.omain.o:main.ctable.hsymbol.hlist.hgcc-c-omain.omain.clist.o:list.clist.hgcc-c-olist.olist.csymbol.o:symbol.csymbol.hgcc-c-osymbol.osymbol.ctable.o:table.ctable.hsymbol.hlist.hgcc-c-otable.otable.cclean:rmhello*.o(2)mount–tnfs–onoclock192.168.0.10:/home/armtest/hello/mnt3.hello.c:#includestdio.h#includestdlib.h#includestring.h#includehello.hintmain(intargc,char*argv[]){printf(HelloWorld!\n);message();return0;}hello.h:voidmessage(void);message.c:#includestdio.hvoidmessage(void){printf(Thisisamessage!\n);}三.选择题1.C2.A3.B4.B5.B6.C7.C8.D9.D10.A11.A嵌入式Linux实时操作系统及应用编程第4章一.选择题1.A2.C3.D4.D5.C6.B7.C8.A9.D10.D11.D12.D13.D14.B15.D16.B17.A18.C19.C20.C二.简答题1、Linux内核的编译菜单有好几个版本,运行:(1)makeconfig:进入命令行,可以一行一行的配置,但使用不十分方便。(2)makemenuconfig:大多数开发人员使用的Linux内核编译菜单,使用方便。(3)makexconfig:在2.4.X以及以前版本中xconfig菜单是基于TCL/TK的图形库的。2、在完成内核的裁减之后,内核的编译就只要执行以下几条命令:makeclean编译内核之前先把环境给清理干净。有时你也可以用makerealclean或makemrproper来彻底清除相关依赖,保证没有不正确的.o文件存在。makedep编译相关依赖文件makezImage创建内核镜像文件makemodules创建内核模块,若不创建内核模块,这步可以不要。makeinstall把相关文件拷贝到默认的目录。在给嵌入式设备编译时这步可以不要。因为具体的内核安装还需要你手工进行。3、此命令是装载压缩映像文件zImage到flash存储器中,地址是kernel分区,并采用xmodem传输协议。4、此命令是设置网卡1的地址192.168.1.1,掩码为255.255.255.0,不写netmask参数则默认为255.255.255.0。5、此命令将nfs服务的共享目录sharedir加载到/mnt/nfs。6、此命令是装载根文件系统root.cramfs到flash存储器中