嵌入式操作系统试题集61374

更新时间:2024-02-01 03:18:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第一章 嵌入式系统概论

一.填空

1. 嵌入式系统是以____为目的、以_____基础的计算机系统。

2. 计算机系统按应用可以分为______系统和_______系统。

3. 嵌入式系统按软件结构可分为嵌入式_____系统和嵌入式______系统。

4. 嵌入式系统按是否具有实时性能可分为嵌入式______系统和嵌入式_______系统。

5. 嵌入式实时系统除具有嵌入式系统的基本特征外,还具______和______的重要特点。

6. 嵌入式系统的硬件架构是以______为中心,由______,I/O设备,通信模块以及电源等必 要的辅助接口组成。

7. 嵌入式系统的软件通常固态化存储在______、_______或NVRAM中。

8. 嵌入式系统的开发由于受到______限制,通常采用______环境。

9. 嵌入式系统开发采用的交叉开发环境是由_____和______组成的。

10. 嵌入式系统的设计是使用一组________和_____来完成所需功能的过程。

解答:

1. 嵌入式应用;计算机技术

2. 通用计算机; 嵌入式计算机

3. 单线程;事件驱动

4. 非实时;实时

5. 实时性;可靠性

6. 嵌入式处理器;存储器

7. ROM;FLASH

8. 系统资源开销的;交叉开发

9. 宿主机;目标机

10. 物理硬件;软件

二.选择

1. 以下哪一项不属于嵌入式操作系统() A.VxWorks B. WinCE C. BSD D. uClinux

2. 以下关于嵌入式系统说法正确的是 () A.以开发为中心 B 对实时,成本,功耗要求严格

C.软硬件协同 D 软件可剪裁

3. 以下关于嵌入式系统说法正确的是 ()

A.嵌入的系统中可以共存多个嵌入式系统 B.对高性能要求严格 C.软硬件缺乏协同 D.不要求实时性

4. 对响应时间有严格要求的嵌入式系统是()

A.嵌入式实时系统 B.嵌入式多线程系统 C.嵌入式多内核系统 D.嵌入式轮转询问系统

5. 以下哪一项属于嵌入式系统不具备的特点() A.采用专用处理器 B. 跨平台可移植 C.软硬件协同一体化 D.小型化与有限资源

6. 嵌入式系统硬件的核心是 () A.存储器 B.嵌入式微处理器

C.嵌入式微控制器 D.BSP

7. 嵌入式系统的软件部分不包括() A.DSP B.嵌入式操作系统 C.设备驱动程序 D.应用程序

8. 对性能要求高的嵌入式系统是() A.嵌入式实时系统 B.嵌入式多线程系统

C.嵌入式多内核系统 D.嵌入式轮转询问系统

9. 嵌入式应用软件的开发阶段不包括() A.交叉编译和链接 B.开发环境的建立

C.联机调试 D.应用程序模块加载

10. 为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都保存在()

A.存储器芯片 B.磁盘 C.cache D.CDROM

解答: 1. C

2. A 3. A 4. A 5. B 6. B 7. A 8. C 9. D 10. A

三.判断 解答:

四.名词解释

解答:

五.简答题

1. 给出嵌入式系统的一般定义和基本特征。

2. 嵌入式实时系统相对其它嵌入式系统具有哪些不同的特点?任意列举两种为实现嵌入式 实时系统所采用的措施。

3. 请列举两种嵌入式系统开发的方法。

4. 请简述嵌入式系统的特点。

5. 请列举ARM处理器支持的运行模式。

解答:

1. 定义:嵌入式系统(Embedded System)是以应用为中心、以计算机技术为基础、软件硬 件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

基本特征:

(1)专用性: 采用专用的嵌入式处理器,功能算法的专用性; (2)小型化与有限资源: 资源约束和空间约束与专用性;

(3)系统软硬件设计的协同一体化:硬件与软件的协同设计和应用软件与操作系统的一体

化设计开发。

2. 嵌入式实时系统除具有嵌入式系统的基本特征外,还具有实时性和可靠性的重要特点。 为实现以上实时性能的要求,嵌入式系统一般采用如下方式: (1)采用高速硬件。如高速处理器、高速A/D、D/A等; (2)利用嵌入式处理器提供的中断功能;

(3)需要嵌入式实时操作系统(RTOS)的支持; (4)应用程序代码量小、执行速度快。

3. 目前,嵌入式系统的开发有模拟开发调试、嵌入式在线仿真和远程调试等几种方法。

4. 1、面向特定应用的特点。

2、嵌入式系统的硬件和软件都必须进行高效地设计。

3、嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相

结合的产物。 4、为了提高执行素的和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片中或

单片机本身,而不是存储于磁盘中。 5、嵌入式开发的软件代码尤其要求高质量,高可靠性。

6、嵌入式系统本身不具备二次开发能力,必须有一套开发工具和环境才能进行再次开发。

5. 1、用户模式 2、快速中断模式 3、外部中断模式

4、管理模式

5、数据访问终止模式

6、系统模式

六.应用题

解答:

第二章. 嵌入式处理器基础

一.填空

1. ARM嵌入式系统主要由______,相关支撑硬件和 _______ 组成。

2. ARM 微处理器的特点包括:______,低成本和______。

3. ARM 处理器共有37个寄存器,包括31个_____和6个 _____。

4. ARM微处理器支持两种指令集:_____和 ______。

5. ARM体系结构采用的特征有:________,________,3地址指令格式。

6. ARM体系结构可用两种方法存储字数据,具体为______和______。

7. ARM微处理器中,______下的寄存器集是ARM状态下寄存器集的一个______。

8. ARM微处理器的工作模式中,系统模式并不是通过_____进入的,它和_____模式具有完全

一样的寄存器。

9. ARM处理器工作状态主要有____,睡眠,____ 。

10. 常用的嵌入式外围设备有______,通信设备,______。

解答:

1. 嵌入式处理器;嵌入式软件系统

2. 低功耗;高性能

3. 通用寄存器;状态寄存器

4. ARM指令集;Thumb指令集

5. Load/Store 体系结构;固定的32位指令

6. 大端模式;小端模式

7. Thumb状态;子集

8. 异常; 用户

9. 运行;空闲

10. 存储设备;显示设备

二.选择

1. 以下哪一项不属于嵌入式处理器的特点() A.对实时多任务支持能力强 B.功耗低

C.处理器结构不易扩展 D.存储保护能力强

2. 以下哪一项不属于嵌入式处理器()

A.PowerPC B.pentium C.ARM D.MIPS

3. 在指令系统的各种寻址方式中,获取操作数最快的方式是() A.直接寻址 B. 立即寻址 C. 寄存器寻址 D. 间接寻址

4. ARM微处理器的寄存器在Thumb状态与ARM状态下相同的是() A.R8-R12 B.R15和CPSR C.R13-R14 D.R0-R7

5. ARM 指令系统采用()指令 A.单地址 B.双地址 C.三地址 D.四地址

6. ARM3级流水线下取第一条指令前程序计数器为PC,则取第三条指令为()

7. 以下哪一项不属于ARM内核的功能模块()

A.支持16位压缩指令集Thumb B.支持片上Debug

C.媒体功能扩展SIMD D.嵌入式ICE,支持片上断点和调试 A PC+3 B PC+6 C PC+8 D PC+12

8. ARM寄存器组中除了以下哪组寄存器以外所有处理器模式下都可以访问() A.SPSR B.R0-R7 C.CPSR D.R8-R9

9. ARM异常处理中,软件中断处理程序执行()指令可以从SWI模式返回,无论是在ARM状态

还是Thumb状态。 A.MOVS PC , R14_svc B.MOVEQ PC,R14_svc C.MOVS PC, R14_und D.MOVEQ PC, R14_und

10. 以下哪一项不属于ARM异常中断() A.复位 B.IRQ C.条件转移 D.数据终止

解答: 1. C 2. B 3. B 4. D 5. C 6. D 7. C 8. A 9. A

10. C

三.判断

1. FIQ异常是为了支持数据传输或者中断处理而设计的。 ( )

2. ARM指令为32位的长度,Thumb指令为16位长度。 ( )

3. ARM微处理器采用RISC指令集,使用大量的寄存器。( )

4. 所有的ARM指令都可根据前面的执行结果决定是否被执行,从而提高指令的执行效率。( )

5. ARM微处理器的存储器格式必须按对齐规则对存储单元进行访问。( )

6. ARM微处理器通用寄存器R14~R0、程序计数器PC、一个或两个状态寄存器都是可访问的 。( )

7. ARM状态下的寄存器组织分为三类:分组寄存器,程序寄存器,状态寄存器。( )

8. R13在Thumb指令中常用作堆栈指针,但这只是一种习惯用法,用户也可使用其他的寄存

器作为堆栈指针。( )

9. ARM微处理器中状态寄存器的低8位称为控制位,发生异常时这些位可以被改变,但当处

理器运行特权模式,这些位不可以改变。( )

10. ARM微处理器可用加载/存储指令批量传输数据,以提高数据的传输效率。( ) 解答: 1. 错

