1、 1. Linux与 嵌入式 开发 复习材料 万睦莹和 书 架 1 / 26 1.固态存储设备的典型空间分配结构图:由 _、 _、 _和 _组成。 2. 在 shell 编程时,使用方括号表示测试条件的规则是:方括号两边必须有_。 3. 字符设备文件类型的标志是 _。 4. 利用 gdb 进行调试时,可通过 _或 _ 命令进行单步执行。 5. gcc 的 编 译 可 分 为 _ 、 _ 、 _ 和 _等四个阶段。 6. 进程可以划分为三种状态 _、 _、 _,并随一定条件而相互转化。如果需要 _,就会进入 _,如果不涉及到 I/O 操作,那么它就不停地在 _ 和 _ 这两个状态之间来回切换。
2、7. Bootloader 的操作模式有: _、 _。二者的区别? 8. 交叉编译 就是在一个平台上生成可以在另一个平台上执行的代码。进行交叉编译的主机称为 _,也就是普通的 通用计算机;程序实际的运行环境称为 _,也就是嵌入式系统环境。 9. _就是在操作系统内核运行之前运行的一段程序,它类似于 PC 机中的 BIOS 程序。 10. Linux 系统主要包含 _、 _和 _三种类型的进程。 11. 在用 vi 编辑好文件后,为了将文件内容存入 test.txt 文件中并退出 vi(开始进入 vi 时并未输入文件名),应在末行模式下键入 _; 如果开始进入 vi 时并输入了文件名,应在末行模
3、式下键入 _保存退出 。 12. Linux 进程控制 API 函数中,函数 _用于创建一个新的进程。 2 / 26 13. fork()函数用于从已存在的进程中创建一个新进程 ,新进程称为 _,而原进程称为 _。 14. 被称为嵌入式 Linux 系统中的“瑞士军刀”的构造根文件系统最常用软件工具包是 _。 15. linux 下主要文件类型有: 普通文件、目录文件、设备文件、 链接文件、管道文件、符号文件 。分别对应的符号为 普通文件 -,目录文件 d ,字符型文件 c,链接文件 l,块特殊文件 b 16. 对于 Linux 而言,所有对设备和文件的操作都 使用 文件描述符 来进行的。 1
4、7. 文件描述符是一个 非负的整数 ,它是一个索引值,指向内核中每个进程打开文件的记录表。当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符 ;当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数。 18. 通常,一个进程启动时,都会打开 3 个文件: 、 和 。这 3 个文件分别对应文件描述符为 、 和 (也就是宏替换STDIN_FILENO、 STDOUT_FILENO 和 STDERR_FILENO,建议使用这些 宏替换)。 19. ext2 和 ext3 是 Linux 下常见的默认文件系统 . 20. 如何实现挂载优盘(设备为 /etc/sdb)的操作,挂载
5、的目录为 _, 假设在 挂 载 目 录 下挂 载 优 盘的 目 录 为 usb 目 录 ,执 行 的 挂载 命 令是_。 21. 强制删除 /home/chenjing 目录下的 hello.c 文件,删除时无交互,执行命令_。 22. 将 /home/chenjing 目录下的 hello.c 文件移动到 /home 目录下,执行命令_。 3 / 26 23. 执行命 令 _显示当前目录下文件的详细属性信息(包含隐藏文件)。 24. 执行命令 _显示当前目录下文件的详细属性信息(按照时间进行排序)。 25. 显示文件 /etc/passwd 内容的命令 _。 26. 将目录切换到上级目录的命
6、令 _。 27. 进程是一个实体。每一个进程都有它自己的地址空间 ,包括 文本区域 、 数据区域 和 堆栈区域 。(代码段、数据段、堆栈段) 28. Linux 中最常用的编辑器有 _和 emacs。 29. 进程是一个“执行中的程序” ,是由 进程控制块 、 程序段 、 数据段 组成 。 30. 在 Linux 中,为了更好地保护内核空间,将程序的运行空间分为 _和_(也就是常称的内核态和用户态),它们分别运行在不同的级别上,在逻辑上是相互隔离的。 31. Fork 函数的作用 : fork()函数用于 从已存在的进程中创建一个新进程 。新进程称为 子进程 ,而原进程称为 父进程 。使用 f
7、ork()函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,包括进程上下文、代码段、进程堆栈、内存信息、打开的文件 描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制和控制终端等,而子进程所独有的只有它的进程号、资源使用和计时器等。 32. 文件权限的标示: linux 中文件的拥有者可以把文件的访问属性设成 3 种不同的访问权限: 可读( r) 、 可写( w) 和 可执行( x) 。文件又有 3 个不同的用户级别: 文件拥有者 (u)、 所属的用户组( g) 和 系统里的其他用户 (o). 33. 文件的不带缓存函数和带缓存函数 4 / 2
8、6 不带缓存: open()函数 (打开或创建文件)、 close()函数 (关闭一个被打开的文件)、 read()函数 (用于将从 指定的文 件描述符 中读出的数据放到缓存区中,并返回实际读入的字节数) 、 write()函数 (用于向打开的文件写数据,写操作从文件的当前指针位置开始) 、 lseek()函数 (用于在指定的文件描述符中将文件指针定位到相应的位置) 、 lockf()函数和 fcntl()函数 (实现文件上锁) 带缓存:打开文件: fopen()、 fdopen()和 freopen()、关闭标准流文件的函数为fclose()、 读操作的函数为 fread()、 fwrite
9、()函数是用于对 指定的文件流 进行写操作 34. 进程间通信的方式 : ( 1)管道( Pipe)及有名管道 ( named pipe)( 2)信号( Signal)( 3)消息队列( Messge Queue)( 4)共享内存( Shared memory)( 5)信号量( Semaphore)( 6)套接字( Socket) 35. Linux 文件锁有哪两种 : 建议性锁和强制性锁 。要求每个上锁文件的进程都要检查是否有锁存在,并且尊重已有的锁,在一般情况下,内核和系统都不使用该类锁。 _是由内核执行的锁,当一个文件被上锁进行写入操作的时候,内核将阻止其他任何文件对其进行读写操作。采用
10、强制性锁对性能的影响很大,每次读写操作都 必须检查是否有锁存在。 36. Make 跟 makefile 的关系: Make 工程管理器也就是个 “ 自动编译管理器 ” ,这里的 “ 自动 ” 是指它能构根据 文件时间戳自动发现更新过的文件 而减少编译的工作量,同时,它 通过读入 Makefile 文件 的内容来执行大量的编译工作 ; makefile 是 make 读入的惟一配置文件; makefile 的规则( make 规则)是 make 进行处理的依据,它包括了目标文件列表、依赖文件列表及其之间的命令语句 5 / 26 37. Linux 下嵌入式应用程序的交叉编译及基于 NFS 的下
11、载调试 方法 ( 1)建立工作目录 ( 2)编写程 序源代码,用 vi 编辑器 ( 3)如需要,编写 makefile 文件 ( 4)在宿主机( PC 机)上编译应用程序: 如何编译? ( 5)如果编写 makefile 文件,可执行 make 命令,如果没有,则需要执行gcc 编译指令。 ( 6)下载调试,下载调试的方法: 在宿主机 PC 计算机上启动 NFS 服务,并设置好共享目录,进入超级终端建立开发板与宿主机之间的通讯,在超级终端中输入命令: mount t nfs o nolock 192.168.0.56:/arm2410s /host, 在开发板 (超级终端界面 )上进入 /ho
12、st 目录便可以进入宿主机共享目录,可以运行程序查看结果。 38. Bootloader 的作用 简单地说, Bootloader 就是在操作系统内核运行之前运行的一段程序,它类似于 PC 机中的 BIOS 程序。通过这段程序,可以完成 硬件设备的初始化 ,并建立 内存空间的映射关系 ,从而将系统的软硬件环境带到一个合适的状态,为最终 加载系统内核 做好准备。 39. Bootloader 的操作模式: _ , _. 40. Bootloader 启动流程 stage1 基本的硬件初始化 ,包括屏蔽所有的中 断、设置 CPU 的速度和时钟频率、RAM 初始化、初始化外围设备、关闭 CPU 内部
13、指令和数据 cache 等。 为加载 stage2准备 RAM空间 ,通常为了获得更快的执行速度,通常把 stage26 / 26 加载到 RAM 空间中来执行,因此必须为加载 Bootloader 的 stage2 准备好一段可用的 RAM 空间。 拷贝 stage2 到 RAM 中 ,在这里要确定两点: stage2 的可执行映像在固态存储设备的存放起始地址和终止地址; RAM 空间的起始地址。 设置堆栈指针 sp,这是为执行 stage2 的 C 语言代码做好准备。 跳 转到 stage2 入口点。 Bootloader 启动流程 stage2 用汇编语言跳转到 main 入口函数 由于
14、 stage2 的代码通常用 C 语言来实现,目的是实现更复杂的功能和取得更好的代码可读性和可移植性。但是与普通 C 语言应用程序不同的是,在编译和链接 Bootloader 这样的程序时,不能使用 glibc 库中的任何支持函数。 初始化本阶段要使用到的硬件设备 ,包括初始化串口、初始化计时器等。在初始化这些设备之前、可以输出一些打印信息。 检测系统的内存映射 ,所谓内存映射就是指在整个 4GB 物理地址空间中 指出哪些地址范围被分配用来寻址系统的内存。 加载内核映像和根文件系统映像 ,这里包括规划内存占用的布局和从 Flash上拷贝数据。 设置内核的启动参数 ; 调用内核 。 41. Li
15、nux 启动时都需要有 init 目录下的相关文件,在 Linux 挂载分区时 Linux一定会找 /etc/fstab 挂载文件 42. API 和系统调用 所谓 _是指操作系统提供给用户程序调用的一组 “ 特殊 ” 接口,7 / 26 用户程序可以通过这组 “ 特殊 ” 接口来获得操作系统内核提供的服务。例如用户可以通过进程控制相关的系统调用来创建进程、实现进程 调度、进程管理等。 用户编程接口 _ 43. Linux 内核的 5 个子系统 _、 _、 _、 _和_。 44. 管道( Pipe)及有名管道( named pipe): _可用于具有亲缘关系 进程间的通信, _除具有管道所具有
16、的功能外, 它还允许 _进程间的通信 。 管道只存在于内核的内存空间中。有名管道存在于文件系统中。 45. 名词解释 交叉编译: 嵌入式软件开发所采用的编译为交叉编译。所谓 交叉编译就是在一 个平台上生成可以在另一个平台上执行的代码。 进程: 进程是一个程序的一次执行的过程,同时也是资源分配的最小单元 。进程是系统中 程序执行 和 资源分配 的基本单位。 守护进程: 守护进程就是后台服务进程,它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。 守护进程常常在系统引导载入时启动,在系统关闭时终止。 僵尸进程: 一个进程使用 fork 创建子进程,如果子
17、进程退出,而 父进程 并没有调用 wait 或 waitpid 获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之 为僵尸进程。 孤儿进程: 一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被 init 进程 (进程号为 1)所收养,并由 init 进程对它们完成状态收集工作。 8 / 26 根文件系统: 46. Vi 编辑器的三种模式以及三种模式之间的转换。 47. 嵌入式系统程序交叉编译调试的一般步骤 : ( 1)建立工作目录 ( 2)编写程序源代码,用 vi 编辑器 ( 3)在宿主机( PC 机)上编译应用程序,执行 gcc
18、 编译指令。 ( 4)下载调试,下载调试的方法:在宿主机 PC 计算机上启动 NFS 服务,并设置好共享目录,进入超级终端建立 开发板与宿主机之间的通讯,在超级终端中输入命令: mount t nfs o nolock 192.168.0.56:/arm2410s /host, 192.168.0.56 为主机 IP 地址,在开发板上进入 /host 目录便可以进入宿主机共享目录,可以运行程序查看结果。 48. 烧写根文件系统要在 vivi 下执行: _,在选择相应的根文件系统文件进行烧写。 49. Linux 下 shell 程序和 C 程序从编写到运行的一般步骤: ( 1) 在 linux
19、 的命令提示符下 启动编辑器,如输入 vi,启动 vi编辑器。 ( 2) 输入程序的内容, esc 键, :wq 保存退出。 ( 3) 如果编写的是 shell 程序,在运行前需要增加执行权限,可通过如下语句: chmod +x filename;如果编写的是 c 程序,则进行编译, GCC 源文件 o 目标文件。 ( 4) 如果发现程序有语法错误或者逻辑错误,则需要继续调试程序,直至程序无任何语法错误或逻辑错误。 ( 5) 运行程序 ./可执行文件名 9 / 26 50. 什么是嵌入式系统?它由哪几部分组成?嵌入式系统的三要素是什么? 51. 将路径 /etc 下所有以 h开头的文 件及目录
20、,拷贝到 /home/chen/software 中,命令格式为 cp -r /etc/h*.* /home/chen/software 52. 创建一个名为 myfile 的空文档 touch myfile 53. 列出 /dev 目录下的文件 _ 54. 挂载设备到文件系统的命令 _,从文件系统中卸载设备命令是 _。 55. 逻辑运算中,有几个基 本的语法,其中 -o表示 _, _表示与( AND)。 56. UP-NETARM2410-S平台使用的 Bootloader 是 _。 57. UP-NETARM2410-S为了能够运行,必须对 flash 的固态存储设备空间进行划分,其空间结
21、构从低地址到高地址要包括_. 58. 下面关于 passwd 命令的说法,不正确的是哪个?( D ) A.普通用户可以利用 passwd 命令修改自己的口令 B.超级用户可以利用 passwd 命令修改自己和其他用户的口令 C.普通用户不可以利用 passwd 命令修改其他用户的口令 D.普通用户可以利用 passwd 命令修改自己和其他用户的口令 59. 以下哪个命令可将 file1 复制给 file2? ( B ) A.copy file1 file2 B.cat file1file2 C.cp file1 file2 D.cat file1 file2file1 60. 进程和程序的主要
22、区别是什么?( A ) A.程序是一组有序的静态指令,进程是一次程序的执行过程。 10 / 26 B.程序只能在前台运行,而进程可以在前台或后台运行 C.程 序可以长期保存,进程是暂时的 D.程序没有状态,而进程是有状态的 61. 以下查找文件的命令中那个是错误的?( D) A、 find -name“ myfile” B、 find -size 100k C、 find /home -name“ myfile” D、 find -type myfile 62. 文件 exer1的权限为 rw-r-r-,现在增加所有用户的执行权限和同组用户的写权限,以下哪个命令正确?( A ) A.chmod
23、 a+x,g+w exer1 B.chmod 765 exer1 C.chmod o+x exer1 D.chmod g+w exer1 63. 已知某用户 stud1,其用户目录为 /home/stud1。如果当前目录为 /home,使用以下哪个命令可以进入 /home/stud1/test 目录? ( C) A. cd test B. cd/stud1/test C. cd stud1/test D. cd home 64. 输入“ cd”命令并按 Enter键后,将是什么结果? ( C) A. 从当前目录切换到根目录 B. 屏幕显示当前目录 C. 从当前目录切换到用户主目录 D. 从当前
24、目录切换为上一级目 65. 已知用户 stud1, 其用户主目录为 /home/stud1。分页显示当前目录下的所有文件的文件名或目录名、 用户组、用户、文件大小、文件或目录权限、文件创建信息的命令是哪个? ( D) A.more ls Al B.more -Al ls C.more 括起来,再进行文件依赖分析时,只考虑用户自己编写的 .h 文件)该例子中 文件结构如下: Makefile 文件: 思考:如果想执行一步 make 命令,同时要生成 hello 可执行文件,并删除 中间 .o文件。 12. 为了避免僵死进程的出现: 一种办法是父进程调用 wait/waitpid 等待子进程结束,但这样做有一个弊端就 是在子进程结束前父进程会一直阻塞,不能做任何事情。 另外一种更好的方法就是调用两次 fork 函数。 文件 包含文件 hello.c head.h message.c 25 / 26 Linux与嵌入式开发 复习材料 万睦莹和书架