linux复习资料.docx
《linux复习资料.docx》由会员分享,可在线阅读,更多相关《linux复习资料.docx(14页珍藏版)》请在冰豆网上搜索。
![linux复习资料.docx](https://file1.bdocx.com/fileroot1/2023-1/23/3a0b7c18-84d3-4c5d-8ba3-b9e1c9dd647f/3a0b7c18-84d3-4c5d-8ba3-b9e1c9dd647f1.gif)
linux复习资料
根据IEEE(国际电机工程师协会)的定义,嵌入式系统是“devicesusedtocontrol,monitor,orassisttheoperationofequipment,machineryorplants”(即“控制、监视或者辅助机器和设备运行的装置”之意)。
业界有多种不同的关于嵌入式系统(EmbeddedSystem)的定义,被大多数人所接受的是根据嵌入式系统的特点下的定义:
“以应用为中心、以计算机技术为基础、软件硬件可裁剪,功能、可靠性、成本、体积、功耗严格要求的专用计算机系统”。
嵌入式系统的特点:
与通用计算机相比,嵌入式系统具有以下显著特点
•嵌入式系统是专用的计算机系统,因此通常含有面向某种特定应用的嵌入式CPU。
•嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合的产物,因此可以说嵌入式系统不从属于任何一门学科,但是却横跨了多门学科。
•嵌入式系统的硬件和软件设计必须达到功耗低、体积小、集成度高、成本低的目标。
•嵌入式系统和具体应用有机的结合在一起,运行环境差异大,且具有较长的生命周期。
•为了提高执行速度和系统可靠性,嵌入式软件系统一般都固化在非易失性存储器中。
•嵌入式系统本身不具有自举开发能力,因此需要进行交叉编译,即必须有一套开发工具和环境才能进行开发。
嵌入式系统与单片机、传统PC的区别
嵌入式系统
PC机
引导代码
BootLoader引导,针对不同电路板进行移植
主板的BIOS进行引导,因此无需改动
操作系统
WinCE、VxWorks、Linux等,需要移植
Windows、Linux等,不需要移植
驱动程序
每个设备驱动必须重新开发和移植,一般不能直接下载使用
操作系统含有大多数驱动程序,从网上下载直接使用
协议栈
需要移植
操作系统包括,或第三方提供
开发环境
借助服务器进行交叉编译
在本机就可开发调试
仿真器
需要
不需要
一个完整的嵌入式系统包括硬件部分和软件部分。
一般的嵌入式系统硬件可分为如下几个部分:
嵌入式微处理器、存储器、输入/输出设备、通信及扩展接口。
所谓交叉编译,就是利用运行在某台计算机(宿主机)上的编译器编译某个源程序,生成在另一台机器(目标机)上运行的目标代码的过程。
嵌入式系统的抽象架构
(1)硬件层:
硬件层由嵌入式微处理器、外围电路和外设组成。
(2)中间层:
硬件层与软件层之间为中间层,也称为BSP(BoardSupportPackage,即板级支持包),将系统软件与底层硬件部分隔离,使得系统的底层设备驱动程序与硬件无关
(3)软件层:
软件层主要是操作系统,有的还包括文件系统、图形用户接口和网络系统等。
(4)功能层:
功能层由基于操作系统开发的应用程序组成,用来完成对被控对象的控制功能。
实时系统指工作在实时计算模式下的计算机系统,其任务就是执行与外部技术过程相关的程序,程序的处理必须在时间上与外部过程发生的事件同步,即对外来事件在规定的时限内做出反应。
实时计算机系统总是嵌入在于某个客观的应用环境中。
衡量实时系统的实时指标主要有:
响应时间(ResponseTime)、响应时间确定性(Deterministic)、吞吐量(Throughput)和生存时间(SurvivalTime)。
其中响应时间及响应时间确定性是实时系统和实时应用的关键技术指标,也是设计实时系统和实时应用要考虑的首要因素。
嵌入式系统的开发流程
嵌入式系统的开发流程包括五个阶段:
需求分析、体系结构设计、硬件/软件设计、系统集成和代码固化。
各个阶段之间要求不断反复修改,直到目标完成。
(1)需求分析阶段:
所谓“需求分析”,是指对要解决的问题进行详细的分析,弄清楚问题的要求,包括需要输入什么数据,要得到什么结果,最后应输出什么
(2)体系结构设计阶段:
根据需求分析提炼出来的规格说明书,进行体系结构设计。
系统体系结构描述了系统如何实现相应的功能和需求。
(3)硬件/软件设计阶段:
在基于对体系结构设计的基础上,对系统的硬件和软件进行详细设计。
(4)系统集成阶段:
在该阶段,之前设计的硬件模块和软件模块将进行整合并调试。
(5)代码固化阶段:
嵌入式软件开发完成时,几乎所有的软件都要在非易失性存储器中运行。
因此程序需要在Flash中固化,保证机器断电的时候程序不会消失。
ARM的工作模式有7种:
用户模式(usr)
正常的程序执行模式
快速中断模式(fiq)
支持高速数据传输或通道处理
中断模式(irq)
用于通用中断处理
管理员模式(svc)
操作系统的保护模式
中止模式(abt)
支持虚拟内存和/或内存保护等异常
系统模式(sys)
支持操作系统的特殊用户模式(运行操作系统任务)
未定义模式(und)
支持硬件协处理器的软件仿真
Linux的特点
(1)完全免费且开源
由于用户可以通过网络或其他途径免费获得Linux,并可以任意修改其源代码,因此全世界的程序员都能够参与Linux的修改和编写工作
(2)完全兼容POSIX1.0标准
Linux能够兼容其他各种操作系统的书写习惯和风格,因此习惯使用其他操作系统的用户能够快速适应Linux环境。
(3)良好的可移植性
所谓可移植性,是指能够完成某个软件在不同硬件体系结构之间的转移。
由于Linux软件大部分是开源的,因此只要使用不同的编译器进行编译就可以完成相应的移植。
所以说Linux是移植性很强的操作系统,这对于嵌入式开发来说尤其重要。
(4)设备独立性
设备独立性是指操作系统把所有外部设备描述成文件形式,只要安装驱动程序,就可以像操作文件一样来操作这些设备。
具有设备独立性的操作系统能够容纳任意种类和数量的设备,而且可以建立每个设备和内核之间的访问连接。
(5)内核稳定
Linux拥有一个多用户、多任务且功能强大的内核,不仅能够满足各种应用需要,而且使用了多种安全机制来协助完成文件和用户管理等工作。
(6)丰富的应用软件
几乎所有的Linux发行版都包含丰富的应用软件,而且大部分软件遵循GNU规则,因而能够非常方便地完成移植工作。
另外,在Linux发行版本中还包含大量的软件开发工具,能够开发出更多的应用程序。
(7)两种操作方式
在Linux操作系统中,可以使用终端进行文本输入,也可以使用X图形界面进行操作。
文本输入对于命令、编译等操作而言非常方便,而图形界面则适合进行批量文件操作和图形软件开发。
因此,这两种操作方式可以互相弥补,从而提高操作系统的使用效率。
Linux作为嵌入式系统的优势
(1)可应用多种编译硬件平台
(2)开源免费
(3)高度模块化
(4)开发工具
(5)交叉编译
Linux操作系统由内核、Shell、文件系统和应用程序四部分组成。
内容
功能
内核
内核是一个操作系统最基本的组成部分,在应用程序访问硬件时可用它来提供服务。
Shell
Shell是系统的用户界面,提供用户与内核的交互接口。
实际上,Shell是一个命令解释器,它接收并解释用户命令并把它们送到内核。
文件系统
文件系统是文件存放在磁盘等存储设备上的组织方法。
应用程序
标准Linux系统都有一套程序集,包括文本编辑器、编程语言、XWindow、办公套件、Internet工具、数据库等。
操作系统(OperatingSystem,OS)是一组能够管理电脑软硬件资源的程序,它能够管理内存、决定系统资源分配、控制输入输出设备以及管理网络文件等。
操作系统是一套复杂的管理控制程序,包括五个方面的管理功能:
进程与处理机管理、存储管理、设备管理、文件管理与用户管理。
一般来说,操作系统具有四个共同特征:
并发性(concurrence)、共享性(sharing)、虚拟性(virtual)和不确定性(asynchronism)。
引导系统就是在操作系统内核运行之前运行的一段小程序,其作用是初始化硬件设备、建立内存空间的映射图,并且为最终调用操作系统内核准备好正确的环境;
内核是一个操作系统的核心,负责管理系统的进程、存储、设备和文件等,它决定着系统的性能和稳定性;
根文件系统并不是一个具体的文件类型,而是一个理论性的概念,它作为VFS(VirtualFilesystemSwitcher)的根节点,可以帮助后者管理文件系统。
VFS是内核中提供的一种软件机制,能够提供实际各个文件系统的挂载点。
大多数引导系统都包含两种不同的操作模式:
•启动加载模式
•下载模式
1)启动加载模式
启动加载模式也称为“自主”(autonomous)模式。
引导系统从目标机上的某个固态存储设备中将操作系统加载到RAM中运行。
这种模式是引导系统的正常工作模式。
2)下载模式
在下载模式下,目标机上的引导系统将通过串口连接或网络连接等通信手段从主机下载文件。
从主机下载的文件通常首先被引导系统保存到目标机的RAM中,然后再被引导系统写到目标机上的FLASH类固态存储设备中。
这种模式通常在第一次安装内核与根文件系统时使用;此外,以后的系统更新也会使用引导系统的这种工作模式。
引导系统的stage1:
1)硬件设备初始化。
2)为加载引导系统的stage2准备RAM空间。
3)拷贝引导系统的stage2到RAM空间中。
4)设置好堆栈。
5)跳转到stage2的C入口点
引导系统的stage2:
1)初始化本阶段要用到的硬件设备。
2)检测系统内存映射(memorymap)。
3)将内核映像和根文件系统映像从flash上读到RAM空间中。
4)为内核设置启动参数。
5)调用内核。
文件系统包含两大类:
根文件系统和附加文件系统。
根文件系统是操作系统至少应该引导的一个文件系统,它包含了构建整个操作系统的基本程序和相关目录
附加文件系统则是除了根文件系统之外的所有文件系统,本身无法直接使用,需要挂载到根文件系统的某个目录下方可使用。
一般来说,开发驱动程序有两种方法。
一种方法是直接编译到内核,再运行新的内核来测试。
⏹在vivi下执行下面命令loadflashkernelx,其作用是什么?
⏹此命令是装载压缩映像文件zImage到flash存储器中,地址是kernel分区,并采用xmodem传输协议。
⏹在vivi下执行下面命令loadflashucosx其作用是什么?
⏹此命令是装载压缩映像文件ucos到flash存储器中,地址是ucos分区,并采用xmodem传输协议。
键入bootucos命令再回车即可运行ucos程序。
⏹试写出执行ifconfigeth0192.168.1.1netmask255.255.255.0命令的含义。
⏹此命令是设置网卡1的地址192.168.1.1,掩码为255.255.255.0,不写netmask参数则默认为255.255.255.0。
⏹试写出执行mount-tnfs192.168.1.1:
/sharedir/mnt命令的含义。
⏹此命令将nfs服务的共享目录sharedir加载到/mnt/nfs。
⏹嵌入式Linux的设备文件的属性是由哪三部分信息组成
⏹第一部分是文件的类型,第二部分是一个主设备号,第三部分是一个次设备号。
其中类型和主设备号结合在一起惟一地确定了设备文件驱动程序及其界面,而次设备号则说明目标设备是同类设备中的第几个。
⏹Linux中的设备可以分为哪三类?
⏹Linux中的设备可以分为三类:
字符设备,块设备和网络设备。
⏹有一模块module.o文件,在/lib/modules目录下。
写出装载和卸载模块的命令。
⏹首先从/lib/modules目录和内核相关的子目录中查找模块文件,如果需要从当前目录装载,可使用如下命令:
⏹#insmodmodule.o
⏹若要卸载该模块,可使用如下命令:
⏹#rmmodmodule.o
⏹怎样查看目标机上的设备的主次设备号?
⏹进入目标机后,查看/dev目录下的设备的主次设备号可以使用如下命令:
⏹[/mnt/yaffs]ls/dev-l
⏹一个运行的linux系统,当前使用的设备可以通过文件/proc/devices查看。
⏹向系统添加一个驱动程序相当于添加一个主设备号,写出字符型设备主设备号的添加和注销函数,并说明这两个函数原型在linux的何文件中说明。
⏹字符型设备主设备号的添加和注销分别通过调用函数register_chrdev()和unregister_chrdev()实现,这两个函数原型在文件说明。
⏹externintregister_chrdev(unsignedintmajor,constchar*name,structfile_operations*fops);
⏹externintunregister_chrdev(unsignedintmajor,constchar*name);
⏹这两个函数运行成功是返回0,运行失败返回一个负的错误码。
参数major对应所请求的主设备号,name对应设备的名字,fops对应于该设备的一个结构。
⏹简述数据结构file_operations的作用
⏹linux的内核内部通过file结构识别设备,通过file_operations数据结构提供文件系统的入口点函数,也就是访问设备驱动的函数。
这个数据结构的每一个成员的名字都对应着一个系统调用。
在用户进程利用系统调用对设备文件进行诸如read/write操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数,这就是Limux的设备驱动程序的工作原理。
在file_operations数据结构中,指出了设备驱动程序所提供的入口点位置。
⏹用insmod命令加载模块时,调用什么函数加载模块?
用rmmod命令来卸载模块时,调用什么函数卸载模块
⏹用insmod命令加载模块时,调用module_init(),而在module_init()中调用register_chrdev()完成字符设备注册;用rmmod命令来卸载模块时,会调用module_exit()函数,而在module_exit()函数中调用unregister_chrdev()来完成设备的注销。
⏹1、如下哪一个命令可以帮助你知道shell命令的用法:
A
AmanBpwdChelpDmore
⏹2.下列哪种循环shell不能处理:
B
AForBloopCwhileDuntil
⏹3、删除文件命令为:
D
A.mkdirB.rmdirC.mvD.rm
⏹4、用“useraddjerry”命令添加一个用户,这个用户的主目录是什么:
A
A./home/jerryB./bin/jerry
C./var/jerryD./etc/jerry
⏹5、如何从当前系统中卸载一个已装载的文件系统:
A
A.umountB.dismount
C.mount–uD.从/etc/fstab中删除这个文件系统项
⏹6、(B)命令可更改一个文件的权限设置?
A.attribB.chmod
C.changeD.file
⏹7、系统中有用户user1和user2,同属于users组。
在user1用户目录下有一文件file1,它拥有644的权限,如果user2用户想修改user1用户目录下的file1文件,应拥有(B)权限。
A.744B.664
C.646D.746
³可加载模块一般位于系统的(B)目录下:
A./lib/modules
B./lib/modules/x.y.z(x.y.z是内核的版本号)
C./usr/lib
D./usr/local/lib
³Linux文件权限一共10位长度,分成四段,第三段表示的内容是(C)。
A)文件类型
B)文件所有者的权限
C)文件所有者所在组的权限
D)其他用户的权限
³以下做法不利于嵌入式应用软件的移植的是。
(D)
A)在软件设计上,采用层次化设计和模块化设计
B)在软件体系结构上,在操作系统和应用软件之间引入一个虚拟机层,把一些通用的、共性的操作系统API接口函数封装起来
C)将不可移植的部分局域化,集中在某几个特定的文件之中
D)在数据类型上,尽量直接使用C语言的数据类型
⏹以下关于GCC选项说法不正确的是:
(B)。
A.-c只编译并生成目标文件
B.-w生成警告信息
C.-g生成调试信息
D.-oFILE生成指定的输出文件
⏹以下说法正确的是:
(AB)
(A)Linux文件名的长度不得超256个字符。
(B)DSP是专门用于数字信号处理方面的处理器。
(C)BootLoader属于嵌入式操作系统的一部分。
(D)chmod命令可用来修改处理器的运行模式。
⏹以下说法错误的是(BC)
(A)ARM处理器的运行模式可通过中断或异常处理改变。
(B)在2.6内核中,由于加入了抢占点,因此Linux成为了一种内核可抢占的操作系统。
(C)Linux中的ls命令的功能是变换工作目录到目标指定目录。
(D)Linux允许内核以NFS的形式连接根文件系统。
⏹以下说法正确的是(BC)
(A)根文件系统所在的分区越大越好,因为根分区越大,Linux启动速度越快。
(B)BootLoader是嵌入式系统运行的第一个程序。
(C)ARM包含37个通用寄存器。
(D)目前的ARM处理器采用的是哈佛体系结构。
⏹以下说法不正确的是(A)?
A.根文件系统是具有操作系统的嵌入式系统必须的组成部分。
B.Busybox常用于替代桌面系统中的init和shell等程序,为嵌入式用户提供使用环境。
C.二极管具有单向导通性。
D.ARM处理器的运行模式可通过中断或异常处理改变。
⏹按照ARM过程调用标准(APCS),栈指针使用(B)寄存器。
A.R0B.R13
C.R14D.R15
⏹以下那种设备是字符设备(D)。
A.hdcB.fd0
C.hda1D.tty1
⏹Linux系统能够直接读取的分区类型是(D)。
A.ntfsB.fat16
C.fat32D.ext3
⏹下面关于ARM处理器的体系结构描述哪一个是错误的(C)。
A.三地址指令格式
B.所有的指令都是单周期执行
C.指令长度固定D.Load-Store结构
⏹BootLoader的stage2通常使用C语言实现,以完成复杂的功能,并增加可读性和可移植性,以下哪一步骤属于stage2的内容:
(D)。
A.为加载BootLoader的stage2准备RAM空间
B.设置好堆栈
C.硬件设备初始化
D.将kernel映像和根文件系统映像从flash上读到RAM空间中
终止一个前台进程可能用到的命令和操作(B)。
A)kill B)+C C)shutdown D)halt
1.请用Shell编程,提示用户输入一文件名,然后判断这一文件是不是一个目录。
如果是,将该目录设置为当前目录。
t="pleaseenterafilename!
"
tt="Thisfileisnotfound!
"
echo$t
readfilename
if[-d$filename]
then
cd$filename
else
echo$tt
fi
2.设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:
读;文件所有者的权限为:
读、写、执行;文件所有者所在组的权限为:
读、执行。
conut=1
while[$count-le50]
do
if[-d/userdata]
then
mkdir/userdata/user$count
else
mkdir/userdata
mkdir/userdata/user$count
fi
chmod754/userdata/user$count
count=$[$count+1]
done
3.请使用shell编程,实现新建用户stu01~stu30,隶属于class1组。
(提示,参考教材32页,groupadd添加组命令,useradd添加用户命令,应用循环结构)
count=1
groupaddclass1
while[$count-le30]
do
if[$count-le9]
then
useraddstu0$count-gclass1
else
useraddstu$count-gclass1
fi
count=$[$count+1]
done
⏹Qt/Embedded对嵌入式GUI提供了强大的支持,信号和插槽机制是QT的核心机制,使用QT实现如下界面的登陆程序,其原代码如下所示,请回答如下问题:
⏹1.应用程序中用到了哪些控件,说明该控件的特点?
⏹2.什么是Qt中的信号插槽机制?
答:
1.应用程序中用到的控件有
(1)文本框控件Edit,文本框控件主要用来显示或接收用户的输入信息。
(2)按钮控件Button,按钮控件主要响应用户单击功能。
2.回调函数机制是事先将一个回调函数指针传递给一个处理过程,当这个处理过程得到执行时,回调预先定义好的回调函数以期实现激活其他处理程序的目的。
不同与回调函数机制,Qt提供了信号和插槽机制,信号是一个特定的标识;一个槽就是一个函数,与一般函数不同,槽函数既能和信号关联,当某个事件出现时,通过发送信号,可以将与之相关联的槽函数激活,执行相应代码。
3.根据注释完成程序中相应的语句?
#include
#include"window.h"
CWinDlg:
:
CWinDlg(QWidget*parent):
QDialog(parent)
{
setWindowTitle("Example");/*设置窗口的标题*/
Edit1=newQLineEdit;/*创建一个Edit1和一个Buttion1*/
Button1=newQPushButton("OK");
Edit1->setEchoMode(QLineEdit:
:
Password);
QVBoxLayout*Layout1=newQVBoxLayout;/*创建一个布局对像Layout1*/
Layout1->addWidget(Edit1);/*把Edit1加