2. 对 3. 对 4. 对 5. 错

6. 对

7. 错

8. 错 9. 错 10. 对

四.名词解释 1. 单机处理器

2. ARM架构

3. 超标量体系结构

4. DSP微处理器

5. 嵌入式片上系统

解答:

1. 所谓单机处理器是指那些专门用于处理功能的处理器芯片,相对于集成化处理器,单机 处理器需要一些外围电路支持才能够实现其基本功能。

2. 进阶精简指令集机器,是一个32位精简指令集(RISC) 中央处理器架构,ARM处理器体

系结构由ARM公司开发并拥有知识产权。

3. 能够在一个时钟周期执行多个指令,在超标量体系结构设计中,处理器或指令编译器判 断指令能独立于其它顺序指令执行,还是依赖于另一指令,必须跟其按顺序执行,然后处理 器使用多个执行单元同时执行两个或更多独立指令。

4. 是一种独特的微处理器,是以数字信号来处理大量信息的器件。其工作原理是接收模拟 信号,转换为0或1的数字信号。再对数字信号进行修改、删除、强化,并在其他系统芯片中

把数字数据解译回模拟数据或实际环境格式。

5. 单个芯片上集成一个完整的系统,对所有或部分必要的电子电路进行包分组的技术。完 整的系统一般包括中央处理器,存储器以及外围电路等。随着电子数据交换的推广和VLSI设

计的普及化,以及半导体工艺的迅速发展,在一个硅片上可以实现一个更为复杂的系统。

五.简答题

1. 当出现异常时,ARM微处理器会执行哪几步操作?

2. 请简述ARM微处理器两种工作状态集的切换操作及方法。

3. 请简述ARM微处理器的用户模式和特权模式,以及用户模式向特权模式的转换。

4. ARM微处理器的运行模式有有哪几种,请列举并说明。

5. 如何进行嵌入式处理器的选型?

6. 嵌入式处理器通常划分为哪四大类型?试列举出来。

7. 试简述Thumb技术。

解答:

