嵌入式操作系统精彩试题集61374_第1页
嵌入式操作系统精彩试题集61374_第2页
嵌入式操作系统精彩试题集61374_第3页
嵌入式操作系统精彩试题集61374_第4页
嵌入式操作系统精彩试题集61374_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

第一章嵌入式系统概论填空嵌入式系统是以嵌入式应用为目的、以计算机技术为基础的计算机系统。计算机系统按应用可以分为通用计算机系统和嵌入式计算机系统。嵌入式系统按软件结构可分为嵌入式单线程系统和嵌入式事件驱动系统。嵌入式系统按是否具有实时性能可分为嵌入式非实时系统和嵌入式实时系统。嵌入式实时系统除具有嵌入式系统的基本特征外,还具实时性和可靠性的重要特点。嵌入式系统的硬件架构是以嵌入式处理器为中心,由存储器 I/O设备,通信模块以及电源等必要的辅助接口组成。嵌入式系统的软件通常固态化存储在 ROMFLASH或NVRAI中。嵌入式系统的开发由于受到系统资源开销的限制,通常采用交叉开发环境。嵌入式系统开发采用的交叉开发环境是由宿主机和目标机组成的。嵌入式系统的设计是使用一组物理硬件和软件来完成所需功能的过程。选择以下哪一项不属于嵌入式操作系统(C)VxWorksB.WinCEC.BSDD.uClinux以下关于嵌入式系统说确的是 (A)A.以开发为中心 B对实时,成本,功耗要求严格C.软硬件协同 D软件可剪裁以下关于嵌入式系统说确的是 (A)嵌入的系统中可以共存多个嵌入式系统对高性能要求严格软硬件缺乏协同不要时性TOC\o"1-5"\h\z对响应时间有严格要求的嵌入式系统是( A)A.嵌入式实时系统 B.嵌入式多线程系统C.嵌入式多核系统D.嵌入式轮转询问系统以下哪一项属于嵌入式系统不具备的特点( B)A.采用专用处理器B.跨平台可移植C.软硬件协同一体化D.小型化与有限资源嵌入式系统硬件的核心是 (B)A.存储器B.嵌入式微处理器C.嵌入式微控制器 D.BSP嵌入式系统的软件部分不包括 (A)A.DSPB.嵌入式操作系统C.设备驱动程序D.应用程序对性能要求高的嵌入式系统是(C)A.嵌入式实时系统 B.嵌入式多线程系统C.嵌入式多核系统 D.嵌入式轮转询问系统嵌入式应用软件的开发阶段不包括(D)A.交叉编译和 B.开发环境的建立C.联机调试 D. 应用程序模块加载为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都保存在( A)存储器芯片B.磁盘C.cacheD.CDROM五.简答题给出嵌入式系统的一般定义和基本特征。定义:嵌入式系统(EmbeddedSystem)是以应用为中心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。基本特征:(1)专用性:采用专用的嵌入式处理器,功能算法的专用性;小型化与有限资源:资源约束和空间约束与专用性;系统软硬件设计的协同一体化:硬件与软件的协同设计和应用软件与操作系统的一体化设计开发。嵌入式实时系统相对其它嵌入式系统具有哪些不同的特点?任意列举两种为实现嵌入式实时系统所采用的措施。嵌入式实时系统除具有嵌入式系统的基本特征外,还具有实时性和可靠性的重要特点。为实现以上实时性能的要求,嵌入式系统一般采用如下方式:采用高速硬件。如高速处理器、高速 A/D、D/A等;利用嵌入式处理器提供的中断功能;需要嵌入式实时操作系统(RTOS的支持;应用程序代码量小、执行速度快。请列举两种嵌入式系统开发的方法。目前,嵌入式系统的开发有模拟开发调试、嵌入式在线仿真和远程调试等几种方法。请简述嵌入式系统的特点。、面向特定应用的特点。、嵌入式系统的硬件和软件都必须进行高效地设计。3、嵌入式系统是将先进的计算机技术、 半导体技术和电子技术与各个行业的具体应用相结合的产物。4、为了提高执行素的和系统可靠性, 嵌入式系统中的软件一般都固化在存储器芯片中或单片机本身,而不是存储于磁盘中。5、 嵌入式开发的软件代码尤其要求高质量,高可靠性。6、嵌入式系统本身不具备二次开发能力, 必须有一套开发工具和环境才能进行再次开发。请列举ARM处理器支持的运行模式。1、用户模式2、 快速中断模式3、 外部中断模式4、 管理模式5、 数据访问终止模式6、 系统模式第二章.嵌入式处理器基础一.填空ARM嵌入式系统主要由嵌入式处理器,相关支撑硬件和嵌入式软件系统组成。ARM微处理器的特点包括:低功耗,低成本和高性能。ARM处理器共有37个寄存器,包括31个通用寄存器和6个状态寄存器。ARM微处理器支持两种指令集: ARM指令集和Thumb指令集。ARM体系结构采用的特征有: Load/Store体系结构,固定的32位指令,3地址指令格式。ARM体系结构可用两种方法存储字数据,具体为大端模式和小端模式。ARM微处理器中,Thumb状态下的寄存器集是ARM犬态下寄存器集的一个子集。

ARM微处理器的工作模式中,系统模式并不是通过 异常进入的,它和用户模式具有完全一样的寄存器。ARM处理器工作状态主要有运行,睡眠,空闲 。常用的嵌入式外围设备有存储设备,通信设备,显示设备。二选择以下哪一项不属于嵌入式处理器的特点( C)A.对实时多任务支持能力强 B.功耗低C.处理器结构不易扩展 D. 存储保护能力强以下哪一项不属于嵌入式处理器(B)PowerPCB.pentiumC.ARMD.MIPS在指令系统的各种寻址方式中,获取操作数最快的方式是( B)A.直接寻址B.立即寻址C.寄存器寻址D.间接寻址ARM微处理器的寄存器在Thumb状态与ARM犬态下相同的是(DR8-R12B.R15和CPSRC.R13-R14D.R0-R7ARM指令系统采用(C)指令A.单地址B.双地址C.三地址D.四地址ARM3级流水线下取第一条指令前程序计数器为 PC,则取第三条指令为(D)APC+3BPC+6CPC+8DPC+12以下哪一项不属于ARM核的功能模块(C)支持16位压缩指令集ThumbB.支持片上DebugC.媒体功能扩展SIMDD.嵌入式ICE,支持片上断点和调试ARM寄存器组中除了以下哪组寄存器以外所有处理器模式下都可以访问( A)SPSRB.R0-R7C.CPSRD.R8-R9ARMARM异常处理中,软件中断处理程序执行( A)指令可以从SWI模式返回,无论是在ARM状态还是Thumb状态。MOVSPC,R14_svcB.MOVEQPC,R14_svcC.MOVSPC,R14_undD.MOVEQPC,R14_und以下哪一项不属于ARM异常中断(C)复位B.IRQC.条件转移D.数据终止判断TOC\o"1-5"\h\zFIQ异常是为了支持数据传输或者中断处理而设计的。 (错)ARM指令为32位的长度,Thumb指令为16位长度。(对)ARM微处理器采用RISC指令集,使用大量的寄存器。 (对)所有的ARM指令都可根据前面的执行结果决定是否被执行, 从而提高指令的执行效率ARM微处理器的存储器格式必须按对齐规则对存储单元进行访问。 (错)ARM微处理器通用寄存器 R14〜R0程序计数器PC—个或两个状态寄存器都是可访问的。(对)ARM状态下的寄存器组织分为三类:分组寄存器,程序寄存器,状态寄存器。 (错)R13在Thumb指令中常用作堆栈指针,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。(错)ARM微处理器中状态寄存器的低 8位称为控制位,发生异常时这些位可以被改变,但当处理器运行特权模式,这些位不可以改变。 (错)ARM微处理器可用加载/存储指令批量传输数据,以提高数据的传输效率。名词解释单机处理器所谓单机处理器是指那些专门用于处理功能的处理器芯片,相对于集成化处理器,单机处理器需要一些外围电路支持才能够实现其基本功能。ARM架构进阶精简指令集机器,是一个 32位精简指令集(RISC)中央处理器架构,ARM处理器体系结构由ARM公司开发并拥有知识产权。超标量体系结构能够在一个时钟周期执行多个指令,在超标量体系结构设计中,处理器或指令编译器判断指令能独立于其它顺序指令执行,还是依赖于另一指令,必须跟其按顺序执行,然后处理器使用多个执行单元同时执行两个或更多独立指令。DSP微处理器是一种独特的微处理器,是以数字信号来处理大量信息的器件。其工作原理是接收模拟信号,转换为0或1的数字信号。再对数字信号进行修改、删除、强化,并在其他系统芯片中把数字数据解译回模拟数据或实际环境格式。嵌入式片上系统单个芯片上集成一个完整的系统,对所有或部分必要的电子电路进行包分组的技术。完整的系统一般包括中央处理器,存储器以及外围电路等。随着电子数据交换的推广和 VLSI设计的普及化,以及半导体工艺的迅速发展,在一个硅片上可以实现一个更为复杂的系统。简答题当出现异常时,ARM微处理器会执行哪几步操作?将下一条指令的地址存入相应连接寄存器 LR,以便程序在处理异常返回时能从正确的位置重新开始执行。若异常是从 ARM状态进入,则LR寄存器中保存的是下一条指令的地址(当前PC+4或PC+8,与异常的类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存当前PC的偏移量,这样,异常处理程序就不需要确定异常是从何种状态进入的。例如:在软件中断异常SWI,指令MOVPC,R14_svc总是返回到下一条指令,不管 SWI是在ARM1犬态执行,还是在Thumb状态执行;将CPSF复制到相应的SPSR中;根据异常类型,强制设置 CPSR的运行模式位;强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程处。请简述ARM微处理器两种工作状态集的切换操作及方法。ARM旨令集和Thumb指令集均有切换处理器状态的指令,并可在两种工作状态之间切换:在开始执行代码时,处于ARM犬态;当操作数寄存器的状态位(位0)为1时,可以采用执行BX指令的方法,使微处理器从ARM犬态切换到Thumb状态;当处理器处于Thumb状态时发生异常(如IRQ、FIQ、Undef、Abort、SWI等),则异常处理返回时,自动切换到 Thumb状态;当操作数寄存器的状态位为0时,执行BX指令(状态跳转)时可以使微处理器从Thumb状态切换到ARM犬态。在处理器进行异常处理时,把 PC指针放入异常模式寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到 ARM犬态。请简述ARM微处理器的用户模式和特权模式,以及用户模式向特权模式的转换。除了用户模式之外的其他6种处理器模式称为特权模式.特权模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。(2) 特权模式中,除系统模式外,其他5种模式又称为异常模式。大多数的用户程序运行在用户模式下,此时,应用程序不能够访问一些受操作系统保护的系统资源, 应用程序也不能直接进行处理器模式的切换。(3) 用户模式下,当需要进行处理器模式切换时, 应用程序可以产生异常处理,在异常处理中进行处理器模式的切换。ARM微处理器的运行模式有有哪几种,请列举并说明。(1)用户模式(User,usr):正常程序执行时,ARM处理器所处的状态。(2) 快速中断模式(FIQ,fiq):用于快速数据传输和通道处理。(3) 外部中断模式(IRQ,irq):用于通常的中断处理。(4) 特权模式(Supervisor,sve):供操作系统使用的一种保护模式。(5) 数据访问中止模式(Abort,abt):当数据或指令预取终止时进入该模式,用于虚拟存储及存储保护。(6) 未定义指令终止模式(Undefined,und):用于支持硬件协处理器软件仿真。(7) 系统模式(System,sys):用于运行特权级的操作系统任务。如何进行嵌入式处理器的选型?ARM微处理器选型时应注意:ARM微处理器核的选择系统的工作频率芯片存储器的容量片外围电路的选择嵌入式处理器通常划分为哪四大类型?试列举出来。嵌入式处理器通常分为四大类 :嵌入式微处理器(MPU)、嵌入式微控制器(MCU)、嵌入式DSP处理器(DSP)、嵌入式片上系统(SOC)。试简述Thumb技术。Thumb是ARM体系结构的扩展,它有从标准 32位ARM指令集抽出来的36条指令格式,可重新编制成16位的操作码。Thumb指令的宽度只有ARM指令宽度的一半,在运行时,这些16位的Thumb指令又由处理器压成32为的ARM指令。Thumb不仅仅是另一个混合指令集的概念,因为支持Thumb的核有2套独立的指令集,它使设计者得到ARM32位指令性能的同时,又能享有Thumb指令集产生的代码方面的优势,可在性能和代码大小之间取得平衡。第三章Linux体系结构(核)和BusyBOX填空Linux最重要的特点是开源, Linux核遵循GNUGPL条款,意味着Linux是自由软件。Shell是操作系统中运行的程序,位于操作系统核与用户之间亠充当了一个“命令解释器”的角色。LINUX支持核线程以及动态装载核模块。Shell是系统的用户界面,文件系统是文件存放在磁盘等存储设备上的组织方法。Linux让所有任务都运行在核态, 直接调用函数,无须消息传递,避免了进程间通信(IPC)机制的开销。由于核支持异步终端、抢占和 SMP因此必须时刻注意同步和并发。命令提示符分为普通用户和管理员用户两种,普通用户的命令提示符使用 $,管理员用户的命令提示符是#。Is命令使用"-I”选项时,可以查看文件和目录的详细信息,文件(目录)列表的第一列字段信息是权限属性信息,此信息中的第一位(左数)标志位是" d”表示目录,“-”表示普通文件。 —在核里不能访问非法的存地址,也不要引用空指针。挂载设备到文件系统的命令是 mount,从文件系统中卸载设备命令是 umounto二选择下面选项中哪个不是 Linux系统的主要部分(D)核B.ShellC.文件系统D.Bash以下关于Linux系统描述错误的是(B)A.支持动态加载核模块 B.核区分线程和其他进程C.核可以抢占D. 支持对称多处理机制以下核开发特点描述错误的是(C)A.核编程时不能访问C库B.必须使用GNUCC.核有一个较大的定长堆栈 D.很难使用浮点数touch命令的作用是(A)A.新建文件B.新建目录C.查看文件类型D.文件移动或文件重命名下面的命令中哪个不是显示文件容的命令 (D)catB.lessC.moreD.file删除文件命令rm与(C)选项配合使用可以完整的删除整个目录,无需事先删除目录中的容。-lB.-tC.-rD.-alinux 命令行中,“.”表示(A)A.当前目录B.上一级目录 C.根目录D.宿主目录更改文件权限命令是 chmod,基本格式是chmod[ugoa][+-=][rwx]FILE..., 其中"ugoa”表示权限设置针对的用户类别, “o”表示的是(C)oA.文件属主B. 文件属组C.除属主和属组之外的其他用户 D.所有用户用户口令保存在(B)文件中。passwdB.shadowC.groupD.skel列目录命令ls与“-c”选项搭配使用表示(B)A.显示所有文件及目录 B.按列输出,纵向排序C.按列输出,横向排序D.根据文件建立时间的先后次序列出判断TOC\o"1-5"\h\zLinux系统的应用主要涉及4个方面:应用服务器、嵌入式领域、软件开发以及桌面应用 (对)Linux系统具有开放性,多用户和多任务的优点, 缺点是没有提供良好的用户界面。 (错)Shell是Linux操作系统的核心。(错)Unix核是一个不可分割的静态可执行块 ,即是单一核,而Linux不是单一核。(错)Linux的模块化设计,抢占式核带有微核的影子。 (对)Linux不提供具有设备类的面向对象设备模型,热插拔事件以及用户空间的设备文件系统 (错)Linux是一个可移植性的操作系统。 (对)Linux系统在核中的存都不分页,故需要关注物理存的大小。 (对)在描述文件时,有时在文件名部分用到一些通配符, “*”表示该位置可以是一个任意的单个字符。(错)cat命令适合查看长文件。(错)名词解释单核整体上被作为一个单独的大过程实现, 并同时运行在一个单独的地址空间。 它具有简单高性能的特点,被大多数 Unix系统所采用。2•微核被划分为独立的过程,每个过程为一个服务器,各种服务器之间通过进程间通信 (IPC)机制互通消息,避免了服务器之间的失效传递, WindowsNT和MacOSX采用微核。核核是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。ShellShell是操作系统中运行的程序,与系统中的其他程序不同, Shell程序位于操作系统与用户之间,负责接受用户输入的命令, 在对已输入的命令进行解释后, 将需要执行的命令程序传递给操作系统核执行,因此 Shell程序充当了一个“命令解释器”的角色。BusyBoxBusyBox是标准Linux工具的一个单个可执行实现。BusyBox包含了一些简单的工具,还包含了一些更大、更复杂的工具,。有些人将BusyBox称为Linux工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux的许多工具和命令。第四章基于Linux平台的应用程序开发填空在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面,进入vi之后,是处于命令行模式,要切换到插入模式才能够输入文字。在vi编辑中,可以使用键盘移动光标,按数字0,移到文章的开头,按G则移动到文章的最后。使用vi编辑器的末行命令setnu可以在编辑器中显示行号, 同样在末行模式下使用 setnonu命令可以取消行号的显示。GCC的编译流程分为4个步骤,分别为:预处理,编译,汇编,。一个简单的Makefile文件包含一系列的“规则”,其中目标通常是要产生的文件的名称 _依赖是用来输入从而产生目标的文件。命令是Make执行的动作,每个命令行前面必须是一个 Tab字符。shell 变量类型,只有字符串型,变量可以被赋值,被修改,被引用。变量引用中,在变量名前加$号,代表变量容,引用一个未定义的变量,变量值为空字符串。逻辑运算中,有几个基本的语法,其中 -o表示或者(OR,二乞表示与(AND。shell 脚本文件的首行容是指定 shell环境,shell环境的设置以“#!”开始,后面为需要使用的shell程序的全路径名。选择在vi编辑环境中有3种模式状态,下面不属于这 3种模式状态的是(D)。A.命令行模式B.插入模式C.底行模式D.编辑模式在下面退出vi环境的命令中,(A)是退出的同时不对当前文件的修改进行任何保存。:q!B.:wqC.:qD.:w下面(C)选项不是从命令行模式切换到插入模式。iB.oC.ESCD.avi可以直接用键盘上的光标来上下左右移动,但正规的vi是用小写英文字母进行移动,其中h表示(A)A.向左移动光标B.向右移动光标C.向上移动光标D.向下移动光标在GCC勺常用选项中,(B)表示编译为汇编代码。-cB.-SC.-ED.-ggdb基本命令中,(B)命令表示执行一行源代码但不进入函数部。runB.nextC.fileD.stepMakefile中目标勺例子不会是( D)。可执行文件B.OBJ文件C.伪目标D.shell变量名命名中不包括(D) 。字母B.数字C.下划线D.括号创建勺shell变量,默认为(C)。A.环境变量B.全局变量C.局部变量D.静态变量test命令主要提供了判断功能,语法格式为: test-[dfrwxs]file,其中-ffile表示(B)。A.文件file存在且为目录文件B.文件file存在且为普通文件C.文件file存在且文件长度为非零 D.文件file存在且为可执行文件判断TOC\o"1-5"\h\zUnix区分大小写,Linux不区分大小写。 (错)按o进入插入模式后,是插入新勺一行,从行首开始输入文字。 (对)在vi编辑器中,x表示每按一次,删除光标所在位置的 ”前面"一个字符。(错)在编译阶段,GCC首先要检查代码的规性、 是否有语法错误等, 在检查无误后,GCC把代码翻译为汇编语言。 (对)Gdb是一款GNI开发组织并发布的UNIX/Linux下的程序调试工具,可以一行行的执行代码。(对)Makefile的基本结构是文本文件。(对)一个makefile文件中可定义多个目标,利用maketarget命令可指定要编译的目标,如果不指定目标,则使用最后一个目标。(错)shell变量定义规则,不需要事先定义,直接赋值定义新变量,直接赋值修改原变量的值。(对)命令[和命令test功能等价,区别是前者要求其最后一个命令行参数必须为右方括号。(对)大括号与括号的区别:括号括起的一组命令是在shell进程中进行,大括号括起的一组命令是在子shell中进行,括号命令执行完毕后,子shell就会终止,返回父shell。(错)简答题Linux文本编辑器有哪几类,不同分类之间的区别是什么?Linux文本编辑器有4类,分别为:行编辑器,全屏编辑器,字符界面编辑器和图形界面编辑器。(1)行编辑器是以行为单位进行编辑的文本编辑器,当编辑完成某一行的文本容并回车后,开始下一行的编辑,此时将不能任意返回文件前面的行进行编辑。(2)全屏幕编辑器能够在编辑器的屏幕上编辑文件中所有行的文本容。(3)字符界面的编辑器占用系统资源小,运行效率高,可广泛地适用于各种场合,但是字符界面编辑器存在着用户界面不够友好,操作不够简单等方面的缺点。(4)图形界面编辑器是在 Linux图形界面下运行的文本编辑程序,通常工作在X-Window图形环境中。简述GCC勺编译流程。1.预处理在该阶段,编译器分析处理源代码文件中勺各种宏指令,如#include等。2.编译在该阶段,GCC首先要检查代码的规性、是否有语法错误等,在检查无误后, GCC把代码翻译为汇编语言。汇编在该阶段,编译器把编译生成的汇编代码转成二进制目标代码。4.在该阶段,编译器把汇编阶段生成的二进制代码、程序中用到的库文件起来,生成可执行文件。3.Gdb有哪些功能,并列举常用的 Gdb基本命令。(1)Gdb是一款GNU开发组织并发布Linux下的程序调试工具。它使用户能在程序运行时观察程序的部结构和存的使用情况。以下是gdb所提供的一些功能:它使用户能监视你程序中变量的值.它使用户能设置断点以使程序在指定的代码行上停止执行 .它使用户能一行行的执行你的代码.(2)Gdb基本命令:file 装入想要调试的可执行文件.kill 终止正在调试的程序list 列出产生执行文件的源代码的一部分next执行一行源代码但不进入函数部.4.一个简单的Makefile文件包含一系列的“规则”,请描述“规则”的样式。“规则”的样式如下:目标:依赖…<tab>命令(command)目标通常是要产生的文件的名称, 目标的例子是可执行文件或 OBJ文件。目标也可是一个执行的动作名称,这样的目标通常称为伪目标。依赖是用来输入从而产生目标的文件,一个目标经常有几个依赖。命令是Make执行的动作,一个规则可以含有几个命令,每个命令占一行。Shell变量用于在Shell程序中保存系统和用户需要使用的值,Shell变量可分为4种类型,请简述这4中类型。(1)环境变量环境变量是用户登录时Linux系统为用户预先设定好的一类Shell变量。环境变量的功能是设置用户在当前Shell中的工作环境,包括用户宿主目录,命令查找路径,用户当前目录等。(2)预定义变量预定义变量是Linux系统中已经定义好的变量,用户只能使用预定义变量,而不能创建或赋值预定义变量。所有的预定义变量都由“ $”符和另一符号组成。(3)位置变量位置变量与Shell脚本程序执行时所使用的命令参数相对应,命令行中的参数按照从左到右的顺序赋值给位置变量。(4)用户自定义变量(本地变量)

用户自定义变量是Shell用户自己定义的变量,只在用户自己的Shell中有效,因此又称为本地变量六.应用题使用shell脚本编程求解1+3+5+...+99的和。#!/bin/bashsum=0i=0while[$i-le99]dosum=$((sum+i))i=$((i+2))doneecho"theanswer:$sum"使用shell脚本编程求解10!。#!/bin/bashmult=1i=1while[$i-le10]domult=$((mult*i))i=$((i+1))done,用Shell,用Shell编程,实现自动创

f4.txt四个文件分别拷贝到在根目录下有四个文件f1.txt,f2.txt,f3.txt,f4.txt建m1,m2,m3,m4四个目录,并将f1.txt,f2.txt,f3.txtm1,m2,m3,m4四个目录下。#!/bin/bashcd/root/touchf1.txtf2.txtf3.txtf4.txti=1while[$i-le4]domkdirm$icpf$I.txtm$ii=$((i+1))done编写一个名为myshell.sh的脚本,它包括以下容:包含一段注释,列出您的、脚本的名称。问候用户。

显示日期和时间。显示这个月的日历。显示您的机器名。显示当前这个操作系统的名称和版本。显示变量PATH和HOME勺值。显示磁盘使用情况。用id命令打印出您勺组ID。跟用户说“Goodbye”#!/bin/bash#namemyshell.shuser='whoami'case$userinroot)echo"helloroot";;zz)echo"hellozz";;*)echo"hello$user,welcome"esacecho"日期和时间:'date'"echo"本月勺日历:'cal'"echo"本机勺机器名:'uname-n'"echo"当前这个操作系统勺名称和版本:'uname-s;uname-r'"echo"PATH的值:$PATH"echo"HOME的值:$HOME"echo"磁盘的使用情况:'df'"echo"用id命令打印出你的组ID:'id-g'"echo"Goodbye!"设计一个Shell程序,在/userdata目录下建立50个目录,即userl〜每个目录的权限为rwxr-xrw-#!/bin/bashcd/root/dirai=1while[$i-le10]domkdir-p/root/dira/user$ichmodu=rwx/root/dira/user$ichmodg=rx/root/dira/user$ichmodo=rw/root/dira/user$ii=$((i+1))doneuser50,并设置目录里,且文设计一个shell程序,备份并压缩/etc目录的所有容,存放在/root/bak件名为如下形式yymmdd_etc,yy为年,mm为月,dduser50,并设置目录里,且文#!/bin/bashdirname='ls/root|grepbak'if[-z$dirname];thenmkdir/root/bakcd/root/bakfiyy='date+%Y'mm='date+%m'dd='date+%d'tarczvf${yy}${mm}${dd}_etc.gz/etcecho"etcbakisfinshied"编写shell程序,实现自动增加10个用户账号的功能。账号名为user1至user2,然后再将它们删除。#!/bin/bashi=1while[$i-le10]doadduseruser$ii=$((i+1))donej=1while[$j-le10]douserdeluser$jj=$((j+1))done有如下含有3个目标体的makefile文件:test:kang.oyul.ogcckang.oyul.o-otestkang.o:kang.ckang.hgcc-Wall-O-g-ckang.c-okang.oyul.o:yul.cyul.hgcc-Wall-O-g-cyul.c-oyul.o为了简化编写,请将上述文件使用自动变量替换实现。并且根据makefile的隐含规则,将其在简化。OBJS=kang.oyul.oCC=gccCFLAGS=-Wall-O-gtest:$(OBJS)$(CC)$A-o$kang.o:kang.ckang.h$(CC)$(CFLAGS)-c$<-o$yul.o:yul.cyul.h$(CC)$(CFLAGS)-c$<-o$根据隐含规则,上述makefile文件可以写成:OBJS=kang.oyul.oCC=gccCFLAGS=-Wall-O-gtest:$(OBJS)$(CC)$A-o$用vi在同一目录下已经编辑了两个简单的 hello程序,分别为hello.c和hello.h,请先在同一目录下用vi编辑makefile,用一个目标体实现;然后再将其使用变量替换实现。用vi编辑makefile:hello:hello.chello.hgcchello.c-ohello用vi打开makefile,用变量进行替换:OBJS:=hello.oCC:=gcchello:$(OBJS)$(CC)$a-o$用vi在同一目录下已经编辑了两个简单的 test程序,分别为test.c和test.h,请先在同一目录下用vi编辑makefile,用两个目标体实现;然后再将其使用变量替换实现。用vi编辑makefile:hello:hello.ogcchello.o-ohellohello.o:hello.chello.hgcc-chello.c-ohello.o用vi打开makefile,用变量进行替换:OBJS1:=hello.oOBJS2:=hello.chello.hCC:=gcchello:$(OBJS1)$(CC)$a-o$$(OBJS1):$(OBJS2)$(CC) -c$<-o$第五章核初始化填空为桌面计算机加电后,BIOS软件系统会立即接管对系统处理器的控制,该软件系统都是保存在闪存里面的,以便对该软件系统进行必要的升级工作。在嵌入式系统中,当系统加电后,目标板所带的引导装入程序将立即接管系统处理器的控制权。Linux 需要一个文件系统,文件系统包含了预先定义的一组系统目录树以及文件,它们都保存到硬盘驱动器或者其他媒介之中, Linux核将其挂载为根文件系统。当Linux核完成所有部初始化工作并且挂载了根文件系统之后,默认将启动名为 Init的应用程序,这就意味着系统将运行在用户空间或者用户空间上下文中。第二阶段引导装入程序的主要作用是充当开发板级的引导装入程序和核之间的纽带。核入口点head.o模块需要针对核主体进行体系结构级或 CPU级的初始化。Linux核的所有启动任务都由核 C源程序main.c完成,通过初始化,核的第一个线程将挂载一个根文件系统,同时会执行用户空间下的第一个应用程序。引导装入程序或第二阶段引导装入程序通过一系列被称为核命令行的参数实现对 Linux的引导,尽管在实际中并不是通过 shell命令提示来调用核,但是引导装入程序常常采用将参数传递给Linux核这种模式。许多Linux子系统的初始化代码都可在 main.c中找到,一些子系统所采用的初始化机制与_setup宏非常类似,简单地讲,目标代码器会为不同的初始化程序创建函数指针列表,同时采用简单的循环机制依次执行。在引导过程中运行着两个截然不同的线程:一个是 start_kernel();另一个就是init() 。选择引导装入程序在系统加电之后需要完成几项比较重要的任务,下面选项中错误的是( D)A.初始化关键硬件组件B.初始系统化存C.分配系统资源 D. 将必要的启动信息传递到硬盘在Linux中,根据指定线程的运行环境,我们可以把它分为两个独立的运行上下文,当线程完全运行在核空间时,我们称之为( A)。A.核上下文 B.用户空间上下文C.进程上下文D.特殊的上下文(B)对处理器和必要的存区域进行初始化,解压缩二进制核映像并且在转交对系统的控制权之前把它加载到系统存的合适位置。A.引导装入程序B.第二阶段引导装入程序 C.操作系统D.Linux核第二阶段引导装入程序具有一些功能,下列选项中不属于其功能的是( D)。A.处理器底层的初始化 B. 解压缩和重定位代码C.其他特定于处理器的初始化 D.加载操作系统在初始化任务中,head.o模块所执行的功能中不包括( D)。A.检测处理器及整个体系结构的合法性 B.创建初始化页表目录C.支持处理器的存管理单元 D. 错误检测但并不生成相应报告在已经创建了init() 线程并且对所有不同的初始化调用完成之后,核开始执行引导过程最后阶段的容,这些容不包括(D)。A.释放由初始化函数和数据所用的存资源 B.打开系统的控制台设备C.启动用户空间下的第一个进程 D. 解压缩和重定位代码Linux核的所有启动任务都由(A)完成,通过初始化,核的第一个线程将挂载一个根文件系统,同时会执行用户空间下的第一个应用程序。main.cB.start_kernel()C.init()D.initcall核命令行参数的形式不可以是( C)。单个单词B.key=value1,value2,…复合形式C.字符串D.key=value(A) 是用户空间中所有Linux进程的父进程init()B.start_kernel()C.idleD.initcall在本质上,二进制核映像 Image要依附于一个执行底层硬件初始化任务的工具( B)。A.引导装入程序 B.第二阶段引导装入程序C.Linux核D.BIOS判断引导装入程序在系统加电之后会加载操作系统,并将系统控制权交给操作系统。 (T)在一套典型的嵌入式系统中,其核心是一个 32位的CISC(复杂指令集计算机)。(F)在Linux启动运行的最初阶段,必须要做的一项工作,就是要配置好处理器的存管理单元并初始化与之配套的数据结构,以支持虚拟地址到物理地址的转换。(T)当用户在Linux命令提示符下输入ls,就产生一个进程,核将为这个进程分配存储器资源,并且会分配一段虚拟地址空间。被分配的地址空间与核中的地址有固定的关系。(F)在系统加电后,嵌入式系统的引导装入程序首先取得处理器的控制权,在引导装入程序执行了一些基本的硬件初始化之后,控制权就交给Linux核。(T)体系结构和引导装入程序都必须配置合适的上下文并提供必要的工具才能加载和引导核。(F)引导装入程序在有些特殊情况下会依赖核。(F)对于大多数体系结构来说,对系统的控制权会由第二阶段引导装入程序直接传递给严格意义上的核,即传递给名为head.o的模块。(T)核的head.o模块最后会将系统控制权移交给核的主要启动文件。(T)init()在完成自身的任务之后最终成为idle进程。(F)五.简答题简述引导装入程序和第二阶段引导装入程序的区别。引导装入程序和第二阶段引导装入程序的区别引导装入程序在开发板加电之后取得控制权,而且它在任何情况下都不会依赖核;而第二阶段引导装入程序的主要作用是充当开发板级的引导装入程序和核之间的纽带。正是第二阶段引导装入程序为核运行提供了合适的上下文,同时也执行了一些必要的操作,如解压并且重新部署二进制核映像。简述核初始化过程。核的初始化过程从start_kernel()函数开始,直至第一个用户进程init结束:start_kernel()函数:相当于核整个初始化工作的 man函数,完成核的大部分初始化工作;(2)reset_init()函数:后续初始化,由start_kernel()函数调用;(3)kernel_init()函数:完成设备驱动程序的初始化,并调用init_post()函数启动用户空间中的init进程;(4)init_psot()函数:启动用户空间中的init进程,init标准位置在/sbin/init,init进程读取/etc/inittab文件来触发诸如接受用户登录,设置键盘,网络等这些进程。引导装入程序在系统加电之后需要完成哪些任务?初始化关键硬件组件,例如 SDRAM控制器,I/O控制器以及图形控制器;出事系统化存,并且准备将系统控制权移交给相应的操作系统;分配系统资源,例如存以及外设控制器的终端电路等;提供相应的机制,用于定位和加载操作系统的映像;加载操作系统,并将系统控制权交给操作系统,将必要的启动信息,例如系统全部存块的数量,尺寸,串行通信端口的速度以及其他底层硬件配置数据等,传递给操作系统。为什么调试者不能像调试普通代码那样来对核入口点(head.o)模块的各个部分进行调试?当第二阶段引导装入程序将控制权交给核的head.o模块时,处理器在过去称为实模式的情况下操作。事实上,逻辑地址包含在处理器的程序计数器(或与其相关的寄存器)中,该逻辑地址实际上是由处理器的存储器地址总线引脚送出的实际物理地址。 处理器的寄存器和核的数据结构很快就会初始化从而可以支持存的数据传输, 同时,处理器的存管理单元会被打开,这将会突然导致处理器所识别的地址空间被用户指定的虚拟地址列表所取代。 简单地讲,一旦启动存管理单元的功能,那么实际的物理地址就会被逻辑地址所取代。简述核入口点(head.o)模块诉执行的功能。在低级别的初始化任务中,head.o模块所执行的功能如下所示:检测处理器及整个体系结构的合法性;创建初始化页表目录;支持处理器的存管理单元( MMU);进行错误检测并且生成相应报告;跳转到严格意义上的核的起始处main.c。六.应用题在嵌入式linux系统引导阶段会在终端上打印如下信息:Kernelcommandline:console=ttyS0,1152000ip=bootproot/dev/nfs,试解释以上打印出的信息。以上打印信息表示引导中的核在串行设备ttyS0(通常是第一个串口)上打开一个控制台,通信波特率设定为115Kbit/s。此外,它还通过一个BOOTF服艮务器获取自身的初始化 IP地址,并通过NFS协议挂在根文件系统。核初始化中对于核命令行处理,init.h下的_setup宏扩展如下:staticchar__setup_str_console_setup[]__initdata="console=";staticstructobs_kernel_param__setup_console_setup\__attribute__((__section__(".init.setup")))={__setup_str_console_setup,console_setup,0};试分析该代码。首先,编译器会产生名为__setup_str_console_setup[]的初始化后字符数组,该数组包含console=字符串信息;其次,编译器会产生一个包含三个成员的结构:指向核命令行字符串(在字符数组中声明)的指针__setup_str_console_setup 、指向配置函数本身的指针console_setup和一个简单的标识。这里的关键在于依附于结构的段属性, 该属性会通知编译器将该结构送到 ELF目标模块名为.init.setup的特殊段中。在这个阶段,所有由__setup宏定义的结构一起被放置到这个.init.setup段中,实际结果就是创建了一个包含这些结构的数组。读下列核程序externstructobs_kernel_param__setup_start[],__setup_end[];staticint__initobsolete_checksetup(char*line){structobs_kernel_param*p;p=__setup_start;do{intn=strlen(p->str);if(!strncmp(line,p->str,n)){if(p->early){/*Alreadydoneisparse_early_param?(Needsexactmatchonparampart)*/

if(line[n]=='\O'||line[n]=='=')return1; }elseif(!p->setup_func){printk(KERN_WARNING"Parameter %s isobsolete,%nored\n",p->str);return1;}elseif(p->setup_func(line+n))return1; }p++;}while(p<__setup_end);return0;}①解释第一行extern语句的作用;②描述obsolete_checksetup 函数功能。③解释函数形参line的作用;④说明函数中两个局部变量的含义。④ 解释dowhile循环的作用。⑤画出dowhile循环程序段的流程图。若该函数的传的字符串值为 line=”console=ttyS0,115200 ”,试分析该核命令行处理功能执行的过程。该程序通过指针p对这个特殊的核命令行参数寻找匹配信息的过程,对整个结构都进行了扫描,若传值如题设所说,该程序要为字符串信息console寻找匹配信息,在这个相关结构中,函数返回一个指向console_setup() 函数的指针,它会以该参数(字符串ttyS0,115200)作为其唯一的参数,这一处理过程会在核命令行处理完毕之前不停重复。1.试解释以下合成核映像文件的结构。可启动內核取像首先会先编译二进制ELF格式的(严格意义上的核),vmlinux核映像在这里被链head.o、head.o、piggy.o以及和特疋体系结构有关的head-xscale.o。(2) 用编译好的vmlinux文件生成Image目标文件。Image文件基本上是去除了多余段(标记和注释)的vmlinuxELF文件,同时也去掉了可能已经存在的调试符号。(3) 采用命令压缩Image文件(二进制核映像文件),执行该命令会生成一个名为 piggy.gz的压缩文件,它只是二进制核文件 Image的压缩版本。(4) 将一个名为piggy.S的汇编文件汇编,该文件包括对压缩文件 piggy.gz的说明,最终生成可启动核映像,其中 piggy.o为二进制核映像, msic.o、big_endian.o 、head_xscale.o、head.o为第二阶段引导装入程序,该第二阶段引导装入程序会对处理器和必要的存区域进行初始化,解压缩二进制核映像并且在转交对系统的控制权之前把它加载到系统存的合适位置。第六章嵌入式交叉编译环境的搭建填空交叉编译是指在某个主机平台上 (比如PC上)用交叉编译器编译出可在其他平台上 (比如ARM上)运行的代码的过程。宿主机(Host)是一台通用计算机,它通过串口或者以太网接口与目标机通信。交叉编译环境的搭建中 minicom是用于Linux下的串口通信工具,DNV是用于串口下载文件镜像的工具。核映像分为压缩的核映像和未压缩的核映像。 其中,压缩的核映像通常名为 zlmage,而未压缩的核映像通常名为 vmlinux。N竺服务就是将宿主机的一个目录通过网络可以被挂载到其他计算机上,并且作为其他计算机的一个目录。 —Cramfs文件系统是一种经过压缩的、极为简单的只读文件系统,因此非常适合嵌入式系 统。被称为嵌入式 Linux系统中的“瑞士军刀”的构造文件系统最常用的软件工具包是Busybox,它将许多常用的Linux命令和工具结合到了一个单独的可执行程序中。TFTP协议是简单的文件传输协议,适合目标板 Bootloader的使用。Bootloader就是在操作系统核运行之前运行的一段程序, 它类似于PC机中的BIOS程序。Linux核代码中init/main.c 文件是整个Linux核的中央联结点。每种体系结构都会执行一些底层设置函数,然后执行名为startkernel 的函数来启动Linux核。选择TOC\o"1-5"\h\z嵌入式Linux下常用的文件系统不包括以下哪一项( A)nfsB.romfsC.yaffsD.jffs被称为嵌入式Linux系统中的“瑞士军刀”的构造文件系统最常用软件工具包是( D)A.GDBB.SHELLC.GNUD.BusyBox用GCC编译一个名为“HelloWorld.c”的C程序文件,编译后执行执行文件为 “Hello”,则相应的编译命令是以下哪一项( B)A.gcc-iHelloWorld.cHelloB.gcc -oHellohelloWorld.cC.gcc-oHelloWorld.cHelloD.gcc -iHelloHelloWorld.c对Linux核选用默认的配置方式进行编译,需要执行( D)A.makeconfigB.makemenuconfigC.makeoldconfigD.makedefcofing将本机/home/myworkspace下的NFS文件系统挂载到/mnt/remote下的命令为以下哪一项(B)mount —tnfs/mnt/remote/home/myworkspacemount —fnfs/home/myworkspace/mnt/remoteumount—tnfs/mnt/remote/home/myworkspaceumount—fnfs/home/myworkspace/mnt/remote通过tftp加载地址为0x200000上的镜像文件uImage,需要执行(A)tftpboot200000uImagetftpbootuImage200000tifpboot--adr200000uImagetftpboot--adruImage200000在使用bushbox工具时Linux启动之后第一个被访问的脚本文件是( B)A.init.dB.inittabC.fstabD.boottab下列那一项不属于Linux核要挂接NFS根文件系统所必须具备的条件( D)A.以太网接口驱动正常B.配置核启动命令行参数配置核挂接NFS根文件系统D.配置Bootloader下列哪一项不属于U-Boot的功能(C)A.系统引导B.上电自检功能C.镜像自检D.设备驱动下列那一项不属于U-Boot移植的步骤(A)A.动态glibc库B.建立自己开发版类型C.修改中断静止部分D.修改存配置判断在嵌入式中,由于资源受限的原因, 它的文件系统和PC机Linux的文件系统有较大的区别,总体架构是也一样的。(F)NFS文件系统的使用分为服务端和客户端,其中服务端提供要共享的文件同时通过挂载(“mount”)这一动作来实现对共享文件的访问操作。 (F)glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必功能服务的实现。(T)交叉平台使用的工具链必须经过正确的配置,以便与主机系统的目标Linux环境相匹配。(T)TFTP是用来下载远程文件的最简单网络协议,它是基于 TCP协议而实现的。(F)在编译linux2.6版本的核通常直接输入“makedep”即可。(F)Linux核完成初始化之后,必须挂载一个根文件系统,并执行由开发人员定义的一系列初始化例程。(T)Linux 核可以标准C函数库,例如核代码可以方便调用 printf()来打印系统输出。(F)GNU的C编译器支持联函数,因此可以将联函数直接编译到核当中。 (T)IP地址和其他网络相BOOTP和TFTPIP地址和其他网络相关配置信息的一种协议。(F)五.简答题构建根文件系统基本步骤。构建etc目录;

