内容发布更新时间 : 2024/12/25 22:41:45星期一 下面是文章的全部内容请认真阅读。
上出现了各种改进版本:支持网络功能、USB 功能、烧写YAFFS文件系统映象等。
第八章
一、填空题。
1、ARM-Linux内核的配置系统由三个部分组成,它们分别是Makefile、配置文件和配置工具。
2、配置工具一般包括配置命令解释器和配置用户界面,前者主要作用是对配置脚本中使用的配置命令进行解释;而后者则是提供基于字符界面、基于Ncurses图形界面以及基于X Window图形界面的用户配置界面。 3、Makefile文件主要包含注释、编译目标定义和适配段。
4、Linux内核常用的配置命令有make oldconfig、make config、make menuconfig和make xconfig。其中以字符界面配置的命令是make config。 5、内核编译结束后,会在“/arch/arm/boot/”目录下面和根目录下面生成一个名为zImage的内核镜像文件。
二、选择题
1.linux内核中的makefile以及与makefile直接相关的文件不包括(C)。 A. Rules.make B. 子目录下的Makefile C. 后缀名为.in D. 后缀名为.config 2.用户通过make config 配置后,产生了后缀名为(A)。 A. config B. in C. config.in D. in.config
3.rules.make文件定义了许多变量,最重要的是那些编译、连接列表变量,但不包括(D)。
A. MX_OBJX B. O_TARGET C. O_OBJS D. O_OBJL 4.在内核配置过程中,如果需要设置networking support这个选项,进入的菜单项是(D)。
A.General setup B.File system C. Boot options D. Device derives 5.在linux系统中,我们既需要标记变量的符号,有需要变量的物理地址,两者同时需要的时候可以采用符号表的方式,其对应的文件为(B)。 A. vmlinux B. System.map C. vmlinuz D. initrd-x.x.x.img
三、叙述题
1、Linux内核各个部分与内核源码的各个目录都是对应起来的,比如有关驱动的内容,内核中就都组织到“drive”这个目录中去,有关网络的代码都集中组织到“net”中。当然,这里有的目录是包含多个部分的内容。具体各个目录的内容组成如下:
arch:arch目录包括了所有和体系结构相关的核心代码。include:include 目录包括编译核心所需要的大部分头文件,例如与平台无关的头文件在
? 12 ?
include/linux 子目录下; init:init 目录包含核心的初始化代码(不是系统的引导代码),有main.c 和Version.c 两个文件;mm:mm 目录包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/*/mm 目录下;drivers:drivers 目录中是系统中所有的设备驱动程序。它又进一步划分成几类设备驱动,每一种有对应的子目录,如声卡的驱动对应于drivers/sound;ipc:ipc 目录包含了核心进程间的通信代码;modules:modules 目录存放了已建好的、可动态加载的模块;fs:fs 目录存放Linux 支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext3 文件系统对应的就是ext3 子目录;Kernel:Kernel 内核管理的核心代码放在这里。同时与处理器结构相关代码都放在arch/*/kernel 目录下;net:net 目录里是核心的网络部分代码,其每个子目录对应于网络的一个方面;lib:lib 目录包含了核心的库代码,不过与处理器结构相关的库代码被放在arch/*/lib/目录下;scripts:scripts 目录包含用于配置核心的脚本文件;documentation:documentation 目录下是一些文档,是对每个目录作用的具体说明。
2、将自己开发的内核代码加入到 Linux 内核中,需要有三个步骤。首先确定把自己开发代码放入到内核的位置;其次,把自己开发的功能增加到 Linux 内核的配置选项中,使用户能够选择此功能;最后,构建子目录 Makefile,根据用户的选择,将相应的代码编译到最终生成的 Linux 内核中去。主要步骤有:组织目录结构,配置文件,修改makefile文件等。
3、Linux内核的移植过程比较繁琐,具体步骤如下:解压内核文件、修改机器码、修改内核源码根目录下的
Makefile
文件、修改
“arch/arm/plat-s3c24xx/common-smdk.c”文件,修改Nand Flash的分区信息和Nand Flash的硬件信息、修改时钟频率、增加Yaffs2文件系统的支持、配置内核、编译内核等。
4、为什么要进行内核裁剪?
内核裁剪,主要作用就是为了适应嵌入式系统的小体积、小存储的特点,在内核的大小方面进行裁剪。内核编译之前,通过配置内核的选项参数进行设置,将不需要的功能删掉,保留系统需要的部分,这样就在一定程序上缩小了生成的镜像文件大小。
第九章
一、填空题。
1、Linux下的文件系统主要分为三个层次:上层用户的应用程序对文件系统的系统调用、虚拟文件系统VFS和挂载到VFS中的各种实际文件系统。
2、Linux中三常见的块驱动程序:Blkmem驱动层、RAMdisk驱动层、MTD驱动层
3、基于Flash存储常见的文件系统有JFFS2、Yaffs、Romfs和Cramfs。 4、基于RAM的文件系统常见的有Ramdisk和Ramfs/Tmpfs。 5、System V init、Busybox init
二、选择题
1、(A)也支持在一块Flash上建立多个Flash分区,没一个分区作为一个MTD block设备,可以把系统软件数据等分配到不同的分区上,同时也可以在不同的分区采用不同的文件系统格式。
A、MTD驱动层 B、Blkmem驱动层 C、Romdisk驱动层 D、Ramdisk驱动层
2、在Linux系统中,因为Flash可以以分区为单位拆开或者合并后使用,所以文件系统是针对于(B)而言的。
A、存储芯片 B、存储器分区 C、Flash D、RAM
3、(B)是可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电保护,提供了“写平衡”支持,是具有支持多种节点类型,提高了对Flash的利用率等优点的文件系统、
A、Cramfs B、Yaffs C、Romfs D、JFFS2
4、(D)将一部分固定大小的内存当做分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并可以作为根文件系统。
A、JFFS2 B、Yaffs C、Romfs D、Ramdisk 5、目录“rc n.d”(n表示运行级别,值分别取0~6)下存放的文件则是用来定义每个运行级别将会执行的应用程序名,通常情况下它们都是符号链接,具体的文件则位于(B)目录下。
A、rc.local B、init.d C、rc D、rc.d A B B D B 三、叙述题
1、在Linxu根文件系统中,一般包括这样一些子目录:/etc/、/dev/、/usr/、/usr/bin/、/bin/等。根文件系统的建立需要遵循一定的规则,包括目录的位置及名字等。用来建立根文件系统的规则被称作文件系统分类标准(Filesystem Hierarchy Standard,FHS),该规则定义了在构建Linux根文件系统时文件和目录的名字和存放位置的标准。
2、简述Busybox的主要作用。
Busybox能使用户迅速方便的建立一套相对完整、功能丰富的文件系统,其中包括大量常用的应用程序。Busybox将许多常用的UNIX命令和工具结合到了一个单独的可执行程序中。它集成压缩了 Linux 的许多工具和命令。虽
? 14 ?
然与相应的GNU工具比较起来,Busybox所提供的功能和参数略少,但在比较小的系统或者嵌入式系统中,这些已经足够用了。
3、简述NFS文件系统的制作过程。
一般只要通过特殊的打包工具将文件系统打包,并刻录到非易失性存储器中中就可以了。
==================================================================
第十章
一、填空题。
1、Linux系统的设备文件分为四类:块设备文件、字符设备文件、网络设备文件、杂项设备文件。
2、设备号是一个数字,它是设备的标志、如前所述,一个设备文件可以通过mknod命令来创建,其中指定了主设备号和次设备号。前者表明某一类设备,用于表示设备对应的驱动程序,一般对应着确定的驱动程序;后者一般用于区分标明不同属性,它标志着某个具体的物理设备。
3、本章中的4种数据结构:file_operations、file、inode和device_struct,其中file_operations存储驱动内核模块提供的对设备进行这种操作的函数指针,file代表一个打开的文件描述符,inode表示具体的文件。
4、创建设备节点的命令是mknod。
5、设备读写操作的功能之一就是控制硬件,最常用的通过设备驱动程序完成控制动作的方法就是实现ioctl方法。
二、选择题
1、磁盘属于(B)。
A、字符设备 B、块设备 C、网络设备 D、杂项设备 2、USB属于(D)。
A、字符设备 B、块设备 C、网络设备 D、杂项设备
3、Linux内核是“单内核”结构,这个单内核由很多(A)构成。 A、模块 B、函数 C、设备 D、驱动程序 4、如果一个模块要实现read、open和release等功能,则将其定义为(A)结构。
A、file_operations B、inode C、file D、devicde_struct
5、数据结构(D),包含两个元素:一个登记的设备驱动程序的指针和一个指向一组文件操作的指针。
A、file_operations B、inode C、file D、device_struct B D A A D 三、叙述题
1、Linux驱动程序主要有哪些功能?
驱动程序主要提供以下功能:应用程序通过驱动程序安全有效地访问硬件;驱动程序作为嵌入式系统的中间层软件,它隐藏了底层的细节,从而提高了软件的可移植性和可复用性;驱动程序文件节点可以方便地提供访问权限控制。从下层驱动开发人员的角度来看,Linux驱动程序就是通过直接操控硬件的软件,来完成下面的功能:对设备初始化和释放;直接读写硬件寄存器来控制硬件;把数据从内核传送到硬件和从硬件读取数据;操作设备缓冲区设备;操作输入、输出设备,如键盘、打印机等;读取应用程序传送给设备文件的数据和回送应用程序请求的数据;检测和处理设备出现的错误。
2、简述字符设备与块设备有什么区别。
块设备文件:通常指一些需要以块(如512字节)的方式写入的设备,如IDE硬盘、SCSI硬盘、光驱等; 字符型设备文件:通常指可以直接读写,没有缓冲区的设备,如并口、虚拟控制台等;
3、Linux驱动程序可以通过哪两种方式集成到内核中? Linux驱动程序可以通过两种方式集成到内核中去: 一是将其直接编译到内核;
二是将其编写成模块,在需要添加某种硬件的时候,内核可以将其调入。在配置Linux内核时,可以选择“Enable loadable module support”选项,来支持可加载内核模块。
4、Linux设备驱动程序与外界的接口可以分为几个部分? Linux 设备驱动程序与外界的接口可以分为如下三个部分:
驱动程序与操作系统内核的接口:这是通过数据结构 file_operations来完成的。
驱动程序与系统引导的接口:这部分利用驱动程序对设备进行初始化。 驱动程序与设备的接口:这部分描述了驱动程序如何与设备进行交互,这与具体设备密切相关。
5、进行模块编程的一般步骤是:首先建立模块文件,然后编写makefile文件,最后使用insmod加载模块文件。
6、编写一个字符设备驱动,主要是下面几步:
编写硬件接口函数;建立文件系统与设备驱动程序的接口变量,类型为struct file_operations结构体,并初始化该变量;注册设备到chrdevs全局数组中;以模块方式编译驱动源码,并将其加载到内核中;创建设备节点;编写应用程序访问底层设备。