1. (1)将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确 的位置重新开始执行。若异常是从ARM状态进入,则LR寄存器中保存的是下一条指令的地址(

当前PC+4或PC+8,与异常的类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存

当前PC的偏移量,这样,异常处理程序就不需要确定异常是从何种状态进入的。例如:在软

件中断异常SWI,指令 MOV PC,R14_svc总是返回到下一条指令,不管SWI是在ARM状态执行,

还是在Thumb状态执行; (2)将CPSR复制到相应的SPSR中;

(3)根据异常类型,强制设置CPSR的运行模式位;

(4)强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理

程处。

2. ARM指令集和Thumb指令集均有切换处理器状态的指令,并可在两种工作状态之间切换:

(1) 在开始执行代码时,处于ARM状态;

(2) 当操作数寄存器的状态位(位0)为1时,可以采用执行BX指令的方法,使微

处理

器从ARM状态切换到Thumb状态;

(3) 当处理器处于Thumb状态时发生异常(如IRQ、FIQ、Undef、Abort、SWI等),则

异常处理返回时,自动切换到Thumb状态;

(4) 当操作数寄存器的状态位为0时,执行BX指令(状态跳转)时可以使微处理器从Th

umb状态切换到ARM状态。 在处理器进行异常处理时,把PC指针放入异常模式链接寄存器中,并从异常向量地址开

始执行程序,也可以使处理器切换到ARM状态。

3. (1)除了用户模式之外的其他6种处理器模式称为特权模式.特权模式下,程序可以访问所 有的系统资源,也可以任意地进行处理器模式的切换。 (2)特权模式中,除系统模式外,其他5种模式又称为异常模式。大多数的用户程序运行

在用户模式下,此时,应用程序不能够访问一些受操作系统保护的系统资源,应用程序也不 能直接进行处理器模式的切换。 (3)用户模式下,当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处

理中进行处理器模式的切换。

4. ARM微处理器的运行模式有7种,分别为:

(1)用户模式(User,usr):正常程序执行时,ARM处理器所处的状态。 (2)快速中断模式(FIQ,fiq):用于快速数据传输和通道处理。 (3)外部中断模式(IRQ,irq):用于通常的中断处理。

(4)特权模式(Supervisor,sve):供操作系统使用的一种保护模式。 (5)数据访问中止模式(Abort,abt):当数据或指令预取终止时进入该模式,用于虚

拟存储及存储保护。 (6)未定义指令终止模式(Undefined,und):用于支持硬件协处理器软件仿真。 (7)系统模式(System,sys):用于运行特权级的操作系统任务。

5. ARM微处理器选型时应注意:

1.ARM微处理器内核的选择 2.系统的工作频率

3.芯片内存储器的容量 4、片内外围电路的选择

6. 嵌入式处理器通常分为四大类:嵌入式微处理器(MPU)、嵌入式微控制器(MCU)、嵌入式DS

P处理器(DSP)、嵌入式片上系统(SOC)。

7. Thumb是ARM体系结构的扩展,它有从标准32位ARM指令集抽出来的36条指令格式,可重新

编制成16位的操作码。Thumb指令的宽度只有ARM指令宽度的一半,在运行时,这些16位的Thu

mb指令又由处理器压成32为的ARM指令。Thumb不仅仅是另一个混合指令集的概念,因为支持

Thumb的核有2套独立的指令集,它使设计者得到ARM32位指令性能的同时,又能享有Thumb指

令集产生的代码方面的优势,可在性能和代码大小之间取得平衡。

六.应用题

解答:

第三章Linux体系结构(内核)和BusyBOX

一.填空

1. Linux最重要的特点是____,Linux内核遵循GNU____条款,意味着Linux是自由软件。

2. Shell是操作系统中运行的程序,位于操作系统_____与_____之间,充当了一个“命令解 释器”的角色。

3. LINUX支持_____线程以及_____内核模块。

4. ______是系统的用户界面,______是文件存放在磁盘等存储设备上的组织方法。

5. Linux让所有任务都运行在_____,直接调用函数,无须消息传递,避免了_____机制的开 销。

6. 由于内核支持异步终端、抢占和SMP,因此必须时刻注意_____和_____。

7. 命令提示符分为普通用户和管理员用户两种,普通用户的命令提示符使用_____,管理员 用户的命令提示符是_____。

8. ls命令使用“-l”选项时,可以查看文件和目录的详细信息,文件(目录)列表的第一 列字段信息是权限属性信息,此信息中的第一位(左数)标志位是“d”表示____,“-”表 示____。

9. 在内核里不能访问非法的_____地址,也不要引用____指针。

10. 挂载设备到文件系统的命令是_____,从文件系统中卸载设备命令是_____。

解答: 1. 开源;GPL

2. 内核;用户

3. 内核;动态装载

4. Shell;文件系统

5. 内核态;进程间通信(IPC)

6. 同步;并发 7. $;#

8. 目录;普通文件

9. 内存;空

10. mount;umount

二.选择

1. 下面选项中哪个不是Linux系统的主要部分()

A.内核 B.Shell C.文件系统 D.Bash

2. 以下关于Linux系统描述错误的是() A.支持动态加载内核模块 B.内核区分线程和其他进程

3. 以下内核开发特点描述错误的是()

A.内核编程时不能访问C库 B.必须使用GNU C C.内核有一个较大的定长堆栈 D.很难使用浮点数 C.内核可以抢占 D.支持对称多处理机制

4. touch命令的作用是()

A.新建文件 B.新建目录 C.查看文件类型 D.文件移动或文件重命名

5. 下面的命令中哪个不是显示文件内容的命令()

A.cat B.less C.more D.file

6. 删除文件命令rm 与()选项配合使用可以完整的删除整个目录,无需事先删除目录中的

内容。 A.-l B.-t C.-r D.-a

7. linux命令行中,“.”表示()

A.当前目录 B.上一级目录 C.根目录 D.宿主目录

8. 更改文件权限命令是chmod,基本格式是chmod [ugoa][+-=][rwx]FILE...,其中“ugoa” 表示权限设置针对的用户类别,“o”表示的是()。 A. 文件属主 B. 文件属组

C. 除属主和属组之外的其他用户 D. 所有用户

9. 用户口令保存在()文件中。 A.passwd B.shadow C.group D.skel

10. 列目录命令ls与“-c”选项搭配使用表示() A.显示所有文件及目录 B.按列输出,纵向排序

C.按列输出,横向排序 D.根据文件建立时间的先后次序列出

解答: 1. D

2. B 3. C 4. A 5. D 6. C 7. A 8. C 9. B 10. B

三.判断

1. Linux系统的应用主要涉及4个方面:应用服务器、嵌入式领域、软件开发以及桌面应用 。

2. Linux系统具有开放性,多用户和多任务的优点,缺点是没有提供良好的用户界面。( )

3. Shell是Linux操作系统的核心。( )

4. Unix内核是一个不可分割的静态可执行块,即是单一内核,而Linux不是单一内核。( )

5. Linux的模块化设计,抢占式内核带有微内核的影子。( )

6. Linux不提供具有设备类的面向对象设备模型,热插拔事件以及用户空间的设备文件系统 。( )

7. Linux是一个可移植性的操作系统。( )

8. Linux系统在内核中的内存都不分页,故需要关注物理内存的大小。( )

9. 在描述文件时,有时在文件名部分用到一些通配符,“*” 表示该位置可以是一个任意 的单个字符 。( )

10. cat命令适合查看长文件。( )

解答: 1. 对

2. 错

3. 错 4. 错 5. 对 6. 错 7. 对

8. 对

9. 错

10. 错

四.名词解释 1. 单内核

2. 微内核

3. 内核

4. Shell

5. BusyBox

解答:

1. 整体上被作为一个单独的大过程实现,并同时运行在一个单独的地址空间。它具有简单 高性能的特点,被大多数Unix系统所采用。

2. 被划分为独立的过程,每个过程为一个服务器,各种服务器之间通过进程间通信(IPC) 机制互通消息,避免了服务器之间的失效传递,Windows NT和Mac OS X采用微内核。

3. 内核是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个 计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。

4. Shell是操作系统中运行的程序,与系统中的其他程序不同,Shell程序位于操作系统与 用户之间,负责接受用户输入的命令,在对已输入的命令进行解释后,将需要执行的命令程 序传递给操作系统内核执行,因此Shell程序充当了一个“命令解释器”的角色。

5. BusyBox是标准 Linux 工具的一个单个可执行实现。BusyBox 包含了一些简单的工具, 还包含了一些更大、更复杂的工具,。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。 简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令。

五.简答题 解答:

六.应用题

解答:

第四章 基于Linux平台的应用程序开发 一.填空

1. 在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面,进入vi之后,是处于_

______模式,要切换到______模式才能够输入文字。

2. 在vi编辑中,可以使用键盘移动光标,按数字___,移到文章的开头,按___则移动到文 章的最后。

3. 使用vi编辑器的末行命令_____可以在编辑器中显示行号,同样在末行模式下使用_____ 命令可以取消行号的显示。

4. GCC的编译流程分为4个步骤,分别为:____ ,编译,____ ,链接。

5. 一个简单的Makefile文件包含一系列的“规则”,其中____通常是要产生的文件的名称_ ___是用来输入从而产生目标的文件。

6. ____是Make执行的动作,每个命令行前面必须是一个____字符。

7. shell变量类型,只有_____,变量可以被赋值,被修改,_____。

8. 变量引用中,在变量名前加$号,代表_____,引用一个未定义的变量,变量值为_____ 。

9. 逻辑运算中,有几个基本的语法,其中-o表示____,____表示与(AND)。

10. shell脚本文件的首行内容是指定shell环境,shell环境的设置以_____开始,后面为需 要使用的shell程序的_____名。

解答:

1. 命令行;插入

2. 0;G

3. set nu;set nonu

4. 预处理; 汇编

5. 目标;依赖

6. 命令;Tab

7. 字符串型;被引用

8. 变量内容;空字符串

9. 或者(OR);-a

10. “#!”;全路径

二.选择

1. 在vi编辑环境中有3种模式状态,下面不属于这3种模式状态的是()。

A. 命令行模式 B. 插入模式 C. 底行模式 D.编辑模式

2. 在下面退出vi环境的命令中,()是退出的同时不对当前文件的修改进行任何保存。

A. :q! B. :wq C. :q D. :w

3. 下面()选项不是从命令行模式切换到插入模式。 A. i B. o C. ESC D. a

4. vi可以直接用键盘上的光标来上下左右移动,但正规的vi是用小写英文字母进行移动, 其中h表示() A. 向左移动光标 B. 向右移动光标 C. 向上移动光标 D.向下移动光标

5. 在GCC的常用选项中,()表示编译为汇编代码。 A. –c B. –S C. –E D.-g

6. gdb基本命令中,()命令表示执行一行源代码但不进入函数内部。

A. run B. next C. file D. step

7. Makefile中目标的例子不会是()。 A. 可执行文件 B. OBJ文件 C. 伪目标 D. 链接

8. shell变量名命名中不包括()。 A. 字母 B. 数字 C. 下划线 D.括号

9. 创建的shell变量,默认为()。

A. 环境变量 B. 全局变量 C. 局部变量 D. 静态变量

10. test命令主要提供了判断功能,语法格式为:test –[dfrwxs]file,其中-f file表示

()。

A. 文件file存在且为目录文件 B. 文件file存在且为普通文件 C. 文件file存在且文件长度为非零 D. 文件file存在且为可执行文件

解答: 1. D 2. A 3. C 4. A 5. B 6. B 7. D 8. D 9. C

10. B

三.判断

1. Unix区分大小写,Linux不区分大小写。( )

2. 按o进入插入模式后,是插入新的一行,从行首开始输入文字。( )

3. 在vi编辑器中,x表示每按一次,删除光标所在位置的\前面\一个字符。( )

4. 在编译阶段,GCC首先要检查代码的规范性、是否有语法错误等,在检查无误后,GCC把

代码翻译为汇编语言。( )

5. Gdb是一款GNU开发组织并发布的UNIX/Linux下的程序调试工具,可以一行行的执行代码。 ( )

6. Makefile的基本结构是文本文件。( )

7. 一个 makefile 文件中可定义多个目标,利用 make target 命令可指定要编译的目标, 如果不指定目标,则使用最后一个目标。( )

8. shell变量定义规则,不需要事先定义,直接赋值定义新变量,直接赋值修改原变量的值。 ( )

9. 命令[和命令test功能等价,区别是前者要求其最后一个命令行参数必须为右方括号。( )

10. 大括号与括号的区别:括号括起的一组命令是在shell进程中进行,大括号括起的一组命 令是在子shell中进行,括号内命令执行完毕后,子shell就会终止,返回父shell。( ) 解答: 1. 错 2. 对 3. 错 4. 对

5. 对

6. 对

7. 错

8. 对

9. 对

10. 错

四.名词解释 解答:

五.简答题

1. Linux文本编辑器有哪几类,不同分类之间的区别是什么?

2. 简述GCC的编译流程。

3. Gdb有哪些功能,并列举常用的Gdb基本命令。

4. 一个简单的Makefile文件包含一系列的“规则”,请描述“规则”的样式。

5. Shell变量用于在Shell程序中保存系统和用户需要使用的值,Shell变量可分为4种类型 ,请简述这4中类型。

解答:

1. Linux文本编辑器有4类,分别为:行编辑器,全屏编辑器,字符界面编辑器和图形界面 编辑器。 (1) 行编辑器是以行为单位进行编辑的文本编辑器,当编辑完成某一行的文本内容并 回车后,开始下一行的编辑,此时将不能任意返回文件前面的行进行编辑。

(2) 全屏幕编辑器能够在编辑器的屏幕上编辑文件中所有行的文本内容。

(3) 字符界面的编辑器占用系统资源小,运行效率高,可广泛地适用于各种场合,但

是字符界面编辑器存在着用户界面不够友好,操作不够简单等方面的缺点。 (4) 图形界面编辑器是在Linux图形界面下运行的文本编辑程序,通常工作在X-Window 图形环境中。

2. 1.预处理 在该阶段,编译器分析处理源代码文件中的各种宏指令,如#include等。

2.编译

在该阶段,GCC首先要检查代码的规范性、是否有语法错误等,在检查无误后,GCC把

码翻译为汇编语言。 3. 汇编

在该阶段,编译器把编译生成的汇编代码转成二进制目标代码。 4. 链接

在该阶段,编译器把汇编阶段生成的二进制代码、程序中用到的库文件链接起来,生成 可执行文件。

3. (1)Gdb是一款GNU开发组织并发布Linux下的程序调试工具。它使用户能在程序运行时

观察程序的内部结构和内存的使用情况。以下是 gdb 所提供的一些功能:

1.它使用户能监视你程序中变量的值.

2.它使用户能设置断点以使程序在指定的代码行上停止执行. 3.它使用户能一行行的执行你的代码. (2)Gdb基本命令:

file装入想要调试的可执行文件. kill终止正在调试的程序

list列出产生执行文件的源代码的一部分. next 执行一行源代码但不进入函数内部.

4. “规则”的样式如下:

目标:依赖?命令(command) 目标通常是要产生的文件的名称,目标的例子是可执行文件或OBJ文件。目标也可是一

执行的动作名称,这样的目标通常称为伪目标。

依赖是用来输入从而产生目标的文件,一个目标经常有几个依赖。

命令是Make执行的动作,一个规则可以含有几个命令,每个命令占一行。

5. (1)环境变量

环境变量是用户登录时Linux系统为用户预先设定好的一类Shell变量。环境变量的功能

是设置用户在当前Shell中的工作环境,包括用户宿主目录,命令查找路径,用户当前目录等

。 (2)预定义变量

预定义变量是Linux系统中已经定义好的变量,用户只能使用预定义变量,而不能创建或

赋值预定义变量。所有的预定义变量都由“$”符和另一符号组成。

(3)位置变量

位置变量与Shell脚本程序执行时所使用的命令参数相对应,命令行中的参数按照从左

右的顺序赋值给位置变量。

(4)用户自定义变量(本地变量)

用户自定义变量是Shell用户自己定义的变量,只在用户自己的Shell中有效,因此又称

为本地变量

六.应用题

1. 使用shell脚本编程求解1+3+5+...+99的和。

2. 使用shell脚本编程求解10!。

3. 在根目录下有四个文件f1.txt,f2.txt,f3.txt,f4.txt,用Shell编程,实现自动创建 m1,m2,m3,m4四个目录,并将f1.txt,f2.txt,f3.txt,f4.txt四个文件分别拷贝到m1,m2,m 3,m4四个目录下。

4. 编写一个名为myshell.sh的脚本,它包括以下内容: 1) 包含一段注释,列出您的姓名、脚本的名称。 2) 问候用户。