(2) 构建dev目录;(3) 构建其他目录;如:homeprocvar(4) 制作/烧录文件系统镜像。简述U-Boot的特点。开放源码,支持多种嵌入式操作系统核,支持多个处理器系列,较高的可靠性和稳定性,高度灵活的功能设置,丰富的设备驱动源码,较为丰富的开发调试文档与强大的网络技术支持。对Linux下NFS服务器进行的配置,包括服务器端和客户端配置。 (假设服务器端)Server端:/etc/exports 格式例:共享/share目录给192.168.0.x的用户/share/24(rw)启动portmap服务:serviceportmapstart[restart]启动NFS服务:servicenfsstart[restart]Client端:socket_type=dgram/*使用数据报套接字socket_type=dgram/*使用数据报套接字*/protocol=udp/*wait=yes/*user=root/*protocol=udp/*wait=yes/*user=root/*使用UDP协议*/允许等待*/用户*/server=server=/usr/sbin/in.tftpd/*server_args=-s/tftpboot/*disable=no/*服务程序*/服务器端的根目录*/使能*/1) 启动portmap服务:serviceportmapstart[restart]2)挂载服务器端的共享目录 (假设服务器端) :mount-tnfs:/share/mnt/localshare4.Linux在启动过程中可以使用哪些方法初始化以太网/IP接口。方法一:在Linux核命令行或默认配置里面直接指定固定的以太网接口参数。方法二:配置核,以便启动时自动检测网络设置。5.请简述Linux下tftp服务的配置。1.首先修改tftp的配置文件,配置完后保存。[rootlocalhosttftpboot]#vim/etc/xinetd.d/tftpservicetftpper_source=11cps=1002flags=IPv4}启用tftp服务。[rootlocalhosttftpboot]#servicexinetdrestart3.查看tftp服务是否已经开启。rootlocalhosttftpboot]#netstat —au|greptftp试简述核启动init进程的过程。init进程位于init/main.c,核启动init进程的过程如下:(1)打开标准输入,标准输出,标准错误设备。(2)如果ramdisk_execute_command变量指定了要运行的程序,则启动它。(3)如果execute_command变量指定了要运行的程序,启动它。(4)依次尝试执行/sbin/init,/etc/init,/bin/init,/bin/sh。请简述Linux核编译的步骤。核配置建立依赖关系建立核六.应用题以下是一个简单的rcSBusyBox启动脚本,试分析脚本执行过程,注释每一行程序,在空行写上其后紧跟着程序段的总体功能。#!/bin/shecho"Mountingproc"mount-tproc/proc/proc在其自身保留的/proc挂载点处挂载/proc文件,/proc文件系统可以提供需要实用程序的相关信息。echo"Startingsystemloggers"syslogdklogd为发现系统的启动问题,尽早启动系统日志。echo"Configuringloopbackinterface"ifconfiglo配置回环网络接口echo"Staringinetd"xinetd启动系统因特网超级守护进程,用于监听任何经过配置的网络接口设备的网络请求。试安装配置busybox并创建一个简单的文件系统。(安装包为busybox-1.00.tar.bz2)安装配置busybox:tarjxvfbusybox-1.00.tar.bz2makedefconfig/*首先进行默认配置*/makemenuconfigmakemakeinstallPREFIX=/home/david/fs2410/cramfs创建文件系统mkdirmntrootvartmpprocbootetclib 创建系统目录mkdir/var/{lock,log,mail,run,spool}创建/etc/inittab 和/etc/fstab文件并放在etc目录下。试用minicom在开发板和主机之间传输文件。①写出minicom的安装过程;②写出minicom的配置过程,③以/home/test/vmlinuz为例,具体传输命令。1)下载并安装lrzsz传输工具配置minincom打开minicom,配置环境。配置文件所在目录Ctrl+ao选择”Filenamesandpaths”选项进入子菜单A-Downloaddirectory:/tmp配置下载文件的存放位置B-Uploaddirectory:/home/liming/tmpTrans配置从此目录读取上传文件a)首先minicom中,运行开发板子上的rz,准备接受数据:#lrz在minicom中,输入[Ctrl]aS这里的Send表示从pc发送到开发板子,然后进入选择文件的目录,选择 PC机器上面准备传输的文件,然后确认即可。试配置S3C2410的开发板的U-boot,并分析U-boot配置过程。配置S3C2410的开发板的U-boot#makes3c2410_config#make即可生成U-Boot.binmakeS3C2410_config实际上是执行如下命令:./configsmdk2410armarm920tamdk2410NULLs3c24x0a)确定开发板名称BOARD_NAME=smdk2410b创建到平台/开发板相关的头文件创建顶层Makefile包含的文件include/config.mk创建开发板相关的头文件 include/config.h第七章设备驱动和模块填空Linux系统中常见的驱动程序是作为核模块动态加载的, 而Linux最基础的驱动,如CPUPCI总线等驱动程序则直接编译在核文件中。Linux命令Insmod和modprobe用于加载当前模块。Linux系统的设备分为三类:字符设备 、块设备和网络设备。copy_to_user()或copy_from_user()等函数是用来实现用户空间和核空间的数据交换的。/proc 文件系统是一个伪文件系统,存在于存之中而不是在硬盘上,它是一种核和核模块用来向进程发送信息的机制。使用设备驱动程序有两个重要的原因:一是避免用户在核空间编写代码,二是为与硬件 _或核级设备通信提供统一的方法。系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数。Linux抽象了对硬件的处理,所有的硬件设备都可以作为 普通文件一样来看待,字符设备和块设备是通过文件节点访问的。公共核符号表中包含了所有的全局核项(即函数和变量)的地址,这是实现模块化驱 程序所必需的。Linux运转在两种模式下,一种是用户态,另一种是核态。 选择

