完整嵌入式Linux考试复习.docx
《完整嵌入式Linux考试复习.docx》由会员分享,可在线阅读,更多相关《完整嵌入式Linux考试复习.docx(21页珍藏版)》请在冰豆网上搜索。
完整嵌入式Linux考试复习
1、两次过程考核(20分左右)
2、嵌入式系统的定义
嵌入式系统是以应用为中心,以计算机技术为基础,采用可剪裁软硬件,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统,用于实现对其他设备的控制、监视或管理等功能
3、嵌入式系统与桌面通用系统的区别(列出来两个)
(1)嵌入式系统中运行的任务是专用而确定的,而桌面通用系统需要支持大量的、需求多样的应用程序
(2)嵌入式系统往往对实时性提出较高的要求.
(3)嵌入式系统中使用的操作系统一般是实时操作系统
(4)嵌入式系统运行需要高可靠性保障,比桌面系统的故障容忍能力弱很多
(5)嵌入式系统大都有功耗约束
(6)嵌入式系统比桌面通用系统可用资源少得多,其开发需要专用工具和特殊方法
(7)嵌入式系统开发是一项综合的计算机应用技术
4、(填空)文件的类型;ls–l命令执行后后显示的文件各个属性的意思
文件的类型:
普通文件,目录文件,链接文件,设备文件,管道,堆栈,套接字
各个属性:
(1)第一个字符显示文件的类型
(2)第一个字符之后有3个三位字符组:
第一个三位字符组表示对于文件拥有者(u)对该文件的权限;
第二个三位字符组表示文件用户组(g)对该文件的权限;
第三个三位字符组表示系统其他用户(o)对该文件的权限;
若该用户组对此没有权限,一般显示“-”字符
5、(选择题)文件系统
ext2和ext3
swap文件系统
vfat文件系统
NFS文件系统
ISO9660文件系统
内存文件系统:
proc、sys、ramdisk
嵌入式文件系统:
cramfs、jffs、yaffs等
6、linux目录结构下面放什么(了解常用)
/bin该目录中存放Linux的常用命令
/boot该目录下存放的都是系统启动时要用到的程序
/dev该目录包含了Linux系统中使用的所有外部设备,它实际上是访问这些外部设备的端口,你可以访问这些外部设备,与访问一个文件或一个目录没有区别
/usr用户应用程序和文件都存放在该目录下
/etc该目录存放了系统管理时要用到的各种配置文件和子目录,例如网络配置文件、文件系统等.
/home用来存放该用户的主目录.
/lib该目录用来存放系统动态连接共享库,几乎所有的应用程序都会用到该目录下的共享库
/mnt该目录在一般情况下也是空的,你可以临时将别的文件系统挂在该目录下
7、文件比较命令(必考)
diff:
比较两个不同的文件或不同目录下的两个同名文件功能,并生成补丁文件。
格式:
diff[选项]文件1文件2
diff比较文件1和文件2的不同之处,并按照选项所指定的格式加以输出。
diff的格式分为命令格式和上下文格式,其中上下文格式又包括了旧版上下文格式和新版上下文格式,命令格式分为标准命令格式、简单命令格式及混合命令格式,它们之间的区别会在使用实例中进行详细地讲解。
当选项缺省时,diff默认使用混合命令格式。
8、网络相关命令
ifconfig:
查看和配置网络接口的参数
ifconfig[选项][网络接口]
ftp:
利用ftp协议上传和下载文件
telnet:
利用telnet协议浏览信息
telent[选项][IP地址/域名]
9、GCC编译器能编译哪些程序?
编译的四个过程?
常见编译选项?
可以编译如C、C++、ObjectC、Java、Fortran、Pascal、Modula-3和Ada等多种语言
四个过程:
预处理,编译,汇编,链接
常见编译选项:
10、知道动态库和静态库扩展名(必考)
动态库:
。
so
静态库:
。
a
11、GDB调试:
list加行号,查看当前信息,实验的相关操作(必考)
12、makefile:
过程考核题目;使用变量(那个例子必考)
Makefile格式:
target:
dependency_files
〈TAB>command/*该行必须以tab键开头*/
如:
hello。
o:
hello。
chello.h
gcc–chello。
c–ohello.o
自定义变量:
用来代替一个文本字符串
变量定义的两种方式
递归展开方式VAR=var
简单方式VAR:
=var
变量使用$(VAR)
自动变量:
$@:
目标文件,$∧:
所有的依赖文件,$<:
第一个依赖文件。
13、交叉编译时宿主机与目标机间的连接方式
(1)串行通讯接口
(2)以太网接口
(3)USB接口
(4)JTAG等接口
14、主机环境变量配置最后一个实验
/etc/profile是系统启动过程执行的一个脚本,对所有用户都生效。
~/。
bash_profile是用户的脚本,在用户登录时生效。
~/。
bashrc也是用户的脚本,在~/。
bash_profile中调用生效。
把环境变量配置的命令添加到其中一个文件中,之后再注销重新登录即可。
PATH=$PATH:
/usr/share/jdk1。
5.0_05jdk
exportPATH
注解:
a.将/usr/share/jdk1。
5.0_05jdk改为你的应用程序安装目录
b。
linux下用冒号“:
"来分隔路径
c。
$PATH/$CLASSPATH/$JAVA_HOME是用来引用原来的环境变量的值,在设置环境变量时特别要注意不能把原来的值给覆盖掉了,这是一种常见的错误。
d.export是把个变量导出为全局变量。
15、串口命令台(参考实验)
串行通讯接口很适合作为控制台,在各种操作系统上一般都有现成的控制台程序可以使用.Linux系统通常使用minicom串口通讯工具。
Minicom的配置界面是菜单方式。
在Shell下执行“minicom–s"命令,出现配置菜单。
15、bootloader的作用?
常见的有哪些?
作用:
初始化硬件设备、建立内存空间的映射图,下载操作系统映像文件到SDRAM中,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境
常见:
u—boot,vivi,blob
16、系统调用和API
系统调用是指操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊"接口来获得操作系统内核提供的服务。
在实际使用中程序员调用的通常是用户编程接口—-API
17、文件描述符
文件描述符是一个非负的整数,它是一个索引值,并指向在内核中每个进程打开文件的记录表。
对于Linux而言,所有对设备和文件的操作都是使用文件描述符来进行的。
当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数
一个进程启动时,都会打开3个文件:
0:
标准输入
1:
标准输出
2.标准出错
18、IO处理模型的概念
(1)阻塞I/O模型
(2)非阻塞模型
(3)I/O多路转接模型
(4)信号驱动I/O模型
(5)异步I/O模型
19、进程和程序区别和联系
程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念;而进程是一个动态的概念,它是程序执行的过程,包括了动态创建、调度和消亡的整个过程.它是程序执行和资源管理的最小单位.
20、进程控制块包括哪些信息?
进程控制块包含了进程的描述信息、控制信息以及资源信息
(1)进程标识符
(2)处理机的信息
(3)进程调度信息
(4)进程控制信息
状态转换图:
21、linux中的进程包含哪些段?
Linux中的进程包含3个段,分别为“数据段”、“代码段”和“堆栈段".
22、fork()函数的返回值及每个参数的含义
实际上是在父进程中执行fork()函数时,父进程会复制出一个子进程,而且父子进程的代码从fork()函数的返回开始分别在两个地址空间中同时运行.可以通过返回值来判定该进程是父进程还是子进程.
23、exec作用
exec函数族就提供了一个在进程中启动另一个程序执行的方法。
(它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了。
)
24、进程间通信:
信号量;通信的种类;深入了解信号的来源、分类、生命周期、处理方式
通信的种类:
(1)管道(Pipe)及有名管道(namedpipe)
(2)信号(Signal)
(3)消息队列(MessgeQueue)
(4)共享内存(Sharedmemory)
(5)信号量(Semaphore)
(6)套接字(Socket)
信号来源:
硬件的原因(比如我们按下了键盘);
软件的原因(比如我们使用系统函数或者是命令发出信号).
信号的种类:
SIGTRMIN:
不可靠信号
SIGTRMAX:
可靠信号
信号生命周期:
一个完整的信号生命周期可以分为3个重要阶段,这3个阶段由4个重要事件来刻画的:
信号产生、信号在进程中注册、信号在进程中注销、执行信号处理函数
信号处理方式:
用户进程对信号的响应可以有3种方式。
忽略信号,即对信号不做任何处理,但是有两个信号不能忽略,即SIGKILL及SIGSTOP。
捕捉信号,定义信号处理函数,当信号发生时,执行相应的自定义处理函数。
执行缺省操作,Linux对每种信号都规定了默认操作。
25、线程的作用?
线程的作用:
(1)进一步减少处理机的空转时间
(2)支持多处理器
(3)减少上下文切换开销
26、信号量同步或者互斥锁
同步与互斥参照“生产者和消费者”实验
27、socket编程:
概念,表示方法,类型,两个数据结构和转化
概念:
在Linux中的网络编程是通过socket接口来进行的。
socket是一种特殊的I/O接口,它也是一种文件描述符。
它是一种常用的进程之间通信机制,通过它不仅能实现本地机器上的进程之间的通信,而且通过网络能够在不同机器上的进程之间进行通信。
表示方法:
每一个socket都用一个半相关描述{协议、本地地址、本地端口}来表示
类型:
(1)流式socket(使用TCP协议)
(2)数据报socket(使用UDP协议)
(3)原始socket(使用IP或ICMP进行直接访问)
两个数据结构:
structsockaddr{
unsignedshortsa_family;/*地址族*/
charsa_data[14];/*14字节的协议地址,包含该socket的IP地址和端口号。
*/
};
structsockaddr_in
{
shortintsa_family;/*地址族*/
unsignedshortintsin_port;/*端口号*/
structin_addrsin_addr;/*IP地址*/
unsignedcharsin_zero[8];/*填充0以保持与structsockaddr同样大小*/
};
转化:
数据存储优先顺序的转化
地址格式转化
名字地址转化
28、accept函数(必考),阻塞和非阻塞通信
accept函数等待并接受客户请求:
函数原型:
intaccept(intsockfd,structsockaddr*addr,socklen_t*len)
返回:
非负描述字——成功,-1——失败
参数sockfd就是上面解释中的监听套接字,这个套接字用来监听一个端口,当有一个客户与服务器连接时,它使用这个一个端口号。
参数addr,是一个结果参数,它用来接受一个返回值,这返回值指定客户端的地址,如果对客户的地址不感兴趣,那么可以把这个值设置为NULL.
参数len,也是结果的参数,用来接受上述addr的结构的大小的,它指明addr结构所占有的字节个数。
同样的,它也可以被设置为NULL。
如果accept成功返回,则服务器与客户已经正确建立连接了,此时服务器通过accept返回的套接字来完成与客户的通信。
阻塞式通信是指,当试图对文件描述符进行读写时,如果当时没有东西可读,或者暂时不可写,程序就进入等待状态,直到有东西可读或者可写为止.而对于非阻塞状态,如果没有东西可读,或者不可写,读写函数马上返回,而不会等待
29、设备分类,设备驱动程序与外界的接口(了解实现)
Linux系统的设备分为三类:
字符设备、块设备和网络设备
Linux设备驱动程序与外界的接口可以分为如下3个部分:
(1)驱动程序与操作系统内核的接口:
这是通过数据结构file_operations来完成的。
(2)驱动程序与系统引导的接口:
这部分利用驱动程序对设备进行初始化
(3)驱动程序与设备的接口:
这部分描述了驱动程序如何与设备进行交互,这与具体设备密切相关。
30、file—operaions(重点)
structfile_operations
{
loff_t(*llseek)(structfile*,loff_t,int);
ssize_t(*read)(structfile*filp,char*buff,size_tcount,loff_t*offp);
ssize_t(*write)(structfile*filp,constchar*buff,size_tcount,loff_t*offp);
int(*readdir)(structfile*,void*,filldir_t);
unsignedint(*poll)(structfile*,structpoll_table_struct*);
int(*ioctl)(structinode*,structfile*,unsignedint,unsignedlong);
int(*mmap)(structfile*,structvm_area_struct*);
int(*open)(structinode*,structfile*);
int(*flush)(structfile*);
int(*release)(structinode*,structfile*);
int(*fsync)(structfile*,structdentry*);
int(*fasync)(int,structfile*,int);
int(*check_media_change)(kdev_tdev);
int(*revalidate)(kdev_tdev);
int(*lock)(structfile*,int,structfile_lock*);
};
31、为什么是释放设备而不是关闭?
因为可能有其他应用程序还使用该设备。
当一个进程释放设备时,其他进程还能继续使用该设备,而当一个进程关闭设备时,其他进程必须重新打开此设备才能使用它。
32、(程序填空题)底层IO操作的例子
/*copy_file。
c*/
#include
#includeh〉
#include
#include〈fcntl.h〉
#includeh〉
#includeh>
#defineBUFFER_SIZE1024/*每次读写缓存大小,影响运行效率*/
#defineSRC_FILE_NAME"src_file"/*源文件名*/
#defineDEST_FILE_NAME”dest_file”/*目标文件名文件名*/
#defineOFFSET10240/*复制的数据大小*/
intmain()
{
intsrc_file,dest_file;
unsignedcharbuff[BUFFER_SIZE];
intreal_read_len;
/*以只读方式打开源文件*/
src_file=open(SRC_FILE_NAME,O_RDONLY);
/*以只写方式打开目标文件,若文件不存在则创建该文件,访问权限值为644*/
dest_file=open(DEST_FILE_NAME,O_WRONLY|O_CREAT,
S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
if(src_file<0||dest_file〈0)
{
printf(”Openfileerror\n”);
exit
(1);
}
/*将源文件的读写指针移到最后10KB的起始位置*/
lseek(src_file,-OFFSET,SEEK_END);
/*读取源文件的最后10KB数据并写到目标文件中,每次读写1KB*/
while((real_read_len=read(src_file,buff,sizeof(buff)))>0)
{
write(dest_file,buff,real_read_len);
}
close(dest_file);
close(src_file);
return0;
}
嵌入式系统PPT归纳总结
Linux常用操作命令
su:
用于将普通用户身份转变为超级用户
su[选项][使用者]
ps:
显示当前系统中由该用户运行的进程列表
ps[选项]
top:
动态显示系统中运行的程序(一般为每隔5s)top
kill:
输出特定的信号给指定PID(进程号)的进程
kill[选项]进程号(PID)
uname显示系统的信息(可加选项—a)
uname[选项]
setup:
系统图形化界面配置
setup
shutdown:
关闭或重启Linux系统
shutdown[选项][时间]
clear:
清除屏幕上的信息
clear
free:
查看当前系统内存的使用情况
free[选项]
mount:
挂载文件系统
mount[选项][类型]设备文件名挂载点目录
cd:
改变当前工作目录
cd[路径]
ls:
列出目录和文件的信息
ls[选项][文件]
mkdir:
创建一个目录
mkdir[选项]路径
cat:
连接并显示指定的一个和多个文件的有关信息。
cat[选项]文件1文件2…
其中的文件1、文件2为要显示的多个文件。
cp:
将给出的文件或目录复制到另一文件或目录中.
cp:
cp[选项]源文件或目录目标文件或目录
mv:
为文件或目录改名或将文件由一个目录移入另一个目录中。
mv[选项]源文件或目录目标文件或目录
rm:
删除一个目录中的一个或多个文件或目录.
rm[选项]文件或目录
34、静态库与动态库的比较
动态库只有在使用它的程序执行时才被链接使用,而不是将需要的部分直接编译入可执行文件中,并且一个动态库可以被多个程序使用故可称为共享库,而静态库将会整合到程序中,因此在程序执行时不用加载静态库
35、嵌入式Linux系统从软件的角度看通常可以分为四个层次:
(1)。
引导加载程序
(2).Linux内核。
(3).文件系统。
(4)。
用户应用程序.
4、底层文件IO常用函数:
36、进程是Linux系统的基本调度和管理资源的单位,它是通过进程控制块来描述的。
37、进程的执行模式:
用户模式和内核模式。
用户模式:
运行的是用户程序/应用程序或者内核之外的系统程序;
内核模式:
运行操作系统核心程序.
用户程序执行过程中出现系统调用或者发生中断事件,用户模式切换成内核模式.
38、socket编程的基本函数有socket()、bind()、listen()、accept()、send()、sendto()、recv()以及recvfrom()等,其中根据客户端还是服务端,或者根据使用TCP协议还是UDP协议,这些函数的调用流程都有所区别。
39、网络通信时两种套接字:
监听套接字:
在调用listen函数之后,一个套接字会从主动连接的套接字变身为一个监听套接字
连接套接字:
accept返回是一个连接套接字,它代表着一个网络已经存在的点对点连接。
40、模块在调用insmod命令时被加载,此时的入口点是init_module()函数,通常在该函数中完成设备的注册。
同样,模块在调用rmmod命令时被卸载,此时的入口点是cleanup_module()函数,在该函数中完成设备的卸载。