3) 显示日期和时间。 4) 显示这个月的日历。

5) 显示您的机器名。

6) 显示当前这个操作系统的名称和版本。 7) 显示变量PATH和HOME的值。 8) 显示磁盘使用情况。 9) 用id命令打印出您的组ID。 10) 跟用户说“Good bye”

5. 设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个 目录的权限为 rwxr-xrw-

6. 设计一个shell程序,备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文 件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。

7. 编写shell程序,实现自动增加10个用户账号的功能。账号名为user1至user2,然后再将 它们删除。

8. 有如下含有3个目标体的makefile文件:

test: kang.o yul.o

gcc kang .o yul.o -o test

kang.o: kang.c kang.h

gcc -Wall -O -g -c kang.c -o kang.o yul.o: yul.c yul.h

gcc -Wall -O -g -c yul.c -o yul.o

为了简化编写,请将上述文件使用自动变量替换实现。并且根据makefile的隐含规则,

将其在简化。

9. 用vi在同一目录下已经编辑了两个简单的hello程序,分别为hello.c和hello.h,请先在 同一目录下用vi编辑makefile,用一个目标体实现;然后再将其使用变量替换实现。

10. 用vi在同一目录下已经编辑了两个简单的test程序,分别为test.c和test.h,请先在同 一目录下用vi编辑makefile,用两个目标体实现;然后再将其使用变量替换实现。

解答:

1. #!/bin/bash sum=0 i=0 while [ $i -le 99 ]

do

sum=$((sum+i)) i=$((i+2)) done

echo \

2. #!/bin/bash

mult=1 i=1

while [ $i -le 10 ] do

mult=$((mult*i)) i=$((i+1)) done

echo \

3. #!/bin/bash cd /root/ touch f1.txt f2.txt f3.txt f4.txt

i=1

while [ $i -le 4 ] do

mkdir m$i cp f$I.txt m$i i=$((i+1)) done

4. #!/bin/bash

#name myshell.sh user=`whoami` case $user in root)

echo \zz)

echo \

*)

echo \esac

echo \日期和时间: `date`\echo \本月的日历: `cal`\

echo \本机的机器名:`uname -n`\

echo \当前这个操作系统的名称和版本:`uname -s;uname -r`\echo \的值:$PATH\echo \的值:$HOME\

echo \磁盘的使用情况:`df`\

echo \用id命令打印出你的组ID:`id -g`\

echo \

5. #!/bin/bash

cd /root/dira i=1

while [ $i -le 10 ] do

mkdir -p /root/dira/user$i

chmod u=rwx /root/dira/user$i chmod g=rx /root/dira/user$i chmod o=rw /root/dira/user$i i=$((i+1)) done

6. #!/bin/bash dirname=`ls /root|grep bak ` if [-z $dirname ]; then

mkdir /root/bak cd /root/bak fi

yy=`date + %Y` mm=`date + %m`

dd=`date + %d`

tar czvf ${yy}${mm}${dd}_etc.gz /etc echo \

7. #!/bin/bash

i=1

while [ $i –le 10] do adduser user$i i=$((i+1)) done j=1

while [ $j–le 10] do userdel user$j j=$((j+1)) done

8. OBJS = kang.o yul.o CC = gcc CFLAGS = -Wall -O –g test: $(OBJS)

9. 用vi编辑makefile: hello:hello.c hello.h

gcc hello.c –o hello

用vi打开makefile,用变量进行替换: OBJS :=hello.o CC :=gcc hello:$(OBJS) $(CC) $^ -o $@

kang.o:kang.c kang.h

$(CC) $(CFLAGS) –c $< -o $@ yul.o:yul.c yul.h

$(CC) $(CFLAGS) –c $< -o $@

根据隐含规则,上述makefile文件可以写成: OBJS = kang.o yul.o CC = gcc

CFLAGS = -Wall -O –g test: $(OBJS) $(CC) $^ -o $@

$(CC) $^ -o $@

10. 用vi编辑makefile: hello:hello.o gcc hello.o –o hello

hello.o:hello.c hello.h gcc –c hello.c –o hello.o

用vi打开makefile,用变量进行替换: OBJS1 :=hello.o OBJS2 :=hello.c hello.h CC :=gcc

hello:$(OBJS1) $(CC) $^ -o $@ $(OBJS1): $(OBJS2) $(CC) –c $< -o $@

第五章 内核初始化

一.填空

1. 为桌面计算机加电后,_____软件系统会立即接管对系统处理器的控制,该软件系统都是 保存在_____里面的,以便对该软件系统进行必要的升级工作。

2. 在嵌入式系统中,当系统加电后,_____所带的引导装入程序将立即接管_____的控制权 。

3. Linux需要一个文件系统,文件系统包含了预先定义的一组______以及文件,它们都保存 到硬盘驱动器或者其他媒介之中,Linux内核将其挂载为______。

4. 当Linux内核完成所有内部初始化工作并且挂载了根文件系统之后,默认将启动名为____ _的应用程序,这就意味着系统将运行在_____或者用户空间上下文中。

5. 第二阶段引导装入程序的主要作用是充当开发板级的_____和_____之间的纽带。

6. 内核入口点 head.o模块需要针对内核主体进行_____级或_____级的初始化。

7. Linux内核的所有启动任务都由内核C源程序_____完成,通过初始化,内核的第一个线程 将挂载一个_____,同时会执行用户空间下的第一个应用程序。

8. 引导装入程序或第二阶段引导装入程序通过一系列被称为______的参数实现对Linux的引

导,尽管在实际中并不是通过shell命令提示来调用内核,但是引导装入程序常常采用将参数

传递给_______这种模式。

9. 许多Linux子系统的初始化代码都可在main.c中找到,一些子系统所采用的初始化机制与

__setup宏非常类似,简单地讲,______会为不同的初始化程序创建______,同时采用简单 的循环机制依次执行。

10. 在引导过程中运行着两个截然不同的线程:一个是_____;另一个就是_____。

解答:

1. BIOS;闪存

2. 目标板 系统处理器

3. 系统目录树;根文件系统

4. Init;用户空间

5. 引导装入程序;内核

6. 体系结构;CPU

7. main.c;根文件系统

8. 内核命令行;Linux内核

9. 目标代码链接器;函数指针列表

10. start_kernel();init()

二.选择

1. 引导装入程序在系统加电之后需要完成几项比较重要的任务,下面选项中错误的是() A.初始化关键硬件组件 B. 初始系统化内存 C. 分配系统资源 D. 将必要的启动信息传递到硬盘

2. 在Linux中,根据指定线程的运行环境,我们可以把它分为两个独立的运行上下文,当线 程完全运行在内核空间时,我们称之为()。 A. 内核上下文 B.用户空间上下文 C.进程上下文 D.特殊的上下文

3. ()对处理器和必要的内存区域进行初始化,解压缩二进制内核映像并且在转交对系统 的控制权之前把它加载到系统内存的合适位置。

A. 引导装入程序 B. 第二阶段引导装入程序 C. 操作系统 D. Linux内核

4. 第二阶段引导装入程序具有一些功能,下列选项中不属于其功能的是()。 A. 处理器底层的初始化 B. 解压缩和重定位代码

C. 其他特定于处理器的初始化 D. 加载操作系统

5. 在初始化任务中,head.o模块所执行的功能中不包括()。

A. 检测处理器及整个体系结构的合法性 B. 创建初始化页表目录 C. 支持处理器的内存管理单元 D. 错误检测但并不生成相应报告

6. 在已经创建了init()线程并且对所有不同的初始化调用完成之后,内核开始执行引导过 程最后阶段的内容,这些内容不包括()。 A. 释放由初始化函数和数据所用的内存资源 B. 打开系统的控制台设备

C. 启动用户空间下的第一个进程 D. 解压缩和重定位代码

7. Linux内核的所有启动任务都由(A)完成,通过初始化,内核的第一个线程将挂载一个根 文件系统,同时会执行用户空间下的第一个应用程序。

A. main.c B. start_kernel() C. init() D. initcall

8. 内核命令行参数的形式不可以是()。

A. 单个单词 B. key=value1,value2,?复合形式 C. 字符串 D. key=value