下列关于字符设备说法不正确的是(C)A.以字节为单位逐个进行I/O操作字符设备中的缓存是可有可无的支持随机访问字符设备可以通过设备文件节点访问如果要从系统中删除一个设备,则要调用( A)函数。A.cdev_del()B.cdev_add()C.cdev_alloc()D.cdev_init()释放设备跟关闭设备的区别是(B)释放设备时,其他进程必须重新打开此关闭设备时,其他进程必须重新打开此释放设备时,其他进程必须重新打开此关闭设备时,其他进程必须重新打开此释放设备时,其他进程必须重新打开此释放设备时,其他进程还能继续使用该设备;设备才能使用它。关闭设备时,其他进程还能暂停使用该设备;设备才能使用它。新打开此设备才能使用它。获取存函数malloc()和kmalloc(),下面说确的是(B)kmalloc()函数返回的是线性虚拟地址,而malloc()等返回的是物理地址。kmalloc()函数返回的是物理地址,而malloc()等返回的是线性虚拟地址。kmalloc()和malloc()函数返回的都是物理地址。kmalloc()和malloc()函数返回的都是线性虚拟地址。如果设备驱动程序有多个程序文件,分别编译成.o文件后,需成一个驱动模块,则以下命令正确的是(A)ld-rfile1.ofile2.o-omodulenameld-ofile1.ofile2.o-rmodulenameld-rfile1.ofile2.omodulenameld-ofile1.ofile2.omodulename不需要编译核的情况是( D)A.删除系统不用的设备驱动程序时B.升级核时C.添加新硬件时D.将网卡激活以下(D)设备是字符设备。A.hdcB.fd0C.hda1D.tty1以下是运行$ls-l/dev后的查询结果crw-rw 1rootuucp4,6408-3022:58ttyS0则此设备的设备号是多少(C)A.1B.4C.64D.0以下哪一项是是硬盘设备文件( B)A.fd0B.hdaC.eth1D.ht0下面关于inode节点描述错误的是(A)inode节点和文件是一一对应的inode节点能描述文件占用的块数inode节点描述了文件大小和指向数据块的指针通过inode节点实现文件的逻辑结构和物理结构的转换判断核空间地址和用户空间地址是有很大区别的,其中一个区别是用户空间的存是可以被换出的,因此可能会出现页面失效等情况。(T)与字符设备驱动程序的编写流程不同的是块设备驱动程序的编写流程包括了注册和使用两部分。(F)对块设备的读写请求都是以同步方式发送到设备相关的request队列之中。(F)在驱动程序中不能使用malloc()函数。(T)block_device_operations结构块设备提供read()、write()等函数接口对块设备进行读写操作。(F)中断实现了硬件设备按需获得处理器关注的机制,与查询方式相比可以大大节省 CPU资源的开销。(T)中断机制提供了硬件和软件之间异步传递信息的方式。(T)大多数的Linux操作系统设备驱动程序都可以在需要时装载进核,在不需要时从核中卸载。(T)Linux用dev_t类型来描述设备号,dev_t是32位数值类型,其中高12位表示次设备号,低20位表示主设备号。(F)Linux中的中断处理程序通常会标记为static,它可以被别的文件中的代码直接调用。(F五.简答题试简述通常情况下打开设备过程中open函数接口中要完成的工作。递增计数器,检查错误;如果未初始化,则进行初始化;识别次设备号,如果必要,更新f_op指针;分配并填写被置于filp->private_data的数据结构。试简述释放设备的步骤。释放设备时要完成的工作如下:⑴递减计数器MOD_DEC_USE_CO(最新版本已经不再使用);释放打开设备时系统所分配的存空间(包括filp->private_data指向的存空间);在最后一次释放设备操作时关闭设备。试简述设备驱动程序工作原理。设备驱动模块在调用insmod命令时被加载,此时的入口点是init_module()函数,通常在该函数中完成设备的注册。同样,模块在调用rmmod命令时被卸载,此时的入口点是cleanup_module()函数,在该函数中完成设备的卸载。在设备完成注册加载之后,用户的应用程序就可以对该设备进行一定的操作,如open()、read()、write()等,而驱动程序就是用于实现这些操作,在用户应用程序调用相应入口函数时执行相关的操作。请简述Linux系统的设备分类。1、字符设备通常像普通文件或字节流一样,以字节为单位顺序读写的设备。字符设备可以通过设备文件节点访问,大多数字符设备只能提供顺序访问。2、 块设备通常指一些需要以块为单位随机读写的设备。块设备也是通过文件节点来访问,它不仅可以提供随机访问,而且可以容纳文件系统。3、 网络设备通常是指通过网络能够与其他主机进行数据通信的设备。请列举设备驱动程序主要组成。1、早期版本的字符设备注册;2、 设备号相关函数;3、 最新版本的字符设备注册;4、 打开设备;5、释放设备;6、读写设备;7、 Ioctl;8、获取存;9、打印信息。六.应用题试编写一个helloworld可加载设备驱动程序。解:程序如下hellowolrd.c#include<linux/module.h>staticint__inithello_init(void){printk("HelloworldExampleInit\n");return0;}staticint__exithello_exit(void){printk("HelloWorldExampleExit\n");}module_init(hello_init);module_exit(hello_exit);读下面程序#include<linux/module.h>staticintdebug_enable=0;module_param(debug_enable,int,0);MODULE_PARM_DESC(debug_enable,"Enablemoduledebugmode.");staticint__inithello_init(void){printf("HelloExampleInit-debugmodeis%s\n",debug_enable?"enable":"disabled");return0;}staticint__exithello_exit(void){printf("HelloExampleExit\n");}module_i

温馨提示

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

最新文档

评论

0/150

提交评论