嵌入式系统实验指导书n.docx
《嵌入式系统实验指导书n.docx》由会员分享,可在线阅读,更多相关《嵌入式系统实验指导书n.docx(17页珍藏版)》请在冰豆网上搜索。
嵌入式系统实验指导书n
嵌入式系统实验指导书
专业:
计算机
班级:
12级(1,2)、11(3)
指导教师:
张文哲
实验一linux常用命令及vi的使用
实验目的:
掌握常用Linux命令的使用,掌握vi的使用。
实验原理:
Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。
所以,在Linux系统上工作离不开使用系统提供的命令。
要想真正理解Linux系统,就必须从Linux命令学起,通过基础的命令学习可以进一步理解Linux系统。
不同Linux发行版的命令数量不一样,但Linux发行版本最少的命令也有200多个。
这里把比较重要和使用频率最多的命令,按照它们在系统中的作用分成下面六个部分一一介绍。
◆安装和登录命令:
login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last;
◆文件处理命令:
file、mkdir、grep、dd、find、mv、ls、diff、cat、ln;
◆系统管理相关命令:
df、top、free、quota、at、lp、adduser、groupadd、kill、crontab;
◆网络操作命令:
ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、nslookup;
◆系统安全相关命令:
passwd、su、umask、chgrp、chmod、chown、chattr、sudops、who;
◆其它命令:
tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode。
Vi是linux下最常用的文本编辑工具,经常用于源代码的编写。
实验内容一:
练习常用命令的使用
首先新建一个终端然后练习电子文档中红色命令。
(一) login
1.作用
login的作用是登录系统,它的使用权限是所有用户。
2.格式
login[name][-p][-h主机名称]
3.主要参数
-p:
通知login保持现在的环境参数。
-h:
用来向远程登录的之间传输用户名。
如果选择用命令行模式登录Linux的话,那么看到的第一个Linux命令就是login:
。
一般界面是这样的:
ManddrakeLinuxrelease9.1(Bamboo)fori586
renrel2.4.21-0.13mdkoni686/tty1
localhostlogin:
root
password:
上面代码中,第一行是Linux发行版本号,第二行是内核版本号和登录的虚拟控制台,我们在第三行输入登录名,按“Enter”键在Password后输入账户密码,即可登录系统。
出于安全考虑,输入账户密码时字符不会在屏幕上回显,光标也不移动。
登录后会看到下面这个界面(以超级用户为例):
[root@localhostroot]#
lastlogin:
Tue,Nov1810:
00:
55onvc/1
上面显示的是登录星期、月、日、时间和使用的虚拟控制台。
4.应用技巧
Linux是一个真正的多用户操作系统,可以同时接受多个用户登录,还允许一个用户进行多次登录。
这是因为Linux和许多版本的Unix一样,提供了虚拟控制台的访问方式,允许用户在同一时间从控制台(系统的控制台是与系统直接相连的监视器和键盘)进行多次登录。
每个虚拟控制台可以看作是一个独立的工作站,工作台之间可以切换。
虚拟控制台的切换可以通过按下Alt键和一个功能键来实现,通常使用F1-F6。
例如,用户登录后,按一下“Alt+F2”键,用户就可以看到上面出现的“login:
”提示符,说明用户看到了第二个虚拟控制台。
然后只需按“Alt+F1”键,就可以回到第一个虚拟控制台。
一个新安装的Linux系统允许用户使用“Alt+F1”到“Alt+F6”键来访问前六个虚拟控制台。
虚拟控制台最有用的是,当一个程序出错造成系统死锁时,可以切换到其它虚拟控制台工作,关闭这个程序。
(二) mount
1.作用
mount命令的作用是加载文件系统,其使用权限是超级用户或/etc/fstab中允许的使用者。
2.格式
mount-a[-fv][-tvfstype][-n][-rw][-F]devicedir
3.主要参数
-h:
显示辅助信息。
-v:
显示信息,通常和-f用来除错。
-a:
将/etc/fstab中定义的所有文件系统挂上。
-F:
这个命令通常和-a一起使用,它会为每一个mount的动作产生一个行程负责执行。
在系统需要挂上大量NFS文件系统时可以加快加载的速度。
-f:
通常用于除错。
它会使mount不执行实际挂上的动作,而是模拟整个挂上的过程,通常会和-v一起使用。
-tvfstype:
显示被加载文件系统的类型。
-n:
一般而言,mount挂上后会在/etc/mtab中写入一笔资料,在系统中没有可写入文件系统的情况下,可以用这个选项取消这个动作。
4.应用技巧
在Linux和Unix系统上,所有文件都是作为一个大型树(以/为根)的一部分访问的。
要访问CD-ROM上的文件,需要将CD-ROM设备挂装在文件树中的某个挂装点。
如果发行版安装了自动挂装包,那么这个步骤可自动进行。
在Linux中,如果要使用硬盘、光驱等储存设备,就得先将它加载,当储存设备挂上了之后,就可以把它当成一个目录来访问。
挂上一个设备使用mount命令。
在使用mount这个指令时,至少要先知道下列三种信息:
要加载对象的文件系统类型、要加载对象的设备名称及要将设备加载到哪个目录下。
(1)Linux可以识别的文件系统
◆Windows95/98常用的FAT32文件系统:
vfat;
◆WinNT/2000的文件系统:
ntfs;
◆OS/2用的文件系统:
hpfs;
◆Linux用的文件系统:
ext2、ext3;
◆CD-ROM光盘用的文件系统:
iso9660。
虽然vfat是指FAT32系统,但事实上它也兼容FAT16的文件系统类型。
(2)确定设备的名称
在Linux中,设备名称通常都存在/dev里。
这些设备名称的命名都是有规则的,可以用“推理”的方式把设备名称找出来。
例如,/dev/hda1这个IDE设备,hd是HardDisk(硬盘)的,sd是SCSIDevice,fd是FloppyDevice(或是FloppyDisk?
)。
a代表第一个设备,通常IDE接口可以接上4个IDE设备(比如4块硬盘)。
所以要识别IDE硬盘的方法分别就是hda、hdb、hdc、hdd。
hda1中的“1”代表hda的第一个硬盘分区(partition),hda2代表hda的第二主分区,第一个逻辑分区从hda5开始,依此类推。
此外,可以直接检查/var/log/messages文件,在该文件中可以找到计算机开机后系统已辨认出来的设备代号。
(3)查找挂接点
在决定将设备挂接之前,先要查看一下计算机是不是有个/mnt的空目录,该目录就是专门用来当作挂载点(MountPoint)的目录。
建议在/mnt里建几个/mnt/cdrom、/mnt/floppy、/mnt/mo等目录,当作目录的专用挂载点。
举例而言,如要挂载下列5个设备,其执行指令可能如下(假设都是Linux的ext2系统,如果是WindowsXX请将ext2改成vfat):
软盘===>mount-text2/dev/fd0/mnt/floppy
cdrom===>mount-tiso9660/dev/hdc/mnt/cdrom
SCSIcdrom===>mount-tiso9660/dev/sdb/mnt/scdrom
SCSIcdr===>mount-tiso9660/dev/sdc/mnt/scdr
不过目前大多数较新的Linux发行版本(包括红旗Linux、中软Linux、MandrakeLinux等)都可以自动挂装文件系统,但RedHatLinux除外。
其他命令参照电子文档练习。
实验内容二:
常用软件的安装
尝试在Redhat中安装一些软件,例如linux版的QQ安装(deb或tar.gz)。
请至飞秋共享自行拷贝。
实验内容三:
vi的使用
使用vi编辑器建立、编辑、显示以及加工处理文本文件
a.进入和退出vi
<1>进入vi
在系统提示符($)下输入命令vi和想要编辑(建立)的文件名(如example),便可进入vi。
<2>退出vi
在命令方式下可有几种方法退出vi编辑器:
:
wq把编辑缓冲区的内容写到你编辑的文件中,退出编辑器,回到Linuxshell下。
:
ZZ仅当作过修改时才将缓冲区内容写到文件上。
:
x与:
ZZ相同。
:
q!
强行退出vi。
感叹号(!
)告诉vi,无条件退出,丢弃缓冲区内容。
这样,先前对该文件所做的修改或输入都被抛弃。
b.新建文件
<1>在Linux提示符$之后,输入命令:
vimyfile,然后按〈Enter〉键。
<2>输入插入命令i(屏幕上看不到字符i)。
<3>然后,输入以下文本行:
TotheonlywomanthtI,
Formangyearyouhavebeenmywife
<4>发现这两行有错,进行改正:
按〈Esc〉键,从插入方式回到命令方式。
按光标上移键,使光标移到第一行。
按光标左移键,使光标移到“tht”的第二个“t”处。
输入i(这是插入命令),然后输入a。
该行变成如下形式:
TotheonlywomanthatI,
按光标右移键,使光标移到“I”上。
我们想在“I”之后输入一个空格和单词“love”。
为此,输入附加命令“a”。
结果屏幕显示为:
TotheonlywomanthataI,
这是怎麽回事儿?
......原来是:
我们先前使用了插入命令i,至今并未用〈Esc〉键返回命令方式。
所以,输入的所有字符都作为输入文本予以显示。
<5>按〈Esc〉键,返回命令方式。
利用x命令删除错误字符。
然后,进入插入方式,输入正确字符。
<6>最后输入如下所示的文本:
TotheonlywomanthatIlove,
Formanyyearyouhavebeenmywwife
Iliveyouwichmylife
andcouldnothavepickedmuchbetter.
<7>将你编辑的文本文件存盘。
(利用:
wq命令,或者:
x命令)
<8>重新进入vi编辑程序,编辑上面的文件。
(如:
$vimyfile)
<9>在屏幕上见到myfile文件的内容。
在屏幕底边一行显示出该文件的名称、行数和字符个数:
“myfile”4lines,130characters
它仍然有错,需进一步修改。
<10>将光标移到第二行的year的r处。
输入a命令,添加字符s。
<11>按〈Esc〉,回到命令方式。
输入命令18〈Space〉(键盘输入“18”,屏幕上不会显示出来,接着再按一下空格,光标便移动了),光标移至何处?
(提示:
光标右移18个字符位置。
)
<12>利用取代命令r将mywwife改为mywife。
<13>将光标移至第三行。
输入新行命令O(大写字母),屏幕上有什麽变化?
(注意:
输入命令时,vi应处于命令模式)(提示:
光标移至上一行(新加空行)的开头。
)
<14>输入新行的内容:
We'vebeenthroughmuchtogether
此时,vi处于哪种工作模式?
(提示:
插入模式)
<15>按〈Esc〉,回到命令方式。
将光标移到第四行的live的i字母处。
利用替换命令s将i改为o。
<16>在第四行的you之后添加单词dearly。
将wich改为with。
<17>修改后的文本是以下内容:
TotheonlywomanthatIlove,
Formanyyearsyouhavebeenmywife
We'vebeenthroughmuchtogether
Iloveyoudearlywithmylife
andcouldnothavepickedmuchbetter.
将该文件存盘,退出vi。
<18>重新编辑该文件。
并将光标移到最后一行的have的v字母处,使用d$命令将v至行尾的字符都删除。
<19>现在想恢复17步的原状,怎麽办?
(提示:
使用复原命令u)
<20>使用dd命令删除第一行;将光标移至through的u字母处,使用C(大写字母)命令进行修改,随便乱输一串字符。
将光标移到下一行的开头,执行5x命令,结果是什么?
(提示:
删掉从光标处开始的5个字符)然后执行重复命令(.),结果是什么?
(提示:
再删掉从光标处开始的5个字符)
<21>屏幕内容乱了!
现在想恢复17步的原状,怎麽办?
(提示:
不写盘,强行退出vi)能用u或U命令恢复屏幕原状吗?
(提示:
可以)
实验结果及讨论:
1、比较Linux和Windows的文件目录结构有哪些相同和异同。
2、Linux的可执行文件通常放在哪个目录中?
写出该目录的路径。
3、谈谈你今天上实验课的收获,存在的问题或疑问。
如果有实验内容以外的发现也可谈谈。
(字数不限)
注意:
写实验报告时,实验步骤不一定要全抄,可选重要的。
但实验目的、实验内容以及实验步骤中提出的问题及答案一定要写。
实验二嵌入式开发环境及makefile
实验目的:
掌握嵌入式开发环境的搭建及makefile文件的编写。
实验原理:
绝大多数的 Linux 软件开发都是本机(HOST)开发、调试, 本机运行的方式。
这种方式通常不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开发,没有足够的资源在本机(即板子上系统)运行开发工具和调试工具。
通常的嵌入式系统的软件开发采用一种交叉编译调试的方式。
交叉编译调试环境建立在宿主机(即一台 PC 机)上,对应的开发板叫做目标板。
运行 Linux 的 PC(宿主机)开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码(这种可执行代码并不能在宿主机上执行,而只能在目标板上执行),然后把可执行文件下载到目标机上运行。
makefile文件描述了整个工程的编译、连接等规则。
它指引make命令按照对应的要求完成整个工程的编译、连接,生成可执行文件。
实验内容一:
交叉编译环境安装
1、arm-linux-gcc的安装
(1)解压 arm-linux-gcc-4.5.1.tar.bz2(该步骤已完成,到对应位置查看该文件夹是否存在)
复制 arm-linux-gcc-4.5.1.tar.bz2到home
#tar-jxvfarm-linux-gcc-4.5.1.tar.bz2
解压过程需要一段时间,解压后的文件形成 home/opt/下的文件夹,进入home/opt/文件夹,将4.5.1文件夹拷贝到/opt/下
现在交叉编译程序集都在/opt/4.5.1/bin下面了
(2)修改环境变量,把交叉编译器的路径加入到PATH。
修改/etc/profile文件
在最后加上:
exportPATH=$PATH:
/opt/4.5.1/bin
exportPATH
(如果不能编辑,先修改相关文件的权限使用chmod命令。
)
保存退出(以上操作用到了那些命令?
)
(3)立即使新的环境变量生效,不用重启电脑:
对应方法:
#source/etc/profile(有何输出?
)
(4)检查是否将路径加入到PATH:
#echo$PATH
显示的内容中有/opt/4.5.1/bin,说明已经将交叉编译器的路径加入PATH。
至此,交叉编译环境安装完成。
(5)测试是否安装成功:
首先查看bin目录下可执行文件,某些版本中或许不是arm-linux-gcc
运行arm--linux-gcc–v(查看输出结果)
实验内容二:
MINICOM的配置(如虚拟机无串口,添加一个新串口为物理串口)
输入minicom-s 进入minicom配置界面,
选择Serialportsetup,进入端口设置界面,修改以下几个值:
A---------SerialDevice:
/dev/ttyS0 (端口号使用串口1)
E---------BPS/par/bits :
/1152008N1 (波特率)
F,E硬件流软件流都改为NO,若要使用PC机的串口2来连接板子,则将A选项中的ttyS0改为ttyS1。
选好后按Esc键,并选择Savesetupasdf1保存配置。
配置完成后用连接PC机跟开发板的串口线,启动开发板,输入minicom即可出现启动信息。
(我们用的机器已经配好,大家注意查看上面的配置),下面涉及到开发板的操作都是在minicom中进行的。
实验内容三:
配置NFS服务器
1、修改虚拟机、开发板ip地址使它们与主机在同一网段
编辑网卡配置文件主机:
vi /etc/sysconfig/network-scripts/ifcfg-eth0 ,开发板一般是etc下的eth0-settings文件。
注意:
开发板只需要修改IP地址信息,其他部分不要乱修改!
!
!
虚拟机ifcfg-eth0文件示例
2、配置虚拟机网卡为主机物理网卡。
编辑--->虚拟网络编辑器,这个时候出现一个选择框,选中VMnet0,在下面的vmnet0的桥接模式中,桥接到下拉框中选择物理网卡名称就可以。
然后在虚拟机--设置--网络适配器中选桥接模式,复制物理网络连接状态。
3、重启虚拟机网络服务servicenetworkrestart、重启开发板。
4、ping测试连通性。
5、防火墙设置
1)永久性关闭
lokkit--disabled
2)即时生效,重启后失效
service方式
开启:
serviceiptablesstart
关闭:
serviceiptablesstop
iptables方式
查看防火墙状态:
/etc/init.d/iptablesstatus
暂时关闭防火墙:
/etc/init.d/iptablesstop
重启iptables:
/etc/init.d/iptablesrestart
使用任意上面方法关闭防火墙
6、确认并安装nfs服务依赖软件包
一般nfs服务器要提供服务,必须启动inet,nfs,mount,portmap(RHEL5.5及以下版本)或rpcbind(RHEL6以上版本)这些守护进程并保持在后台运行。
在使用nfs共享文件之前,我们应该首先确认有没有安装这些应用程序,如果没有,则从安装盘中找到它们并安装。
下面显示我们在安装系统时已经显示了安装了nfs服务相关软件。
以上程序注意前面的名称应一致,后面的版本号则可能不同。
如没有对应文件可加载rhel光盘查找对应安装包,进行安装。
rpm –ivh***.rpm
7、修改nfs的配置文件
修改nfs的配置文件/etc/exports,设置需要共享的文件夹访问路径
/home/nfs 192.168.1.*(rw,insecure,no_root_squash,no_all_squash)(ip地址根据自己主机及开发板情况设置)这里的访问IP设置的是192.168.1.0~192.168.1.255。
NFS服务的配置文件为 /etc/exports,这个文件是NFS的主要配置文件,不过系统并没有默认值,所以这个文件不一定会存在,可能要使用vim手动建立,然后在文件里面写入配置内容。
/etc/exports文件内容格式:
<输出目录>[客户端1选项(访问权限,用户映射,其他)][客户端2选项(访问权限,用户映射,其他)]
a.输出目录:
输出目录是指NFS系统中需要共享给客户机使用的目录;
b.客户端:
客户端是指网络中可以访问这个NFS输出目录的计算机
客户端常用的指定方式
∙指定ip地址的主机:
192.168.0.200
∙指定子网中的所有主机:
192.168.0.*
∙指定域名的主机:
∙指定域中的所有主机:
*
∙所有主机:
*
c.选项:
选项用来设置输出目录的访问权限、用户映射等。
NFS主要有3类选项:
访问权限选项
∙设置输出目录只读:
ro
∙设置输出目录读写:
rw
用户映射选项
∙all_squash:
将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
∙no_all_squash:
与all_squash取反(默认设置);
∙root_squash:
将root用户及所属组都映射为匿名用户或用户组(默认设置);
∙no_root_squash:
与rootsquash取反;
∙anonuid=xxx:
将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
∙anongid=xxx:
将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);
其它选项
∙secure:
限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
∙insecure:
允许客户端从大于1024的tcp/ip端口连接服务器;
∙sync:
将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
∙async:
将数据先保存在内存缓冲区中,必要时才写入磁盘;
∙wdelay:
检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
∙no_wdelay:
若有写操作则立即执行,应与sync配合使用;
∙subtree:
若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
∙no_subtree:
即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
8、重新启动rpcbind或者portmap和nfs服务
9、测试nfs
192.168.1.188:
/tftp是服务器地址及目录,/mnt/nfs是开发板目录,以上参数根据自己主机地址及目录修改
客户机:
服务器:
实验内容四:
makefile的编写
关于makefile的编写课堂上已进行了详细讲解,此处不在赘述。
请编写以下源程序,并编写makefile完成编译、连接及可执行文件和.o文件的删除工作。
主程序:
#include
intadd(inta,intb);
intmain(void)
{
intc;
c=add(1,2);
printf("c=%d\n",c);
return0;
}
cal.c文件
#include
intadd(inta,intb)
{
returna+b;
}
实验三进程相关应用程序设计
实验目的:
掌握常用进程命令的使用并能够进行相关程序设计。
实验原理:
进程操作是linux下c编程的常用操作,也是一个难点,常用函数只要有如下几个:
execl(执行文件)
相关函