9. ()是用户空间中所有Linux进程的父进程 A. init() B. start_kernel() C. idle D. initcall

10. 在本质上,二进制内核映像Image要依附于一个执行底层硬件初始化任务的工具()。 A.引导装入程序 B. 第二阶段引导装入程序 C.Linux内核 D. BIOS

解答: 1. D 2. A 3. B 4. D 5. D 6. D 7. A 8. C 9. A

10. B

三.判断

1. 引导装入程序在系统加电之后会加载操作系统,并将系统控制权交给操作系统。( )

2. 在一套典型的嵌入式系统中,其核心是一个32位的CISC(复杂指令集计算机)。( )

3. 在Linux启动运行的最初阶段,必须要做的一项工作,就是要配置好处理器的内存管理单 元并初始化与之配套的数据结构,以支持虚拟地址到物理地址的转换。( )

4. 当用户在Linux命令提示符下输入ls,就产生一个进程,内核将为这个进程分配存储器资 源,并且会分配一段虚拟地址空间。被分配的地址空间与内核中的地址有固定的关系。( )

5. 在系统加电后,嵌入式系统的引导装入程序首先取得处理器的控制权,在引导装入程序执 行了一些基本的硬件初始化之后,控制权就交给Linux内核。( )

6. 体系结构和引导装入程序都必须配置合适的上下文并提供必要的工具才能加载和引导内 核。( )

7. 引导装入程序在有些特殊情况下会依赖内核。( )

8. 对于大多数体系结构来说,对系统的控制权会由第二阶段引导装入程序直接传递给严格 意义上的内核,即传递给名为head.o的模块。( )

9. 内核的head.o模块最后会将系统控制权移交给内核的主要启动文件。( )

10. init()在完成自身的任务之后最终成为idle进程。( ) 解答: 1. 对 2. 错 3. 对 4. 错 5. 对

6. 错

7. 错

8. 对

9. 对

10. 错

四.名词解释 解答:

五.简答题

1. 简述引导装入程序和第二阶段引导装入程序的区别。

2. 简述内核初始化过程。

3. 引导装入程序在系统加电之后需要完成哪些任务?

4. 为什么调试者不能像调试普通代码那样来对内核入口点(head.o)模块的各个部分进行 调试?

5. 简述内核入口点(head.o)模块诉执行的功能。

解答:

1. 引导装入程序和第二阶段引导装入程序的区别引导装入程序在开发板加电之后取得控制 权,而且它在任何情况下都不会依赖内核;而第二阶段引导装入程序的主要作用是充当开发 板级的引导装入程序和内核之间的纽带。正是第二阶段引导装入程序为内核运行提供了合适 的上下文,同时也执行了一些必要的操作,如解压并且重新部署二进制内核映像。

2. 内核的初始化过程从start_kernel()函数开始,直至第一个用户进程init结束:

(1)start_kernel()函数:相当于内核整个初始化工作的man函数,完成内核的大部分 初始化工作;

(2)reset_init()函数:后续初始化,由start_kernel()函数调用; (3)kernel_init()函数:完成设备驱动程序的初始化,并调用init_post()函数启动用 户空间中的init进程;

(4)init_psot()函数:启动用户空间中的init进程,init标准位置在/sbin/init,ini t进程读取/etc/inittab文件来触发诸如接受用户登录,设置键盘,网络等这些进程。

3. 1. 初始化关键硬件组件,例如SDRAM控制器,I/O控制器以及图形控制器;

2. 出事系统化内存,并且准备将系统控制权移交给相应的操作系统; 3. 分配系统资源,例如内存以及外设控制器的终端电路等; 4. 提供相应的机制,用于定位和加载操作系统的映像;

5. 加载操作系统,并将系统控制权交给操作系统,将必要的启动信息,例如系统全部内

存块的数量,尺寸,串行通信端口的速度以及其他底层硬件配置数据等,传递给操作系统。

4. 当第二阶段引导装入程序将控制权交给内核的head.o模块时,处理器在过去称为实模式 的情况下操作。事实上,逻辑地址包含在处理器的程序计数器 (或与其相关的寄存器)中, 该逻辑地址实际上是由处理器的存储器地址总线引脚送出的实际物理地址。处理器的寄存器

和内核的数据结构很快就会初始化从而可以支持内存的数据传输,同时,处理器的内存管理 单元会被打开,这将会突然导致处理器所识别的地址空间被用户指定的虚拟地址列表所取代 。简单地讲,一旦启动内存管理单元的功能,那么实际的物理地址就会被逻辑地址所取代。

5. 在低级别的初始化任务中,head.o模块所执行的功能如下所示:

六.应用题

1. 在嵌入式linux系统引导阶段会在终端上打印如下信息: Kernel command line: console=ttyS0,1152000 ip=bootp root/dev/nfs,试解释以上 打印出的信息。

2. 内核初始化中对于内核命令行处理,init.h下的_setup宏扩展如下: static char __ setup_str_console_setup[] __initdata = \ static struct obs_kernel_param __setup_console_setup \\

