1.Linux与嵌入式开发复习材料万睦莹和书架1/261.固态存储设备的典型空间分配结构图:由_________、_________、_________和_________组成。2.在shell编程时,使用方括号表示测试条件的规则是:方括号两边必须有_________。3.字符设备文件类型的标志是_______。4.利用gdb进行调试时,可通过_________或________命令进行单步执行。5.gcc的编译可分为___________、__________、____________和________________等四个阶段。6.进程可以划分为三种状态___________、____________、____________,并随一定条件而相互转化。如果需要__________,就会进入____________,如果不涉及到I/O操作,那么它就不停地在_________和_____________这两个状态之间来回切换。7.Bootloader的操作模式有:___________、________________。二者的区别?8.交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。进行交叉编译的主机称为__________,也就是普通的通用计算机;程序实际的运行环境称为__________,也就是嵌入式系统环境。9.__________就是在操作系统内核运行之前运行的一段程序,它类似于PC机中的BIOS程序。10.Linux系统主要包含__________、_________和____________三种类型的进程。11.在用vi编辑好文件后,为了将文件内容存入test.txt文件中并退出vi(开始进入vi时并未输入文件名),应在末行模式下键入_____________;如果开始进入vi时并输入了文件名,应在末行模式下键入____________保存退出。12.Linux进程控制API函数中,函数______用于创建一个新的进程。2/2613.fork()函数用于从已存在的进程中创建一个新进程,新进程称为________,而原进程称为_______。14.被称为嵌入式Linux系统中的“瑞士军刀”的构造根文件系统最常用软件工具包是_______。15.linux下主要文件类型有:普通文件、目录文件、设备文件、链接文件、管道文件、符号文件。分别对应的符号为普通文件-,目录文件d,字符型文件c,链接文件l,块特殊文件b16.对于Linux而言,所有对设备和文件的操作都使用文件描述符来进行的。17.文件描述符是一个非负的整数,它是一个索引值,指向内核中每个进程打开文件的记录表。当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数。18.通常,一个进程启动时,都会打开3个文件:、和。这3个文件分别对应文件描述符为、和(也就是宏替换STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO,建议使用这些宏替换)。19.ext2和ext3是Linux下常见的默认文件系统.20.如何实现挂载优盘(设备为/etc/sdb)的操作,挂载的目录为_______,假设在挂载目录下挂载优盘的目录为usb目录,执行的挂载命令是_________________________________。21.强制删除/home/chenjing目录下的hello.c文件,删除时无交互,执行命令___________。22.将/home/chenjing目录下的hello.c文件移动到/home目录下,执行命令___________。3/2623.执行命令__________________显示当前目录下文件的详细属性信息(包含隐藏文件)。24.执行命令__________________显示当前目录下文件的详细属性信息(按照时间进行排序)。25.显示文件/etc/passwd内容的命令______________________。26.将目录切换到上级目录的命令___________________。27.进程是一个实体。每一个进程都有它自己的地址空间,包括文本区域、数据区域和堆栈区域。(代码段、数据段、堆栈段)28.Linux中最常用的编辑器有________和emacs。29.进程是一个“执行中的程序”,是由进程控制块、程序段、数据段组成。30.在Linux中,为了更好地保护内核空间,将程序的运行空间分为________和__________(也就是常称的内核态和用户态),它们分别运行在不同的级别上,在逻辑上是相互隔离的。31.Fork函数的作用:fork()函数用于从已存在的进程中创建一个新进程。新进程称为子进程,而原进程称为父进程。使用fork()函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,包括进程上下文、代码段、进程堆栈、内存信息、打开的文件描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制和控制终端等,而子进程所独有的只有它的进程号、资源使用和计时器等。32.文件权限的标示:linux中文件的拥有者可以把文件的访问属性设成3种不同的访问权限:可读(r)、可写(w)和可执行(x)。文件又有3个不同的用户级别:文件拥有者(u)、所属的用户组(g)和系统里的其他用户(o).33.文件的不带缓存函数和带缓存函数4/26不带缓存:open()函数(打开或创建文件)、close()函数(关闭一个被打开的文件)、read()函数(用于将从指定的文件描述符中读出的数据放到缓存区中,并返回实际读入的字节数)、write()函数(用于向打开的文件写数据,写操作从文件的当前指针位置开始)、lseek()函数(用于在指定的文件描述符中将文件指针定位到相应的位置)、lockf()函数和fcntl()函数(实现文件上锁)带缓存:打开文件:fopen()、fdopen()和freopen()、关闭标准流文件的函数为fclose()、读操作的函数为fread()、fwrite()函数是用于对指定的文件流进行写操作34.进程间通信的方式:(1)管道(Pipe)及有名管道(namedpipe)(2)信号(Signal)(3)消息队列(MessgeQueue)(4)共享内存(Sharedmemory)(5)信号量(Semaphore)(6)套接字(Socket)35.Linux文件锁有哪两种:建议性锁和强制性锁。要求每个上锁文件的进程都要检查是否有锁存在,并且尊重已有的锁,在一般情况下,内核和系统都不使用该类锁。__________是由内核执行的锁,当一个文件被上锁进行写入操作的时候,内核将阻止其他任何文件对其进行读写操作。采用强制性锁对性能的影响很大,每次读写操作都必须检查是否有锁存在。36.Make跟makefile的关系:Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能构根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件的内容来执行大量的编译工作;makefile是make读入的惟一配置文件;makefile的规则(make规则)是make进行处理的依据,它包括了目标文件列表、依赖文件列表及其之间的命令语句5/2637.Linux下嵌入式应用程序的交叉编译及基于NFS的下载调试方法•(1)建立工作目录•(2)编写程序源代码,用vi编辑器•(3)如需要,编写makefile文件•(4)在宿主机(PC机)上编译应用程序:如何编译?•(5)如果编写makefile文件,可执行make命令,如果没有,则需要执行gcc编译指令。•(6)下载调试,下载调试的方法:•在宿主机PC计算机上启动NFS服务,并设置好共享目录,进入超级终端建立开发板与宿主机之间的通讯,在超级终端中输入命令:mount–tnfs–onolock192.168.0.56:/arm2410s/host,在开发板(超级终端界面)上进入/host目录便可以进入宿主机共享目录,可以运行程序查看结果。38.Bootloader的作用简单地说,Bootloader就是在操作系统内核运行之前运行的一段程序,它类似于PC机中的BIOS程序。通过这段程序,可以完成硬件设备的初始化,并建立内存空间的映射关系,从而将系统的软硬件环境带到一个合适的状态,为最终加载系统内核做好准备。39.Bootloader的操作模式:__________,_______________.40.Bootloader启动流程–stage1基本的硬件初始化,包括屏蔽所有的中断、设置CPU的速度和时钟频率、RAM初始化、初始化外围设备、关闭CPU内部指令和数据cache等。为加载stage2准备RAM空间,通常为了获得更快的执行速度,通常把stage26/26加载到RAM空间中来执行,因此必须为加载Bootloader的stage2准备好一段可用的RAM空间。拷贝stage2到RAM中,在这里要确定两点:①stage2的可执行映像在固态存储设备的存放起始地址和终止地址;②RAM空间的起始地址。设置堆栈指针sp,这是为执行stage2的C语言代码做好准备。跳转到stage2入口点。Bootloader启动流程–stage2用汇编语言跳转到main入口函数由于stage2的代码通常用C语言来实现,目的是实现更复杂的功能和取得更好的代码可读性和可移植性。但是与普通C语言应用程序不同的是,在编译和链接Bootloader这样的程序时,不能使用glibc库中的任何支持函数。初始化本阶段要使用到的硬件设备,包括初始化串口、初始化计时器等。在初始化这些设备之前、可以输出一些打印信息。检测系统的内存映射,所谓内存映射就是指在整个4GB物理地址空间中指出哪些地址范围被分配用来寻址系统的内存。加载内核映像和根文件系统映像,这里包括规划内存占用的布局和从Flash上拷贝数据。设置内核的启动参数;调用内核。41.Linux启动时都需要有init目录下的相关文件,在Linux挂载分区时Linux一定会找/etc/fstab挂载文件42.API和系统调用所谓___________是指操作系统提供给用户程序调用的一组“特殊”接口,7/26用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务。例如用户可以通过进程控制相关的系统调用来创建进程、实现进程调度、进程管理等。用户编程接口——___________43.Linux内核的5个子系统_______、_______、________、_________和_____________。44.管道(Pipe)及有名管道(namedpipe):________可用于具有亲缘关系进程间的通信,__________除具有管道所具有的功能外,它还允许___________进程间的通信。管道只存在于内核的内存空间中。有名管道存在于文件系统中。45.名词解释交叉编译:嵌入式软件开发所采用的编译为交叉编译。所谓交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。进程:进程是一个程序的一次执行的过程,同时也是资源分配的最小单元。进程是系统中程序执行和资源分配的基本单位。守护进程:守护进程就是后台服务进程,它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导载入时启动,在系统关闭时终止。僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程。孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。8/26根文件系统:46.Vi编辑器的三种模式以及三种模式之间的转换。47.嵌入式系统程序交叉编译调试的一般步骤: