《嵌入式Linux(带课后题)期末复习资料.doc》由会员分享,可在线阅读,更多相关《嵌入式Linux(带课后题)期末复习资料.doc(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 嵌入式Linux第一章1 嵌入式系统概念:以应用为中心,以计算机控制系统为基础,并且软硬件可剪裁,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。2 嵌入式系统的三个基本要素:嵌入性 ,专用性,计算机系统3 嵌入式系统的组成:应用软件、嵌入式操作系统、硬件设备(嵌入式处理器/外围设备)4 特点:(1)面向特定应用。(2)嵌入式系统的硬件和软件都必须进行高效地设计,量体裁衣,去除冗余。(3)嵌入式系统是将先进的计算机技术,半导体技术和电子技术与各个行业的具体应用相结合后的产物。(4)为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在储存芯片中或单片机本身,而
2、不是存储于磁盘中。(5)嵌入式开发软件代码尤其要求高质量,高可靠性(6)嵌入式系统本身不具备二次开发功能5.嵌入式系统的开发主要分为系统总体开发、嵌入式硬件开发和嵌入式软件开发三大部分。6.交叉编译环境:就是在一个平台上生成可以在另一个平台上执行的代码。 第二章1 vim (vi) 特点:移植性最好,功能最强,使用最广2 vim编辑器的4种模式:标准模式 ,插入模式,命令模式,可视模式标准模式(Normal mode)通常进入vim后默认处于标准模式(或者称为命令模式)。在此模式下任何键盘的输入都是作为命令来对待。命令的输入通常是不回显的,只显示执行的结果。 插入模式(Insert Mode)
3、用户只有在插入模式下才可以进行字符输入,用户按Esc键可回到命令行模式下。 命令行模式(Command-line mode) 在此模式下,用户可以将文件保存或退出vim,也可以设置编辑环境,如寻找字符串、列出行号等。 可视模式(Visual mode) 在此模式下,通过移动光标选择文本,选中的文本将反白显示,这样提供高效、直观的编辑功能。用户按下ESC键可回到命令行模式。 3 vim的进入,保存,退出过程:在命令终端下键入“vim”,在shell中键入“vim hello.c”进入;“:q”不保存并退出,“:q!”不保存并强制退出;“:wq”保存并退出;4 gcc编译的4个步骤:*.c预处理*
4、.i、编译*.s、汇编*.o、链接*.exe。5 gcc 中:gcc的选项“-E”可以使编译器在预处理结束时就停止编译,选项“-o”是指定GCC输出的结果,其命令格式为如下所示。 gcc E o 目标文件 编译文件 “.i”文件是经过预处理的C原始程序。 $ gcc -E -o hello.i hello.c6 -S 编译之前停止 .s 汇编语言原始程序 $ gcc -S -o hello.s hello.i7 -c 可以看见汇编代码已转化为“.o”的二进制目标代码 $ gcc -c hello.s hello.o8 -c 只编译汇编不连接;-S 只编译不汇编,生成汇编代码;-E 只进行预编译
5、;-g 可执行程序中包含标准调试信息;-o file 将file文件指定为输出文件;-v 打印出9 函数库:静态库和动态库 ;静态库是一系列的目标文件(.o文件)的归档文件(libname.a);动态库(libname.so主版本号.次版本号.发行号)在程序编译时并不会被链接到目标代码中,而是在程序运行时才被载入。区别动态:库仅当使用它的程序执行时才被链接使用,不必参与编译,一个动态库可以被多个程序使用;静态库将整合到程序中,程序执行是不加载静态库。优缺点:静态库会使程序臃肿,难以升级,容易部署动态库会使程序轻便,易于升级,部署困难10 make工程管理器:是个自动编译管理器,能够根据文件时间
6、戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件的内容来执行大量的编译工作。11 在一个makefile中通常包含的内容:(1)需要由make工具创建的目标体(target),通常是目标文件或可执行文件;(2)要创建的目标体所依赖的文件(3)创建每个目标体时需要运行的命令,这一行必须以制表符“tab”键开头。12 makefile的变量定义有两种方式:递归展开方式和简单方式13 隐式规则:所有“.o”文件都可自动由“.c”文件使用命令“$(CC)$(CPPFLAGS)$(CFLAGS)-c file.c -o file.o”来生成。14.GDB调试四项基本功能:(
7、1)能够运行程序,设置所有能影响程序运行的参数。(2)能够让程序在指定的条件下停止。(3)能够在程序停止时检查所有参数的情况(4)能够根据指定条件改变程序的运行。15 .GDB的使用流程:进入GDB gdb test查看文件l设置断点 b 6查看断点处情况 info b运行代码 r查看变量值 p n / p i单步运行 n恢复程序运行 c观察变量 watch n退出GDB q 第三章1 预处理:指在进行编译的第一遍扫描之前所做的工作。2 宏:在C语音源程序中允许用一个标识符来表示一串符号3 宏的分类:带参数和不带参数4 无参宏定义:无参宏的宏名(也就是标识符)后不带参数,其定义的一般形式为:
8、#define 标识符 字符串5 宏定义说明:(1)宏定义用宏名来表示一串符号,至替换,不检查。(2)不是声明或语句,在行末不必加分号;(3)作用域包括从宏定义命名起到源程序结束,使用#undef命令来取消宏作用域。(4)宏名在源程序中若用引号括起,则预处理程序不对起进行宏替换。(5)宏定义允许嵌套(6)宏名用大写字母,区别变量(7)对输出格式做宏定义,减少程序编写过程中麻烦。6 带参宏定义:#define 宏名(形参表) 字符串 说明:(1)带参宏定义中,宏名和形参表之间不能有空格出现;(2)形式半数不分配内存单元,不必做类型定义;(3)在宏定义中形参是标识符,而宏调用中的实参可以是表达式;
9、(4)在宏定义中,字符串内的形参通常要用括号括起来以避免出错。7 堆与栈的区别:申请方式;申请后系统的响应;申请大小的限制;申请速度的限制;堆和栈中的存储内容。申请方式 栈(stack):自动分配 堆(head):手动分配申请后系统的响应堆:遍历 栈:溢出申请大小的限制 堆:高地址扩展,灵活,大 栈:低地址扩展,受限,小申请速度的限制 堆 :malloc(),慢 栈:自动分配,快堆和栈中的存储内容 堆:堆大小,内容随意安排 栈:语句地址,参数(左右),局部变量8 内嵌汇编的语法_asm_ 汇编语句模板由汇编语句序列组成,语句之间使用“;”、“n”或“nt”分开。 每条指令都必须被双引号括起来。
10、两条指令必须用换行或分号分开。 指令中的操作数可以使用占位符引用C语言变量,操作数占位符最多10个,名称如为:%0,%1,.,%9 输出部分 用来指定当前内嵌汇编语句的输出 。 输入部分指定当前内嵌汇编语句的输入,每个操作数描述符由限定字符串和C语言表达式或者C语言变量组成,格式为形如“constraint”(variable)的列表 。 破坏描述部分通知gcc当前内嵌汇编语句可能会对某些寄存器或内存进行修改,希望gcc在编译时能够将这一点考虑进去。9 双向链表的常见操作:(1) 增加节点(2)删除节点10 Linux内核链表:(1)声明和初始化:这里是使用LIST_HEAD()这个宏来构建的
11、。#define LIST_HEAD_INIT(name) &(name), &(name) #define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name) 构建了一个空链表 static inline int list_empty(const struct list_head *head) return head-next = head; (2)插入static inline void _ _list_add(struct list_head *new,struct list_head *prev,struct lis
12、t_head *next) next-prev=new;new-next=next;new-prev=prev;prev-next=new; static inline void list_add(struct list_head *new,struct list_head *head) _ _list_add(new,head,head-next); static inline void list_add_tail(struct list_head *new,struct list_head *head) _ _list_add(new,head-prev,head); 11 对链表的插入操
13、作:在表头插入和在表尾插入12 红黑树的定义:(1)每个节点要么是红色,要么是黑色。(2)所有的叶子节点都是空节点,并且都是黑色。(3)如果一个节点是红色,那么它的两个子节点都是黑色。(4)节点到其子孙节点的每条简单路径都包含相同数目的黑色节点。(5)根节点永远是黑色的13 哈希表定义:为了能够迅速找到所需要的记录,最为直接的方法是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使每个关键字和结构中一个唯一的存储位置相对应14 Bootloader定义:是在操作系统运行之前执行的一段小程序,通过这段小程序,可以初始化硬件设备,建立内存空间的映像表,从而建立适当的系统软硬件环境,为最终
14、调用操作系统内核做好准备。15 Linux内核主要功能包括:进程管理,内存管理,文件管理,设备管理,网络管理第四章 嵌入式linux开发环境的搭建1.tftp分为客户端和服务器两种2.NFS文件系统:原理:NFS可以让不同的主机通过网络将远端的NFS服务器共享出来的文件安装到自己的系统中,从客户端看来,使用NFS的远端文件就像是使用本地文件一样。在嵌入式中使用NFS会使应用程序的开发变得十分方便,并且不用反复地进行烧写。过程:NFS服务器端通过读入它的配置文件“/etc/exports”来决定所共享的文件目录。客户端可以根据相应的权限3. NFS服务器端通过读入它的配置文件 “/etc/exp
15、orts”来决定所共享的文件目录。4. Bootloader是一段小程序,可以初始化硬件设备建立内存空间的映像表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。5. Linux内核主要功能包括:进程管理、内存管理、文件管理、设备管理、网络管理等。 配置minicom,nfs,tftp等1 rpm Uvh *.rpm 搭建好交叉编译环境。2 vi /etc/exports 修改相应的内容。 第二行改写为:/home/nfs (rw) 注意空格 保存退出3 cd /etc/rc.d/init.d/4 ./nfs start 启动主机下的NFS。5 终端下输 minicom s 修改
16、第三个选项6 配置波特率 ,按a 修改/dev/ttyS0, 最后选yes 。保存退出。7 ifconfig eth0 192.168.0.2 配置ip地址。8 ping 192.168.0.3 查看是否与主机相连上。9 chmod 777 /home/nfs 改变文件夹的属性10 mkdir /mnt/yaffs11 server nfs restart 重新启动12 mount o nolock 192.168.0.2 :/home/nfs /mny/yaffs 完成把主机上的/home/nfs 下的文件挂载到实验系统的/mnt/yaffs目录下。 第五章 嵌入式文件I/O编程1 系统调用
17、:指操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口获得操作系统内核提供的服务。1 将程序的运行空间分为内核空间和用户空间(即内核态和用户态)。2 调用内核空间程序:用户空间的进程需要获得一定的系统服务,这时,操作系统就必须利用系统提供给用户的特殊接口系统调用规定用户进程进入进程进入内核空间的具体位置。4 VFS定义:把各种具体的文件系统的公共部分抽取出来,形成一个抽象层,是系统内核的一部分。它位于用户程序和具体的文件系统之间,对用户程序提供了标准的文件系统调用接口。5 VFS文件引入了通用文件模型,此模型的核心:超级块对象,索引节点对象,文件对象,目录项对象6
18、文件描述符是一个非负的整数,它是一个索引值,并指向在内核中每个进程打开文件的记录表。当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数。7 I/O操作的系统调用,主要函数:open()、read()、write()、Jseek()、close()。这些函数特点:不带缓存,直接对文件或设备进行读写操作。8 文件锁:建议性锁和强制性锁。建议性锁要求每个上锁文件的进程都要检查是否有锁存在,并且尊重已有的锁。强制性锁是由内核执行的锁,当一个文件被上锁进行写入操作的时候,内核将阻止其他任何文件对其进行读写操作。9 建议性锁:
19、要求每个上锁文件的进程都要检查是否有锁存在,并且尊重已有的锁。 强制性锁:由内核执行的锁,当一个文件被上锁进行写入操作的时候,内核将阻止其他任何文件对其进行读写操作。10 终端的3种工作模式:规范模式,非规范模式,原始模式11 标准I/O提供流缓冲的目的是尽可能减少使用read()和write()等系统调用的数量。:(1)全缓冲(2)行缓冲(3)不带缓 第六章 多任务编程1. 进程的特性:并发性,动态行,交互性,独立性,异步性2.进程的状态:运行状态,可中断的阻塞状态,不可中断的阻塞状态,可终止的阻塞状态,暂停状态,跟踪状态,僵尸状态,僵尸撤销状态进程中的状态:阻塞态、暂停态、僵尸态、运行态。
20、进程的创建、执行和终止3.虚拟内存管理技术,大小为4G的线性虚拟空间,4G空间会被分成两个部分:用户空间和内核空间。4 .用户空间包括的功能区域:只读段;数据段;堆;堆栈;共享库的内存映射区域。4 fork()函数:从已存在的进程中创建一个新进程。父进程中执行fork()函数时,父进程会复制出一个子进程,而且父子进程的代码从fork()函数的返回开始分别在两个地址空间中同时运行。从而两个进程分别获得其所属fork()的返回值,其中在父进程中的返回值是子进程的进程号,而在子进程中返回0。6 编写守护进程:(1)创建子进程,父进程退出(2)在子进程中创建新会话(3)改变当前目标为根目录(4)重设文
21、件权限掩码(5)关闭文件描述符7常用的进程间通信机制(掌握)(1)管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信;有名管道,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。(2)信号(Signal):信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一样的。(3)消息队列(Messge Queue):消息队列是消息的链接表,包括Posix消息队列SystemV消息队列。它克服了前两种通信方式中信息量有限的缺点,具有写权限的进程可以按照一定的规则向消
22、息队列中添加新消息;对消息队列有读权限的进程则可以从消息队列中读取消息。(4)共享内存(Shared memory):可以说这是最有效的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新。这种通信方式需要依靠某种同步机制,如互斥锁和信号量等。(5)信号量(Semaphore):主要作为进程之间以及同一进程的不同线程之间的同步和互斥手段。(6)套接字(Socket):这是一种更为一般的进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。9.管道,是把一个程序的输出直接连接到另一个程序的输入,Linux的管道主要包括2种:无
23、名管道和有名管道。8管道通信:无名管道和有名管道 无名管道特点:(1)具有亲缘关系的进程之间的通信;(2)半双工的通信模式,具有固定的读端和写端;(3)也可以看成是一种特殊的文件,并且只存在与内存中9 有名管道特点:(1)可以使互不相关的两个进程实现彼此通信(2)可以通过路径名来指出(3)FIFO严格的遵循先进先出规则。10 标准流管道:将一系列的创建过程合并到一个函数popen()中完成。 创建一个管道;建立一个子进程;在父子进程中关闭不需要的文件描述符;执行exec函数族调用;执行函数中所指定的命令。11 信号:可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空
24、间进程发生了哪些系统事件。它可以在任何时候发给某一进程,而无需知道该进程的状态。如果该进程当前并未处于执行态,则该信号就由内核保存起来,知道该进程回复执行再传递給它为止;如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被取消时才被传递给进程。12 使用信号量通常分为4步骤:(1)创建信号量或获得在系统已存在的信号量,此时需要调用semget()函数。不同进程通过使用同一个信号量键值来获得同一信号量。(2)初始化信号量,此时使用semctl()函数的SETVAL操作。当使用二维信号量时,通常将信号量初始化为1。(3)进行信号量的PV操作,此时调用semop()函数。实现进程之间的同
25、步和互斥的核心工作部分。(4)如果不需要信号量,则从系统中删除它,此时使用semctl()函数的IPC_RMID操作。此时需要注意,在程序中不应该出现对已经被删除的信号量的操作。13 共享内存的实现:(1)创建共享内存,用函数shmget(),从内存中获得一段共享内存区域。(2)映射共享内存,把这段创建的共享内存映射到具体的进程空间中,这里使用shmat()。14 消息队列的实现:创建或打开消息队列,添加消息,读取消息和控制消息队列。15 PV原子操作:对整数计数器信号量的操作P操作:如果有可用的资源(信号量值0),则占用一个资源(给信号量值减去一,进入临界区代码);如果没有可用的资源(信号量
26、值等于0),则被阻塞到,直到系统将资源分配给该进程(进入等待队列,一直等到资源轮到该进程)。V操作:如果在该信号量的等待队列中有进程在等待资源,则唤醒一个阻塞进程。如果没有进程等待它,则释放一个资源(给信号量值加一)。16 线程属性:绑定属性;分离属性;堆栈属性;堆栈大小;优先级17 绑定属性定义:指一个用户线程固定地分配给一个内核线程,因为CPU时间片的调度是面向内核线程的,因此具有绑定属性的线程可以保证在需要的时候总有一个内核线程与之对应。非绑定属性:指用户线程和内核线程的关系不是始终固定的,而是由系统来控制分配的。第七章 网络编程1 OSI模型和TCP/IP参考模型层次:应用层;表示层;
27、会话层;传输层;网络层;数据链路层;物理层2 TCP/IP分层模型中有两大边界特性:一个是地址边界特性,它将IP逻辑地址与底层网络的硬件地址分开;一个是操作系统边界特性,它将网络应用与协议软件分开。3 套接字类型:流式套接字;数据包套接字;原是套接字4.网络高级编程:三种解决I/O多路复用的解决方法,分别为非阻塞和异步式处理(使用fcntl()函数)以及多路复用处理(使用select()或poll()函数) 第八章 设备驱动编程1 Linux系统的设备分类:字符设备(像普通文件或字节流);块设备(一些需要以块为单位随机读写的设备);网络设备(通过网络能够与其他主机进行数据通信的设备)2 设备驱
28、动程序的特点:(1)内核代码;(2)内核接口;(3)内核机制和服务;(4)可装载;(5)可设置;(6)动态性3 重要的内核数据结构:file_operation(函数) file(表示打开的文件描述符) inode(表示文件)课后题1.什么是嵌入式系统,它具有哪些特点?从各方面比较嵌入式系统与通用计算器的区别:解:嵌入式系统是以应用为中心,以计算机控制系统为基础,并且软硬件可剪裁,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。特点:(1)面向特定应用(2)软硬件都高效的设计、剪裁适当。(3)是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物
29、。(4)高执行速度和可靠性。(5)代码高质量、高可靠性。(6)本身不具备二次开发功能。区别:嵌入式系统与通用计算机系统有着完全不同的技术要求和技术发展方向。通用计算机系统的技术要求是高速、海量的数值计算,其技术发展方向是总线速度的无限提升、存储容量的无限扩大;而嵌入式计算机系统的技术要求则是智能化控制,技术发展方向是与对象系统密切相关的潜入性能、控制能力与控制的可靠性不断提高。 嵌入式系统(简称“嵌”)和通用计算机(简称“通”)的主要区别包括以下几点:(1)形式与类型 :“通”:实实在在的计算机。按其体系结构、运算速度和规模可分为大型机、中型机、小型机和微机 “嵌”:“看不见”的计算机,形式多
30、样,应用领域广泛(2)按应用进行分类组成 : “通”:通用处理器、标准总线和外设、软硬件相对独立 “嵌”:面向特定应用的微处理器,总线和外设一般集成在处理器内部,软硬件紧密结合(3)系统资源 : “通”:系统资源充足,有丰富的编译器、集成开发环境、调试器等 “嵌”:系统资源紧缺,没有编译器等相关开发工具(4)开发方式 : “通”:开发平台和运行平台都是通用计算机 “嵌”:采用交叉编译方式,开发平台一般是通用计算机,运行平台是嵌入式系统(5)二次开发性 : “通”:应用程序可重新编程 “嵌”:一般不能重新编程开发(6)发展目标 : “通”:编程功能电脑,普遍进入社会 “嵌”:变为专用电脑,实现“
31、普及计算”2.嵌入式系统由哪些部分组成?常用的嵌入式操作系统有哪些?分别有什么特点?解:由硬件设备、嵌入式操作系统和应用软件组成。常用的嵌入式操作系统:(1)嵌入式Linux:低成本、多硬件支持、优异的性能和良好的网络支持。(2)C/OS-:免费公开源代码,结构小巧、基于优先级的可抢先的硬实时内核。(3)VxWorks:实时性好,延迟短。(4)QNX:分布式、嵌入式、可扩展,核心小巧,运行速度很快。(5)windows CE:图形界面相当出色。(6)Palm OS:优秀的移动设备的支持,最明显的特点是精简。3.CISC处理器和RISC处理器分别有哪些优点和缺点?指标RISCCISC流水线一个周
32、期执行一条指令,通过简单指令的组合实现复杂操作;指令长度固定指令长度不固定,执行需要多个周期寄存器流水线没周期前进一步指令的执行需要调用微代码的一个微程序Load/Stroe结构独立的Load和Store指令完成数据在寄存器和外部存储器之间的传输处理器能够直接处理存储器中的数据4.简述ARM处理器和各个系列的特点。(1)ARM7内核采用冯诺伊曼体系结构,数据和指令使用同一条总线。内核有一条3级流水线,执行ARMv4指令集。(2)ARM9采用5级指令流水线,能够运行在比ARM7更高的时钟频率上,改善了处理器的整体性能;存储器系统根据哈佛体系结构重新设计,区分了数据总线和指令总线。(3)ARM9系
33、列的下一代处理器基于ARM9E-S内核,这个内核是ARM9内核带有E扩展的一个可综合版本,执行v5TE架构指令。(4)ARM1020E和ARM1020E处理器核,其核心在于使用向量浮点(VFP)单元VFP10提供高性能的浮点解决方案,从而极大提高了处理器的整型和浮点运算性能。(5)ARM10E系列处理器采用了新的节能模式,提供了64位的Load/Store体系,系统集成更加方便,拥有完整的硬件和软件开发工具。5.什么是交叉编译?为什么进行交叉编译?解:交叉编译是指在一个平台上生成可以在另一个平台上执行的代码。原因是由于不同的体系结构有不同的指令系统。因此,不同的cpu需要有相应的编译器,而交叉
34、编译就如同翻译一样,把相同的程序代码翻译成不同的cpu的对应的可执行的二进制文件。6.嵌入式开发的常用调试手段有哪几种?说出它们各自的优缺点:嵌入式的调试手段主要是交叉调试:嵌入式系统的交叉调试有多种方法,主要可分为软件方式和硬件方式两种。调试器和被调试进程运行在不同的机器上,调试器运行在PC机(宿主机),而被调试的进程则运行在各种专业调试板上(目标板)。 调试器通过某种通信方式(串口、并口、网络、JTAG等)控制被调试进程。在目标机上一般会具备某种形式的调试代理,它负责与调试器共同配合完成对目标机上运行着的进程的调试。这种调试代理可能是某些支持调试功能的硬件设备,也可能是某些专门的调试软件(
35、如gdbserver)。目标机可能是某种形式的系统仿真器,通过在宿主机上运行目标机的仿真软件,整个调试过程可以在一台计算机上运行。此时物理上虽然只有一台计算机,但逻辑上仍然存在着宿主机和目标机的区别。 7.设计一个汉诺塔游戏:#includevoid move(int n,char source,char target) printf(第%d个盘子从%c移到%c.n,n,source,target);void hanoi(int n,char A,char B,char C) if(n=1) move(1,A,C) else hanoi(n-1,A,C,B); hanoi(n,A,C); ha
36、noi(n-1,B,A,C); void main() int num; scanf(%d,&num); hanoi(num,A,B,C);8.在主机上搭建交叉编译环境,并用交叉编译器编译hello.c程序:(1)将压缩包解压至一个目录下;(2)查看并修改环境变量:echo $PATH查看export PATH=$PATH:/opt/host/arm4l/binsource /etc/exportsarmval-unknown-linux-gcc hello.c -o hello9.移植与编译FS2410目标板平台的U-Boot、内核。U-Boot不用看了,太难不考。内核配置:(1)下载内核源
37、码,解压;(2)修改内核目录树跟下的Makefile,指明交叉编译器(3)设置环境变量(4)配置内核产生的.config文件(5)运行make menuconfig 命令进行配置(6)make zImage命令来生成镜像文件(7)将镜像复制到nfs的共享目录下,进行烧写10.在主机上安装和配置minicom、tftp、nfs等应用程序和服务器,并通过软件进行嵌入式的应用程序的开发。minicom -s 打开minicom的配置界面修改A - Serial Device 为/dev/ttyS0 E - Bps/Par/Bits: 8N1 进入后调传输率为,奇偶校验位等设置然后保存退出tftp的配
38、置不用搭建了,跟nfs的作用是一样的,上课时咱们讲的用的是nfs。nfs的搭建过程:1).新建一个用于网络共享的目录,通常是建立/home/nfs2).在终端运行setup,关掉防火墙。3).修改/etc/export配置文件,添加/home/nfs (rw)4).ifconfig eht0 192.168.0.2 配置ip地址5).建立挂载目录 mkdir /mnt/yaffs6).启动nfs服务 server nfs start7).挂载nfs mount 192.168.0.2:/mnt/yaffs /home/nfs11.简述虚拟文件系统在linux系统中的重要地位和通用文件系统模型。
39、VFS是将各种具体的文件系统的公共部分抽取出来,形成一个抽象层,是系统内核的一部分。位于用户程序和具体的文件系统之间,对用户程序提供了标准的文件系统调用接口。对于不同具体的文件系统,它通过一系列的对不同文件系统公用的函数指针来实际调用具体的文件系统函数,完成实际的各有差异的操作。任何使用文件系统的程序必须经过这层接口来使用它。通过这种方式,VFS对用户屏蔽了底层文件系统的实现细节和差异。通用文件模型,核心是4个对象类型:超级块对象:是用来描述整个文件系统的信息;索引节点对象:存放关于具体文件的一般信息;目录项对象:存放目录项与对应文件链接的信息;文件对象:用于表示一些进程已打开的文件。12.底
40、层文件操作和标准文件操作之间有哪些区别(1)底层文件操作没有缓存,标准文件操作有全缓冲、行缓冲和不带缓冲三种形式。(2)底层文件的读写操作需要每次都进行read和write函数的调用,标准的文件操作只进行一次read和write操作即可。13.什么叫多任务系统?任务、进程、线程分别是什么?它们之间有什么区别?多任务处理:用户可以在同一时间内运行多个应用程序,每个应用程序被称作一个任务。任务:由一个软件完成的活动,或者是一系列共同达到某一目的的操作。通常一个任务是一个程序的一次运行,一个任务包含一个或多个完成独立功能的子任务,这个独立的子任务是进程或者是线程。 进程:是指一个具有独立功能的程序在
41、某个数据集合上的一次动态执行过程,它是系统进行资源分配和调度的基本单元。线程:它是进程内独立的一条运行路线,处理器调度的最小单元,也可以称为轻量级进程。区别:程序是静态的一段代码,是一些保存在非易失性存储器的指令的有序集合,没有任何执行的概念; 进程是一个动态的概念,它是程序执行的过程,包括了动态创建、调度和消亡的整个过程,它是程序执行和资源管理的最小单位。 14.简述linux下进程管理机制的工作原理:进程的创建和执行:fork()和exec函数族fork()通过拷贝当前进程创建一个子进程,子进程与父进程的区别仅仅在于不同的PID、PPID和某些资源及统计量。exec函数族负责读取可执行文件并将其载入地址空间开始运行。进程的终止:Linux首先把终止的进程设置为僵尸状态,这个时候,进程无法投入运行了,它的存在只为父进程提供信息,申请死亡。父进程得到信息后,开始调用wait函数族,最终赐死子进程,子进程占用的所有资源被全部释放。15.分析在linux内核中如何实现fork()函数:fork()函数用于从已存在的进程中创建一个新进程。使用fork()函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,而子进程所独有的只有它的进程号、资源使用和计时器等。