__attribute__((__section__(\

{__setup_str_console_setup, console_setup, 0}; 1.检测处理器及整个体系结构的合法性; 2.创建初始化页表目录;

3.支持处理器的内存管理单元(MMU); 4.进行错误检测并且生成相应报告; 5.跳转到严格意义上的内核的起始处main.c。

试分析该代码。

3. 读下列内核程序 extern struct obs_kernel_param __setup_start[],__setup_end[];

static int __init obsolete_checksetup(char* line) {

struct obs_kernel_param *p; p=__setup_start; do{

int n=strlen(p->str); if(!strncmp(line,p->str,n)) {

if(p->early) {

/*Already done is parse_early_param? (Needs exact match on pa ram part)*/

if(line[n]=='\\0'||line[n]=='=')

return 1; } else if(!p->setup_func)

{

printk(KERN_WARNING\

nored\\n\ return 1; }

else if(p->setup_func(line+n)) return 1; } p++;

}while(p<__setup_end); return 0; }

1) ①解释第一行extern语句的作用;②描述obsolete_checksetup函数功能。③ 解

释函数形参line的作用;④ 说明函数中两个局部变量的含义。④ 解释do while循环的作用

。⑤ 画出do while循环内程序段的流程图。

2) 若该函数的传的字符串值为 line=”console=ttyS0,115200”,试分析该内核命令行 处理功能执行的过程。

4. 1.试解释以下合成内核映像文件的结构。

解答:

1. 以上打印信息表示引导中的内核在串行设备ttyS0(通常是第一个串口)上打开一个控制台 ,通信波特率设定为115Kbit/s。此外,它还通过一个BOOTP服务器获取自身的初始化IP地址

,并通过NFS协议挂在根文件系统。

2. 首先,编译器会产生名为__setup_str_ console_setup[]的初始化后字符数组,该数组 包含console=字符串信息; 其次,编译器会产生一个包含三个成员的结构:指向内核命令行字符串(在字符数组中

声明)的指针__setup_str_console_setup、指向配置函数本身的指针console_setup和一个 简单的标识。 这里的关键在于依附于结构的段属性,该属性会通知编译器将该结构送到ELF目标模块内

名为.init.setup的特殊段中。

在这个链接阶段,所有由__setup宏定义的结构一起被放置到这个.init.setup段中,实 际结果就是创建了一个包含这些结构的数组。

3. 该程序通过指针p对这个特殊的内核命令行参数寻找匹配信息的过程,对整个结构都进行

了扫描,若传值如题设所说,该程序要为字符串信息console寻找匹配信息,在这个相关结构

中,函数返回一个指向console_setup()函数的指针,它会以该参数(字符串ttyS0,115200)作 为其唯一的参数,这一处理过程会在内核命令行处理完毕之前不停重复。

4. (1)首先会先编译二进制ELF格式的(严格意义上的内核),vmlinux内核映像在这里被链 接,之后,大量附加的目标模块得以处理,这些目标模块包括head.o、piggy.o 以及和特定 体系结构有关的head-xscale.o。 (2)用编译好的vmlinux文件生成Image目标文件。Image文件基本上是去除了多余段(标 记和注释)的vmlinux ELF文件,同时也去掉了可能已经存在的调试符号。 (3)采用命令压缩Image文件(二进制内核映像文件),执行该命令会生成一个名为piggy. gz的压缩文件,它只是二进制内核文件Image的压缩版本。 (4) 将一个名为piggy.S的汇编文件汇编,该文件包括对压缩文件piggy.gz的说明,最终 生成可启动内核映像,其中piggy.o为二进制内核映像,msic.o、big_endian.o 、head_xsca le.o、 head.o为第二阶段引导装入程序,该第二阶段引导装入程序会对处理器和必要的内 存区域进行初始化,解压缩二进制内核映像并且在转交对系统的控制权之前把它加载到系统 内存的合适位置。

第六章 嵌入式交叉编译环境的搭建

一.填空

1. _____是指在某个主机平台上(比如PC上)用____编译器编译出可在其他平台上(比如AR

M上)运行的代码的过程。

2. 宿主机(Host)是一台通用计算机,它通过____或者_____与目标机通信。

3. 交叉编译环境的搭建中 minicom是用于Linux 下的_______工具,DNW是用于串口下载___

____的工具。

4. 内核映像分为压缩的内核映像和未压缩的内核映像。其中,压缩的内核映像通常名为___ __ ,而未压缩的内核映像通常名为 _____。

5. ______服务就是将宿主机的一个目录通过网络可以被______到其他计算机上,并且作为 其他计算机的一个目录。

6. Cramfs文件系统是一种经过压缩的、极为简单的_____文件系统,因此非常适合 _____系 统。

7. 被称为嵌入式Linux系统中的“瑞士军刀”的构造文件系统最常用的软件工具包是______ ,它将许多常用的________结合到了一个单独的可执行程序中。

8. TFTP协议是简单的______协议,适合目标板______的使用。

9. ______就是在操作系统内核运行之前运行的一段程序,它类似于PC机中的______程序。

10. Linux 内核代码中init/main.c 文件是整个 Linux 内核的_______。每种体系结构都会 执行一些底层设置函数,然后执行名为 _______的函数来启动Linux内核。

解答:

1. 交叉编译;交叉

2. 串口;以太网接口

3. 串口通信; 文件镜像

4. zImage;vmlinux

5. NFS;挂载

6. 只读; 嵌入式

7. Busybox;Linux命令和工具

8. 文件传输;Bootloader

9. Bootloader;BIOS

10. 中央联结点;start_kernel

二.选择

1. 嵌入式Linux下常用的文件系统不包括以下哪一项()

A.nfs B.romfs C.yaffs D.jffs

2. 被称为嵌入式Linux系统中的“瑞士军刀”的构造文件系统最常用软件工具包是() A.GDB B.SHELL C.GNU D.BusyBox

3. 用GCC编译一个名为“HelloWorld.c”的C程序文件,编译后执行执行文件为“Hello”, 则相应的编译命令是以下哪一项() A.gcc –i HelloWorld.c Hello B.gcc –o Hello helloWorld.c C.gcc –o HelloWorld.c Hello D.gcc –i Hello HelloWorld.c

4. 对Linux内核选用默认的配置方式进行编译,需要执行() A.make config B.make menuconfig 一 项()

A.mount –t nfs /mnt/remote /home/myworkspace B.mount –f nfs /home/myworkspace /mnt/remote C.umount –t nfs /mnt/remote /home/myworkspace D.umount –f nfs /home/myworkspace /mnt/remote C.make oldconfig D.make defcofing

5. 将本机 /home/myworkspace下的NFS文件系统 挂载到/mnt/remote 下的命令为以下哪

6. 通过tftp 加载地址为0x200000上的镜像文件 uImage,需要执行() A.tftpboot 200000 uImage

B.tftpboot uImage 200000 C.tifpboot --adr 200000 uImage D.tftpboot --adr uImage 200000

7. 在使用bushbox 工具时Linux启动之后第一个被访问的脚本文件是() A.init.d B.inittab C.fstab D.boottab

8. 下列那一项不属于Linux 内核要挂接NFS根文件系统所必须具备的条件() A.以太网接口驱动正常 B.配置内核启动命令行参数 C.配置内核挂接NFS根文件系统 D.配置Bootloader

9. 下列哪一项不属于U-Boot的功能()

A.系统引导 B.上电自检功能 C.镜像自检 D.设备驱动

10. 下列那一项不属于U-Boot移植的步骤() A.动态链接glibc库 B.建立自己开发版类型 1. A 2. D 3. B 4. D

C.修改中断静止部分 D.修改内存配置

解答:

5. B 6. A 7. B 8. D 9. C 10. A

三.判断

1. 在嵌入式中,由于资源受限的原因,它的文件系统和PC机Linux的文件系统有较大的区别

,总体架构是也一样的。( )

2. NFS文件系统的使用分为服务端和客户端,其中服务端提供要共享的文件同时通过挂载( “mount”)这一动作来实现对共享文件的访问操作。( )

3. glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要 功能服务的实现。( )

4. 交叉平台使用的工具链必须经过正确的配置,以便与主机系统的目标Linux环境相匹配。 ( )

5. TFTP是用来下载远程文件的最简单网络协议,它是基于TCP协议而实现的。( )

6. 在编译linux2.6版本的内核通常直接输入“make dep”即可。( )

7. Linux内核完成初始化之后,必须挂载一个根文件系统,并执行由开发人员定义的一系列 初始化例程。( )

8. Linux 内核可以链接标准C函数库,例如内核代码可以方便调用printf()来打印系统输 出。( )

9. GNU的C编译器支持内联函数,因此可以将内联函数直接编译到内核当中。( )

10. BOOTP和TFTP是允许目标设备通过以太网端口从中央服务器获取IP地址和其他网络相关配

置信息的一种协议。( )

解答:

1. 错

2. 错

3. 对

4. 对

5. 错 6. 错 7. 对 8. 错 9. 对

10. 错

四.名词解释

解答:

五.简答题

1. 构建根文件系统基本步骤。

2. 简述U-Boot的特点。

3. 对Linux下NFS服务器进行的配置,包括服务器端和客户端配置。(假设服务器端192.168. 0.1)

4. Linux在启动过程中可以使用哪些方法初始化以太网/IP接口。

5. 请简述Linux下tftp服务的配置。

6. 试简述内核启动init进程的过程。

7. 请简述Linux内核编译的步骤。

解答:

1. (1)构建etc目录; (2)构建dev目录;

(3)构建其他目录;如: home proc var (4)制作/烧录文件系统镜像。

2. 开放源码,支持多种嵌入式操作系统内核,支持多个处理器系列,较高的可靠性和稳定 性,高度灵活的功能设置,丰富的设备驱动源码,较为丰富的开发调试文档与强大的网络技 术支持。

3. Server端:

1)/etc/exports格式

例:共享/share目录给192.168.0.x的用户

/share 192.168.0.0/24 (rw)

2)启动portmap服务:service portmap start[restart] 3)启动NFS服务:service nfs start[restart] Client端:

1)启动portmap服务:service portmap start[restart] 2)挂载服务器端的共享目录(假设服务器端192.168.0.1): mount -t nfs 192.168.0.1:/share /mnt/localshare

4. 方法一:在Linux内核命令行或默认配置里面直接指定固定的以太网接口参数。 方法二: 配置内核,以便启动时自动检测网络设置。

5. 1.首先修改tftp的配置文件,配置完后保存。

[root@localhost tftpboot]# vim /etc/xinetd.d/tftp service tftp

{

socket_type = dgram /* 使用数据报套接字*/ protocol = udp /* 使用UDP协议 */ wait = yes /* 允许等待 */

user = root /* 用户 */

server = /usr/sbin/in.tftpd /* 服务程序*/ server_args = -s /tftpboot /* 服务器端的根目录*/ disable = no /* 使能 */ per_source = 11 cps = 100 2 flags = IPv4 } 2. 启用tftp 服务。

[root@localhost tftpboot]# service xinetd restart 3.查看tftp 服务是否已经开启 。

root@localhost tftpboot]# netstat –au | grep tftp

6. init进程位于init/main.c,内核启动init进程的过程如下:

(1)打开标准输入,标准输出,标准错误设备。

(2)如果ramdisk_execute_command变量指定了要运行的程序,则启动它。 (3)如果execute_command变量指定了要运行的程序,启动它。 (4)依次尝试执行 /sbin/init , /etc/init , /bin/init , /bin/sh。

7. (1)内核配置 (2)建立依赖关系

(3)建立内核

六.应用题

1. 以下是一个简单的rcS BusyBox启动脚本,试分析脚本执行过程,注释每一行程序,在空 行写上其后紧跟着程序段的总体功能。

#!/bin/sh

echo \mount -t proc /proc /proc

echo \syslogd klogd

echo \ifconfig lo 127.0.0.1

echo \xinetd

2. 试安装配置busybox并创建一个简单的文件系统。(安装包为busybox-1.00.tar.bz2)

3. 试用minicom在开发板和主机之间传输文件。 ① 写出minicom的安装过程;② 写出minicom的配置过程,③ 以/home/test/vmlinuz为

例,具体传输命令。

4. 试配置S3C2410的开发板的U-boot,并分析U-boot配置过程。

解答:

1. 1)在其自身保留的/proc挂载点处挂载/proc文件,/proc文件系统可以提供需要实用程序 的相关信息。 2)为发现系统的启动问题,尽早启动系统日志。

3)配置回环网络接口

4)启动系统因特网超级守护进程,用于监听任何经过配置的网络接口设备的网络请求。

2. 1)安装配置busybox:

tar jxvf busybox-1.00.tar.bz2

make defconfig /* 首先进行默认配置 */ make menuconfig

make

make install PREFIX=/home/david/fs2410/cramfs 2)创建文件系统

mkdir mnt root var tmp proc boot etc lib 创建系统目录 mkdir /var/{lock,log,mail,run,spool}

