嵌入式实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式实验报告
专业:计算机科学与技术专业班级:计科1班
学号:1245713131
姓名:
目录
实验一shell脚本命令 (2)
实验二熟悉make工具 (6)
实验三主机交叉开发环境的配置 (9)
实验四嵌入式web服务器 (11)
总结 (15)
实验一shell脚本命令
一、实验目的:
1.练习shell脚本的使用方法,能利用shell语言编写简单的shell脚本。
二、实验内容:
1.写一个shell脚本,完成如下功能:提示用户输入一个文件路径,并判断是否是“/etc”,如果是则显示“YES”。
运行结果:
2.使用touch命令建立一个新文件,测试其内容是否为空,向文件中写入内容后,再次进行测试,并打印输出相应结果。
1)用touch命令建立一个新文件zy,并通过gedit 命令查看该文件内是否有内
容。
2)通过gedit命令查看到结果:zy文件中没有内容。
3)编写测试程序。
4)执行测试程序,并再次查看zy文件。
5)查看结果。
3.由用户从键盘输入一个大于1的整数(如50),并计算从1到该数之间各整数的和。
运行结果:
4.由用户从键盘输入一个字符,并判断该字符是否为字母、数字或者其他字符,并输出相应的提示信息。
运行结果:
5.在脚本中定义一个加法函数,用于计算两个数的和,并调用该函数分别计算12+34、56+78的和。
运行结果:
实验一总结:
1.Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。
2.shell提供变量来设置环境参数和保存shell信息。
i.变量命名规则:
一般由字母和下划线构成,并且变量名第一个字符不能为数字。
shell变量可以保存诸如路径名、文件名或者一个数字。
对shell来讲,所有变量的取值都是一个字符串。
注意:变量是弱类型的,声明变量不用声明类型。
3.Shell变量的定义和引用:
i.定义自己的变量:
变量名=变量值
在定义变量时,变量名前不应加符号“$”,在引用变量的内容时则应在变量名前加“$”;在给变量赋值时,等号两边一定不能留空格,若变量
中本身就包含了空格,则整个字符串都要用双引号括起来。
ii.显示变量
使用echo 命令可以显示单个变量取值,并在变量名前加$,例如:
$ myvar="how are you"
$ echo $myvar
iii.清除变量
使用unset命令清除变量。
unset varname
iv.显示所有本地shell变量
使用set命令显示所有本地定义的shell变量
v.变量的引用
格式:
$变量名,或者${变量名}
变量名为一个字符用方式一,变量名多于一个字符建议用第2中方式例子:
a=1
abc="hello"
echo $a
echo ${abc}
实验二熟悉make工具
一、实验目的:
1.掌握基本的makefile结构
2.能独立编写简单的makefile完成程序的编译
二、实验内容:
1.自己编写一个程序,实现两个数的加减乘除运算,并输出结果。
2.自己编写makefile文件,设计程序的编译规则。
3.利用make进行自动化编译,查看结果。
1)实现两个数的加减乘除运算的程序:
运行结果:
2)编写makefile文件,设计程序的编译规则:
3)利用make进行自动化编译,查看结果:
实验二总结
1.Make
Make的优点包括:
i.如果仅修改了某几个源文件,则只重新编译这几个源文件;
如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。
ii.利用这种自动编译可大大简化开发工作,避免不必要的重新编译。
2.Make file文件
i.Make file 是编译规则文件,其中记录了源文件的编译规则。
ii.make file 需要按照某种语法进行编写,其中说明了如何编译各
个源文件并连接生成可执行文件,并定义了源文件之间的依赖关系。
当修改了其中某个源文件时,如果其他源文件依赖于该文件,则也
要重新编译所有依赖该文件的源文件。
3.Make file规则的一般形式Makefile规则的一般形式
i.Make file规则的一般形式如下:
target: dependency dependency
(tab) <command>
target是需要创建的二进制文件或目标文件,dependency是在创建target 时需要用到的一个或多个文件的列表,命令序列是创建target文件所需要执行的步骤,比如编译命令。
ii.一个Makefile文件主要含有一系列的规则,每条规则包含以下内容。
一个目标(target),即make最终需要创建的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如“clean”。
一个或多个依赖文件(dependency)列表,通常是编译目标文件所需要的其他文件。
一系列命今(command),是make执行的动作,通常是把指定的相关文件编译成目标文件的编译命令,每个命令占一行,且每个命令行的起始字符必须为TAB字符。
实验三主机交叉开发环境的配置
一、实验目的:
1.掌握嵌入式系统开发环境的搭建方法。
2.能独立搭建开发环境,并进行测试。
二、实验内容:
1.在自己的电脑上安装交叉编译工具
2.通过nfs进行测试:自己编写程序(内容不限),利用
arm-linux-gcc交叉编译器进行编译,通过nfs将可执行程序共享给目标机,并执行。
实验三总结
NFS使用步骤:
1.检查nfs工具包是否安装
rpm -qa | grep nfs
如果没有,则安装;如果有则会列出rpm信息
2.安装nfs方法
执行
rpm -ivh nfs…..
3.ubuntu下nfs服务的启动:
配置/etc/exports,内容为:
/arm 192.168.0.*(rw,sync,no_root_squash,no_subtree_check)
/arm---要共享的目录
192.168.0.*---允许访问的网段,也可以是ip地址、主机名(能够被服务器解析)、*(所有人都能访问)
(rw,sync,no_root_squash,no_subtree_check)---rw:读/写权限
sync:数据同步写入内存和硬盘
no_root_squash:服务器允许远程系统以root特权存取该目录
no_subtree_check:关闭子树检查
4.启动服务
(1)重启portmapper(端口映射)服务
$ service portmap restart
portmap start/running, process 550
(2)重启NFS服务
$ service nfs-kernel-server restart
* Stopping NFS kernel daemon [ OK ]
* Unexporting directories for NFS kernel daemon...
[ OK ]
* Exporting directories for NFS kernel daemon...
[ OK ]
* Starting NFS kernel daemon [ OK ]
实验四嵌入式web服务器
一、实验目的:
1.了解web服务器的工作原理
2.掌握嵌入式服务器goAhead的搭建方法
二、实验内容:
1.以GoAhead
2.5为例,建立web服务器
2.自己编写简单html界面,测试web服务器
1)以GoAhead2.5为例,建立web服务器
a)cd LINUX
修改Makefile
屏蔽:
matrixsslDir:=$(shell ls -d ../matrixssl-3-1*/)
由于源码包中没有SSL加密的源码,所以要将Makefile中的matrixsslDir:=$(shell ls -d ../matrixssl-3-1*/)这行代码注释掉
b)修改LINUX/main.c
屏蔽下面内容:
if (gethostname(host, sizeof(host)) < 0) {
error(E_L, E_LOG, T("Can't get hostname"));
printf("initWebs::Can't get hostname.\n");
return -1;
}
if ((hp = gethostbyname(host)) == NULL) {
error(E_L, E_LOG, T("Can't get host address"));
printf("initWebs::Can't get hostname...\n"); // added by gyr 2011.09.17
return -1;
}
memcpy((char *) &intaddr, (char *) hp->h_addr_list[0],
(size_t) hp->h_length);
加入
intaddr.s_addr = inet_addr("192.168.218.129");
假定虚拟机IP地址是192.168.0.1 (获取服务器IP地址,事先一定要设置好服务器IP)
c)执行
make clean;
Make
d)运行web 服务器
./webs& (&符号是让服务器在后台运行,也可以不要)
打开浏览器:
http://192.168.218.129:8080/home.htm
2)自己编写简单html界面,测试web服务器
实验四总结
goAhead Web服务器,小巧、精致,特别适合于嵌入式系统,因此,在很多嵌入式产品如路由器中都用到了goAhead作为嵌入式web服务器。
特点:
支持ASP;
支持嵌入式的JavaScript,即Ejscript;
支持内存中的CGI处理;
占用很小内存,如果不包含SSL,仅要求60K内存;包含SSL,要求500K 内存;
支持多种操作系统,如linux、wince、vxworks等等。
Web页面可存在于ROM或文件系统中;
GoAhead服务器支持使用SSL进行数据加密和认证。
配置goAhead Web服务器过程:
tar -xzvf webs-2-5.tar.gz
cd webs-2-5/
cd LINUX
1)修改Makefile
屏蔽:
matrixsslDir:=$(shell ls -d ../matrixssl-3-1*/)
由于源码包中没有SSL加密的源码,所以要将Makefile中的
matrixsslDir:=$(shell ls -d ../matrixssl-3-1*/)这行代码注释掉
2)修改LINUX/main.c
屏蔽下面内容:
if (gethostname(host, sizeof(host)) < 0) {
error(E_L, E_LOG, T("Can't get hostname"));
printf("initWebs::Can't get hostname.\n");
return -1;
}
if ((hp = gethostbyname(host)) == NULL) {
error(E_L, E_LOG, T("Can't get host address"));
printf("initWebs::Can't get hostname...\n"); // added by gyr 2011.09.17
return -1;
}
memcpy((char *) &intaddr, (char *) hp->h_addr_list[0],
(size_t) hp->h_length);
加入
intaddr.s_addr = inet_addr("192.168.0.1");
3)执行
make clean;
Make
总结
本次实验总共有四次实验,经过四次实验,让我对嵌入式有了更多的了解。
第一次实验是shell脚本命令,Shell既是一种命令语言,又是一种程序设计语言。
作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。
对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统的关键。
shell本身也是一种语言(*可以先理解为linux命令的组合,加上类C的条件,循环等程序控制语句),用户可以通过shell编程(脚本,文本文件),完成特定的工作。
在第一次实验中,我对shell语法有了更深的了解,掌握了shell程序的变量的定义与引用。
第二次实验是make实验,make 工具通过一个称为makefile 的文件来完成并自动维护编译工作。
Makefile 是编译规则文件,其中记录了源文件的编译规则。
makefile 需要按照某种语法进行编写,其中说明了如何编译各个源文件并连接生成可执行文件,并定义了源文件之间的依赖关系。
当修改了其中某个源文件时,如果其他源文件依赖于该文件,则也要重
新编译所有依赖该文件的源文件。
在这次实验中,我学会了如何使用makefile 定义规格,来告诉make处理哪些文件以及如何处理这些文件。
第三次实验是主机交叉环境的配置,主要做的是文件夹共享,在这次实验中,我学会了如何将文件夹设置为共享。
第四次实验是web服务器实验,嵌入式web服务器特点:在存贮空间和运行时所占有的内存空间上都较小,非常适合于嵌入式应用场合。
goAhead Web服务器,小巧、精致,特别适合于嵌入式系统,因此,在很多嵌入式产品如路由器中都用到了goAhead作为嵌入式web服务器。
本次实验的重点是配置goAhead Web服务器,虽然是按照老师给的步骤来做的,但是还是出了不小的问题,好像是自己的电脑无法配置,不过经过自己的努力,还是找到了解决的方法,解决了无法配置的难题。
希望以后还能在嵌入式方向有更深入的学习,学到更多关于嵌入式方向的知识。