1. (B) 是二进制程序处理工具,包括连接器,汇编器等目标程序处理的工具。
A. Gcc B. Binutils C. Glibc D. Gdb 2.构建交叉编译器的第一个步骤是(D)。
A. 下载工具 B. 编译所需文件 C.实现平台连接 D. 确定目标平台 3、分析以下代码
#export PRJROOT=/home/arm/armlinux #export TARGET=arm-linux
#export PREFIX=$PRJROOT/$TARGET 其中,变量PREFIX代表的路径为(B)。
A、/home/arm/armlinux B、/home/arm/armlinux/arm-linux C、/home/arm/arm-linux D、/home/arm/arm-linux/armlinux 4. Binutils是gnu工具之一,他包括连接器、汇编器和其他用于目标文件和档案的工具,特使二进制代码的处理维护工具。其中包括(A)命令,他是把一些目标和归档文件结合在一起,重定位数据,并连接符号引用。
A. ld B. gprof C. arc D. as
5.分布构建交叉编译链的过程有两次变异gcc,其中第二次进行编译的作用是(获得glibc库的支持)
A.获得newlib库的支持 B. 获得glibe库的支持 C. 获得uClibe库的支持 D. 获得c库的支持
三、叙述题
1、构建交叉工具链有那几种方法?
通常构建交叉工具链有三种方法:
方法一、分步编译和安装交叉编译工具链所需要的库和源代码,最终生成交叉编译工具链。方法二、通过Crosstool脚本工具来实现一次编译生成交叉编译工具链,该方法相对于方法一要简单许多,并且出错的机会也非常少,建议大多数情况下使用该方法构建交叉编译工具链;方法三、直接通过网上下载已经制作好的交叉编译工具链。
第七章
一、填空题。
1、Bootloader,亦称引导加载程序,是系统加电后运行的第一段软件代码。 2、一般Bootloader包含两种不同的操作模式:启动加载模式(Bootloading)和下载模式(Downloading)。
3、Bootloader的主要功能是引导操作系统启动,它的启动方式有网络启动、磁盘启动和Flash启动三种。
4、Vivi运行的第一阶段主要完成以下工作:屏蔽所有中断、设置CPU的速度和时钟频率、RAM初始化、初始化LED和关闭CPU内部指令/数据cache。
? 10 ?
二、选择题
1、在Bootloader的启动方式中,Flash启动方式通常有两种,一种是可以直接从Flash启动,另一种时可以将压缩的内存映像文件从Flash中复制、解压到 C ,再从中启动。
A、ROM B、SDRAM C、RAM D、Flash
2、在各种Bootloader中, B 是以PPCBoot和ARMBoot为基础的通用加载程序,并且在ARM、PowerPC以及MIPS等多种平台上运行。 A、Vivi B、U-boot C、RedBoot D、s-hboot
3、在编译Vivi之前将Vivi里所有的“*.o”和“*.o.flag”文件删除,以确保文件编译时没有错误或者警告发生,使用的命令格式为(D)。 A、make distclean B、make clean C、make menuconfig D、make config 4、编译Vivi时,如果编译成功,在/vivi里面会生成三个vivi文件,其中不包括文件(D)。
A、vivi B、vivi.map C、vivi-elf D、vivi.exe
5、把二进制文件载入Flash或RAM使用的命令是(A)。 A、load B、part C、boot D、bon 三、叙述题
1、简述Bootloader的主要功能。
BootLoader,亦称引导加载程序,是系统加电后运行的第一段软件代码。它是整个系统执行的第一步,所以它的地位在整个嵌入式软件系统中是非常重要的。
2、Vivi作为一种Bootloader,其运行过程分成两个阶段,第一阶段的代码在Vivi/arch/s3c2440/head.s中定义,大小不超过10 KB,它包括从系统上电后在0x00000000地址开始执行的部分。这部分代码运行在Flash中,它包括对S3C2440的一些寄存器、时钟等的初始化,然后跳转到第二阶段执行; 第二阶段的代码在Vivi\\init\\main.c中,主要进行一些开发板初始化、内存映射和内存管理单元初始化等工作,最后会跳转到boot_or_Vivi()函数中,接收命令并进行处理。需要注意的是在Flash中执行完内存映射后,会将Vivi代码拷贝到SDRAM中执行。
3、U-Boot则支持大多CPU,可以烧写EXT2、JFFS2文件系统映象,支持串口下载、网络下载,并提供了大量的命令。相对于Vivi,它的使用更复杂,但是可以用来更方便地调试程序;
Vivi是Mizi公司针对SAMSUNG的ARM架构CPU专门设计的,基本上可以直接使用,命令简单方便。不过其初始版本只支持串口下载,速度较慢。在网
上出现了各种改进版本:支持网络功能、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中的各种实际文件系统。