3)创建/etc/inittab和/etc/fstab文件并放在etc目录下。

3. 1)下载并安装lrzsz传输工具 2)配置minincom a) 打开minicom,配置环境。 # lrz

b)在minicom中,输入 [Ctrl]a S

这里的Send表示从pc发送到开发板子,然后进入选择文件的目录,选择PC机器上面b) 配置文件所在目录 Ctrl+a o

选择”Filenames and paths”选项 进入子菜单

A- Download directory :/tmp 配置下载文件的存放位置

B- Upload directory :/home/liming/tmpTrans

配置从此目录读取上传文件

3) a)首先minicom中,运行开发板子上的rz,准备接受数据:

准备

传输的文件,然后确认即可。

4. (1)配置S3C2410的开发板的U-boot #make s3c2410_config #make

即可生成U-Boot.bin

(2)make S3C2410_config实际上是执行如下命令:

./config smdk2410 arm arm920t amdk2410 NULL s3c24x0

a)确定开发板名称BOARD_NAME = smdk2410 b)创建到平台/开发板相关的头文件链接 c)创建顶层Makefile包含的文件include/config.mk d) 创建开发板相关的头文件include/config.h

第七章 设备驱动和模块

一.填空

1. Linux系统中常见的驱动程序是作为_____动态加载的,而Linux最基础的驱动,如CPU、P CI总线等驱动程序则直接编译在_____中。

2. Linux命令_____和 ______用于加载当前模块。

3. Linux系统的设备分为三类:_____ 、_____和网络设备。

4. copy_to_user()或copy_from_user()等函数是用来实现_____和_____的数据交换的。

5. /proc文件系统是一个伪文件系统,存在于_____而不是在硬盘上,它是一种内核和内核 模块用来向____发送信息的机制。

6. 使用设备驱动程序有两个重要的原因:一是避免用户在______________编写代码,二是 为与______________通信提供统一的方法。

7. 系统调用通过设备文件的_______找到相应的设备驱动程序,然后读取这个数据结构相应 的______,接着把控制权交给该函数。

8. Linux抽象了对硬件的处理,所有的硬件设备都可以作为 _______一样来看待,字符设备 和块设备是通过______访问的。

9. _______中包含了所有的全局内核项(即函数和变量)的地址,这是实现_______驱动程 序所必需的。

10. Linux运转在两种模式下,一种是_____,另一种是_____。

解答:

1. 内核模块;内核文件

2. Insmod;modprobe

3. 字符设备;块设备

4. 用户空间;内核空间

5. 内存之中;进程

6. 内核空间 ;硬件或内核级设备

7. 主设备号; 函数指针

8. 普通文件;文件节点

9. 公共内核符号表;模块化

10. 用户态;内核态

二.选择

1. 下列关于字符设备说法不正确的是() A. 以字节为单位逐个进行I/O操作

B. 字符设备中的缓存是可有可无的 C. 支持随机访问

D.字符设备可以通过设备文件节点访问

2. 如果要从系统中删除一个设备,则要调用()函数。 A.cdev_del() B.cdev_add() C.cdev_alloc() D.cdev_init()

3. 释放设备跟关闭设备的区别是()

A.关闭设备时,其他进程还能继续使用该设备;释放设备时,其他进程必须重新打开此 设备才能使用它。

B.释放设备时,其他进程还能继续使用该设备;关闭设备时,其他进程必须重新打开此 设备才能使用它。

C.关闭设备时,其他进程还能暂停使用该设备;释放设备时,其他进程必须重新打开此 D.新打开此设备才能使用它。 设备才能使用它。

4. 获取内存函数malloc()和kmalloc(),下面说法正确的是()

A.kmalloc()函数返回的是线性虚拟地址,而malloc()等返回的是物理地址。 B.kmalloc()函数返回的是物理地址,而malloc()等返回的是线性虚拟地址。 C.kmalloc()和malloc()函数返回的都是物理地址。

D.kmalloc()和malloc()函数返回的都是线性虚拟地址。

5. 如果设备驱动程序有多个程序文件,分别编译成.o文件后,需链接成一个驱动模块,则以 下命令正确的是()

A.ld -r file1.o file2.o -o modulename B.ld -o file1.o file2.o -r modulename C.ld -r file1.o file2.o modulename D.ld -o file1.o file2.o modulename

6. 不需要编译内核的情况是()

A.删除系统不用的设备驱动程序时 B.升级内核时 C.添加新硬件时 D.将网卡激活

7. 以下()设备是字符设备。 A.hdc B.fd0 C.hda1 D.tty1

8. 以下是运行$ls -l /dev后的查询结果crw-rw---- 1 root uucp 4, 64 08-30 22:58 tty S0 则此设备的设备号是多少()

A.1 B.4 C.64 D.0

9. 以下哪一项是是硬盘设备文件()

A.fd0 B.hda C.eth1 D.ht0

10. 下面关于inode节点描述错误的是() A.inode节点和文件是一一对应的 B.inode节点能描述文件占用的块数

C.inode节点描述了文件大小和指向数据块的指针

D.通过inode节点实现文件的逻辑结构和物理结构的转换

解答: 1. C 2. A 3. B 4. B 5. A 6. D 7. D 8. C 9. B

10. A

三.判断

1. 内核空间地址和用户空间地址是有很大区别的,其中一个区别是用户空间的内存是可以 被换出的,因此可能会出现页面失效等情况。( )

2. 与字符设备驱动程序的编写流程不同的是块设备驱动程序的编写流程包括了注册和使用 两部分。( )

3. 对块设备的读写请求都是以同步方式发送到设备相关的request 队列之中。( )

4. 在驱动程序中不能使用malloc()函数。( )

5. block_device_operations结构块设备提供read()、write()等函数接口对块设备进行读 写操作。( )

6. 中断实现了硬件设备按需获得处理器关注的机制,与查询方式相比可以大大节省CPU资源

的开销。( )

7. 中断机制提供了硬件和软件之间异步传递信息的方式。( )

8. 大多数的Linux操作系统设备驱动程序都可以在需要时装载进内核,在不需要时从内核中 卸载。( )

9. Linux 用dev_t类型来描述设备号,dev_t是32位数值类型,其中高12位表示次设备号,低

20位表示主设备号。( )

10. Linux中的中断处理程序通常会标记为static,它可以被别的文件中的代码直接调用。( ) 解答: 1. 对

2. 错

3. 错

4. 对 5. 错 6. 对

7. 对 8. 对 9. 错

10. 错

四.名词解释 解答:

五.简答题

1. 试简述通常情况下打开设备过程中open函数接口中要完成的工作。

2. 试简述释放设备的步骤。

3. 试简述设备驱动程序工作原理。

4. 请简述Linux系统的设备分类。

5. 请列举设备驱动程序主要组成。

解答:

1. (1) 递增计数器,检查错误; (2) 如果未初始化,则进行初始化; (3) 识别次设备号,如果必要,更新f_op指针; (4) 分配并填写被置于filp->private_data的数据结构。

2. 释放设备时要完成的工作如下: ;

3. 设备驱动模块在调用insmod命令时被加载,此时的入口点是init_module()函数,通常在 该函数中完成设备的注册。同样,模块在调用rmmod命令时被卸载,此时的入口点是cleanup_

module()函数,在该函数中完成设备的卸载。在设备完成注册加载之后,用户的应用程序就 可以对该设备进行一定的操作,如open()、read()、write()等,而驱动程序就是用于实现这 些操作,在用户应用程序调用相应入口函数时执行相关的操作。

4. 1、字符设备通常像普通文件或字节流一样,以字节为单位顺序读写的设备。字符设备可 以通过设备文件节点访问,大多数字符设备只能提供顺序访问。

2、块设备通常指一些需要以块为单位随机读写的设备。块设备也是通过文件节点来访问

,它不仅可以提供随机访问,而且可以容纳文件系统。 3、网络设备通常是指通过网络能够与其他主机进行数据通信的设备。

5. 1、早期版本的字符设备注册;

2、设备号相关函数;

3、最新版本的字符设备注册; 4、打开设备; 5、释放设备; 6、读写设备; 7、Ioctl;

8、获取内存; 9、打印信息。

(3)在最后一次释放设备操作时关闭设备。

(1)递减计数器MOD_DEC_USE_COUNT(最新版本已经不再使用);

(2)释放打开设备时系统所分配的内存空间(包括filp->private_data指向的内存空间)

六.应用题

1. 试编写一个helloworld可加载设备驱动程序。

2. 读下面程序 #include

static int debug_enable=0; module_param(debug_enable,int,0);

MODULE_PARM_DESC(debug_enable,\static int __init hello_init(void)

{

printf(\debug_enable?\return 0; }

static int __exit hello_exit(void) {

printf(\}

module_init(hello_init); module_exit(hello_exit); 回答问题:

(1)该程序是哪一类程序?实现什么功能? (2)试分析在以下执行中的运行结果

a)$ insmod /lib/modules/?/hello1.ko debug_enable=1 b)$ insmod /lib/modules/?/hello1.ko

3. 根据下列字符设备工作原理图,解释字符设备工作的过程。

4. 根据下列块设备工作原理图,解释块设备工作的过程。

解答:

1. 解:程序如下

hellowolrd.c

#include static int __init hello_init(void) {

printk(\ Example Init\\n\ return 0; }

static int __exit hello_exit(void) {

printk(\ Example Exit\\n\}

module_init(hello_init); module_exit(hello_exit);

2. (1) 该程序是一个可接受参数的可加载模块设备驱动程序,实现通过设置参数来执行不 同的打印。

(2) a) 程序执行结果为:

Hello Example Init - debug mod is enable Hello Example Exit

b) 程序执行结果为:

Hello Example Init - debug mod is disabled Hello Example Exit

3. (1) 模块在调用insmod命令时被加载,此时的入口点是init_module()函数,通常在该 函数中完成设备的注册。

(2)在设备完成注册加载之后,用户的应用程序就可以对该设备进行一定的操作,如 op en()、read()、write()等,而驱动程序就是用于实现这些操作,在用户应用程序调 用相 应入口函数时执行相关的操作。

(3)模块在调用rmmod命令时被卸载,此时的入口点是cleanup_module()函数,在该函 数中完成设备的卸载。

4. (1)模块在调用insmod命令时被加载,此时的入口点是init_module()函数,通常在该 函数中完成设备的注册。

(2)在设备完成注册加载之后,用户的应用程序就可以对该设备进行一定的操作,如 op

en()、read()、write()等,而驱动程序就是用于实现这些操作,在用户应用程序调 用相 应入口函数时执行相关的操作。 (3)块设备驱动程序包括一个request请求队列。它是当内核安排一次数据传输时在列 表中的一个请求队列,以最大化系统性能为原则进行排序。当用户要调用字符设备 是会根 据请求队列分配块设备给用户使用。 (4)模块在调用rmmod命令时被卸载,此时的入口点是cleanup_module()函数,在该函 数中完成设备的卸载。

第八章 文件系统 一.填空

1. _______是特殊的数据分层存储结构,它包含文件,目录和相关的________。

2. Linux中目录只是将__________和它的_________结合在一起的一张表。

3. 通常,一个进程启动时,都会打开3个 文件:_________,___________,标准出错处理 。

4. Linux下的主要文件类型:常规文件、_________、_________、管道文件、符号文件。

5. Linux使用标准的目录结构-_________,无论操作系统管理几个磁盘分区,这样的_____ _____只有一个。

6. Linux对文件的访问设定了三级权限:___________,_____________,其他用户。

7. 硬链接有两个限制,一是不允许给______创建硬链接,二是只有在同一文件系统中的___ ____之间才能创建链接。

8. ____________作为嵌入式系统的主要存储媒介,向其写入内容时,需要先擦除对应的存 储区间,这种擦除是以_____________为单位进行的。

9. 在嵌入式Linux下,MTD(Memory Technology Device,存储技术设备)为_________和_____ _____之间提供一个统一的抽象接口。

10. 每个进程用一个___________结构来记录文件描述符的使用情况,该结构称为用户打开文

件表,它是进程的____________数据。

解答:

1. 文件系统;控制信息

2. 文件的名称;索引节点号

3. 标准输入;标准输出

4. 目录文件;设备文件

5. 树型结构;目录树

6. 文件所有者;与文件所有者同组的用户

7. 目录;文件

8. Flash(闪存);块(block)

9. 底层硬件(闪存);上层(文件系统)

10. files_struct;私有

二.选择

1. 对f1文件建立一个硬链接文件f2,下列命令正确的是()。 A.ln f2 f1 B.ln f1 f2 C.ln –s f1 f2 D.ln –s f2 f1

2. 对f1文件建立一个符号链接文件f2,下列命令正确的是()。 A.ln f2 f1 B.ln f1 f2 C.ln –s f1 f2 D.ln –s f2 f1

3. 下列哪一项不是Linux的文件系统()。 A.ext3 B.NTFS C.JFS D.ReiserFS

4. 以下文件属性-rwxr-xr-x root root 111928 2010-09-24 20:25 udevadm

的读写权限中,文件所有人所属的组是哪一项()。 A.第一项 B.第二项 C.第三项 D.以上都不是

5. 对file1 改变权限,若对文件所有者,文件所有者所在的组可以写,对其他用户可读, 则正确的命令如下()。

A.chmod a+x file1 B.chmod 766 file1 C.chmod uo+w g+r file1 D.chmod 224 file1

6. Linux文件系统的文件都按其作用分门别类地放在相关的目录中,对于外部设备文件,一 般应将其放在()目录中。

A. /bin B. /etc C. /dev D. /lib

7. 通过文件名存取文件时,文件系统内部的操作过程是通过()。 A.文件在目录中查找文件数据存取位置。

B.文件名直接找到文件的数据,进行存取操作。

C.文件名在目录中查找对应的I节点,通过I节点存取文件数据。

D.文件名在中查找对应的超级块,在超级块查找对应i节点,通过i节点存取文件数据。

8. 关于文件系统的安装和卸载,下面描述正确的是()。 A.如果光盘未经卸载,光驱是打不开的。 B.安装文件系统的安装点只能是/mnt下。 C.不管光驱中是否有光盘,系统都可以安装CD-ROM设备。

D.mount /dev/fd0 /floppy 此命令中目录/floppy是自动生成的。

9. Linux将存储设备和输入/输出设备均看做文件来操作,()不是以文件的形式出现。 A.目录 B.软链接 C. i节点表 D.网络适配器

10. 文件exer1的访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户的写权限 ,下列命令正确的是()。

A. chmod a+x g+w exer1 B. chmod 765 exer1 C. chmod o+x exer1 D. chmod g+w exer1

解答: 1. B 2. C 3. B 4. B 5. D 6. C 7. C 8. A 9. C 10. A 三.判断

1. ext3最大的缺点是,它没有现代文件系统所具有的、能提高文件数据处理速度和解压的 高性能。( )

2. Linux对管道的操作与文件操作相同,它把管道做为文件进行处理,管道文件又称栈文件 。( )

3. 从管道读数据是一次性操作,数据一旦被读,它就从管道中被抛弃,释放空间以便写更

多的数据。( )

4. 一个索引节点对象只能对应一个目录项对象。( )

5. 为了便于管理,Linux文件系统将文件索引节点号和文件名保存在不同的目录中。( )

6. 目录项用于建立与索引节点的联系,在磁盘上存储有映像。( )

7. fs_struct结构描述进程与文件系统的关系。( )

8. file结构中主要保存了文件位置,此外,还把指向该文件索引节点的指针也放在其中。f ile结构形成一个单项循环链表,称为系统打开文件表。( )

9. 目录文件只允许系统进行修改。用户进程可以读取目录文件,但不能对它们进行修改。( )

10. 虚拟文件系统所隐含的主要思想在于引入了一个通用的文件模型,这个模型能够表示所 支持的所有文件系统。( ) 解答: 1. 对

2. 错

3. 对

4. 错

5. 错 6. 错 7. 对 8. 错 9. 对

10. 对

四.名词解释 1. 文件锁

2. VFS

3. 符号链接

4. 超级块(superblock)

5. 索引节点 6. 管道 7. JFS

8. 硬链接

9. Daemon进程

10. 时间片

解答:

1. 在多任务操作系统环境中,为了避免一个进程尝试对正在被其他进程读取的文件进行写 操作,可能会导致正在进行读操作的进程读取到一些被破坏或者不完整的数据以及两个进程 并发对同一个文件进行写操作,可能会导致该文件遭到破坏而产生的文件加锁方面的技术。

2. VFS又称虚拟文件系统,它是一个异构文件系统之上的软件粘合层,通过VFS,可以为访 问文件系统的系统调用提供一个统一的抽象接口。

3. 符号链接又被称为软连接,软连接文件类似于windows的快捷方式,它实际上是一个特殊

的文件,符号链接中,文件实际上是一个文本文件,其中包含的有另一个文件的位置信息。

4. 存放系统中已安装文件系统的有关信息。对于基于磁盘的文件系统(具有I/O操作), 这类对象通常对应于存放在磁盘上的文件系统控制块(FCB),也就是说,每个文件系统都有一 个超级块对象。

5. 存放关于具体文件的一般信息。对于基于磁盘的文件系统,这类对象通常对应于存放在 磁盘上的文件控制块(FCB),也就是说,每个文件都有一个索引节点对象。每个索引节点对象都 有一个索引节点号,这个号唯一地标识某个文件系统中的指定文件。

6. 管道是进程间传递数据的“媒介”。某进程数据写入管道的一端,另一个进程从管道另 一端读取数据。

7. JFS是一种提供日志的字节级文件系统。该文件系统主要是为满足服务器(从单处理器系 统到高级多处理器和群集系统)的高吞吐量和可靠性需求而设计、开发的。JFS文件系统是为

面向事务的高性能系统而开发的。

本文来源:https://www.bwwdw.com/article/pohw.html

Top