嵌入式系统设计性实验Word文档下载推荐.docx
《嵌入式系统设计性实验Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《嵌入式系统设计性实验Word文档下载推荐.docx(15页珍藏版)》请在冰点文库上搜索。
![嵌入式系统设计性实验Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-4/30/11317739-3399-4b28-811f-f02adc4ca908/11317739-3399-4b28-811f-f02adc4ca9081.gif)
但Boa支持CGI,能够为CGI程序fork出一个进程来执行。
Boa的设计目标是速度和安全,在其站点公布的性能测试中,Boa的性能要好于Apache服务器。
CGI(CommonGatewayInterface)是外部应用扩展应用程序与www服务器交互的一个标准接口。
按照CGI标准编写的外部扩展应用程序可以处理客户端浏览器输入的数据,从而完成客户端与服务器的交互操作。
而CGI规范就定义了Web服务器如何向扩展应用程序发送消息,在收到扩展应用程序的信息后又如何进行处理等内容。
通过CGI可以提供许多静态的HTML网页无法实现的功能,比如搜索引擎、基于web的数据库访问等等。
二、课题要求
2.1设计要求
在2440开发板上移植一个boa程序,使开发板可以作为一个web服务器使用。
在PC计算机上使用浏览器测试嵌入式WEB服务器的功能。
建立嵌入式系统的web服务功能,利用Web页远程控制嵌入式系统中的硬件状态,如控制Led等的点亮、熄灭等动作。
2.2运行环境
硬件:
ARM嵌入式开发平台、用于ARM7TDMI的JTAG仿真器、PC机Pentium100以上。
软件:
PC机操作系统win98、Win2000或WinXP、ARMSDT2.51或ADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序。
三、实验设计及调试
3.1嵌入式WEB服务器BOA的移植
3.1.1编译BOA服务器步骤
我们的网站中提供了boa的源代码,叫做boa-0.94.13.tar.gz。
进入虚拟机Linux系统,首先解压该文件:
[root@localhostwebserver]#tar-zxvfboa-0.94.13.tar.gz
然后进入源代码目录:
[root@localhostwebserver]#cdboa-0.94.13/src
修改文件compat.h的第120行:
[root@localhostsrc]#vicompat.h
修改后,第120行的内容如下:
#defineTIMEZONE_OFFSET(foo)foo->
tm_gmtoff
即只是去掉了该行的两个’##’字符。
然后修改boa.c:
[root@localhostsrc]viboa.c
找到该文件的225~227行,注释掉这几行。
不然运行的时候会出错。
由于我们实验室的开发板已经加载了Linux系统,在实验板上的/etc目录是属于只读文件系统下的,因此不能再其下创建boa目录和复制文件boa.conf到该目录。
我们需要修改boa源码中对boa.conf文件的默认路径:
修改defines.h
[root@localhostsrc]#videfines.h
将第30行#defineSERVER_ROOT"
/etc/boa"
修改为可读写的目录/var
#defineSERVER_ROOT"
/var"
源文件的修改就完成了。
现在开始编译:
首先运行configure程序对源文件进行配置:
[root@localhostsrc]#./configure
配置完成后,生成Makefile,修改Makefile:
[root@localhostsrc]#viMakefile
修改第31行和32行如下:
CC=arm-linux-gccCPP=arm-linux-gcc-E
修改完成后,保存文件,运行Make进行编译:
[root@localhostsrc]#make
编译完成后,会在该目录下生成我们需要的可执行文件boa。
3.1.2配置BOA服务器步骤
1.拷贝Boa源码目录下已有的一个示例boa.conf,在其基础上进行修改:
Port80
#Listen192.68.0.5
Userroot
Group0
#ServerAdminroot@localhost
ErrorLog/var/web_boa/log/error_log
AccessLog/var/web_boa/log/access_log
#UseLocaltime
#VerboseCGILogs
ServerNamewww.your.org.here
#VirtualHost
DocumentRoot/var/web_boa/www
UserDirpublic_html
DirectoryIndexindex.html
DirectoryMaker/usr/lib/boa/boa_indexer
#DirectoryCache/var/spool/boa/dircache
KeepAliveMax1000
KeepAliveTimeout10
MimeTypes/var/web_boa/mime.types
DefaultTypetext/plain
CGIPath/bin:
/usr/bin:
/usr/local/bin
Alias/doc/usr/doc
ScriptAlias/cgi-bin//var/web_boa/www/cgi-bin/
以上内容根据你的文件存放实际路径作参考。
将修改好的boa.conf传到开发板得/var目录下。
2.在/var下建立web_boa目录等,请根据boa.conf文件中的内容相应创建需要的目录。
另外,在虚拟机的/etc目录下拷贝mime.types文件到开发板。
在开发板的/var/web_boa/log/目录下创建error_log和access_log文件:
up-tech:
/var/web_boa/log#toucherror_log
/var/web_boa/log#touchaccess_log
3.1.3CGI程序的编写
//pass.c
#include<
stdio.h>
stdlib.h>
string.h>
char*getcgidata(FILE*fp,char*requestmethod);
intmain()
{
char*input;
char*req_method;
charled[10][64];
inti=0;
intj=0;
intfd;
printf("
Content-type:
text/plain;
charset=iso-8859-1\n\n"
);
printf("
text/html\n\n"
Thefollowingisqueryreuslt:
<
br>
"
fd=open("
/dev/led"
0);
if(fd<
0)
perror("
opendevice/dev/led"
exit
(1);
}
ioctl(fd,1,0);
req_method=getenv("
REQUEST_METHOD"
input=getcgidata(stdin,req_method);
//根据input中的字符串信息确定led灯的点亮关闭
//以下补充完善代码
j=0;
for(i=0;
i<
(int)strlen(input);
i++)//对接受到的字符串分析
{
if(input[i]=='
V'
)//如果字符为“V”则取其后面的一位
led[j]=input[i+1];
j++;
}
}
for(j=0;
j<
3;
j++)//判断灯的状态
if(led[j]=='
1'
)ioctl(fd,0,j);
//若接收到为1,开相应的灯,否则熄灭
else
ioctl(fd,1,j);
close(fd);
YourPOSTMessageis%s<
\n"
input);
return0;
}
char*getcgidata(FILE*fp,char*requestmethod)
char*input;
intlen;
intsize=1024;
if(!
strcmp(requestmethod,"
GET"
))
input=getenv("
QUERY_STRING"
returninput;
elseif(!
POST"
len=atoi(getenv("
CONTENT_LENGTH"
));
input=(char*)malloc(sizeof(char)*(size+1));
if(len==0)
input[0]='
\0'
;
while
(1)
input[i]=(char)fgetc(fp);
if(i==size)
input[i+1]='
--len;
if(feof(fp)||(!
(len)))
i++;
input[i]='
returnNULL;
3.编译CGI程序:
arm-linux-gcc-opass.cgipass.c
最终生成pass.cgi文件,将其下载到开发板,放到文件夹/var/www/cgi-bin下。
3.1.4网页文件index.html设计
1.Html语言简介
在WWW上的一个超媒体文档称之为一个页面(page)。
作为一个组织或个人在万维网上放置开始点的页面称为主页Homepage,或首页,主页中通常包括有指向其他相关页面或其他节点的指针(超级链接)。
在逻辑上将视为一个整体的一系列页面的有机集合称为网站(Website或Site)。
HTML是一种规范,一种标准,它通过标记符号来标记要显示的网页中的各个部分。
网页文件本身是一种文本文件,通过在文本文件中添加标记符,可以告诉浏览器如何显示其中的内容(如:
文字如何处理,画面如何安排,图片如何显示等)。
浏览器按顺序阅读网页文件,然后根据标记符解释和显示其标记的内容,对书写出错的标记将不指出其错误,且不停止其解释执行过程,编制者只能通过显示效果来分析出错原因和出错部位。
但需要注意的是,对于不同的浏览器,对同一标记符可能会有不完全相同的解释,因而可能会有不同的显示效果。
2.选择html移植的原因
HTML文档制作不是很复杂,且功能强大,支持不同数据格式的文件镶入,这也是WWW盛行的原因之一,其主要特点如下:
1)简易性,HTML版本升级采用超集方式,从而更加灵活方便。
2)扩展性,HTML语言的广泛应用带来了加强功能,增加标识符等要求,HTML采取子类元素的方式,为系统扩展带来保证。
3)平台无关性。
虽然PC机大行其道,但使用MAC等其他机器的大有人在,HTML可以使用在广泛的平台上,这也是WWW盛行的另一个原因。
3.代码的编写
html>
head>
title>
Led远程控制<
/title>
/head>
body>
formname="
form1"
action="
/cgi-bin/pass.cgi"
method="
>
palign="
center"
&
nbsp;
b>
fontsize="
4"
<
/font>
5"
嵌入式LED远程控制系统<
/b>
/p>
fieldsetstyle="
width:
145;
height:
39;
padding:
2"
legend>
Led1控制<
/legend>
inputtype="
radio"
value="
V1"
checkedname="
R1"
打开&
name="
V2"
关闭<
/fieldset>
&
Led2控制<
R2"
Led3控制<
R3"
p>
<
tablealign="
width="
107"
tr>
tdalign="
left"
/td>
/tr>
tdwidth="
101"
height="
35"
submit"
执行"
/table>
/form>
/body>
3.1.5LED驱动的编译
在内核中/linux-2.6.24.4/drivers/char/下有mini2410-leds.c,该C文件为LED的源代码。
单独编译内核驱动:
生成mini2410-leds.ko文件。
3.2.运行与调试
3.2.1加载LED驱动
加载驱动程序
up-touch:
~/var#insmodmini2410-leds.ko
查看新加设备对应的主设备号:
~/var#cat/proc/devices
231leds
手动创建设备节点:
~/var#mknod/dev/ledc2310
3.2.2运行BOA
将生成的执行文件boa、pass.cgi及index.html文件传到开发板指定目录(boa.conf文件中指定)。
执行boa:
./boa
没有错误提示信息。
回到计算机windows界面下,在浏览器中输入开发板的IP地址,得到如下图所示界面:
3.2.3错误与解决方案
1.在运行可执行文件boa时,提示error_log与access_log的相关错误
原因是在建立文件error_log和access_log使用的创建文件夹命令mkdir,应改为用touch创建这两个文件。
修改后运行boa,没有错误。
2.点击图上执行按钮后,网页提示:
未找到192.168.1.193/cgi-bin/pass.cgi
分析原因如下:
没有在指定的文件夹/var/www/cgi-bin中放入pass.cgi文件
文件夹命名有误
经过查看文件夹cgi-bin命名成了cgi_bin,修改后重新运行。
四、总结与体会
这是个大学的最后一个实验了,时间过得好快,还记得当时刚上大学的青涩模样,不知不觉中都快毕业了。
由于前几次做了几个跟这个相关的实验并且顺利的完成,看了实验报告后以为这个实验很简单,导致预习的不是非常的充分。
一开始做的时候不怎么顺利,后来老师又把过程讲了一遍,瞬间豁然开朗。
嵌入式系统中引入操作系统是目前嵌入式设计与应用的一个热点,嵌入式操作系统在优化系统设计、提高系统设计效率、减少系统设计中重复劳动和提高移植性的方面起到了非常积极的作用。
嵌入式操作系统中的引导、加载和启动是其中最基本也是最重要的一个步骤。
本文结合嵌入式Linux系统和相应的硬件平台,研究和实践了Linux操作系统向2440开发板上移植的过程,为后续的驱动程序和应用程序的开发奠定了基础。
通过本实验让我进一步熟悉了编程实现嵌入式开发平台的使用。
通过网页控制操作,使其可以控制LED灯的亮灭,虽然最后显示代码的界面没有跳转的出来,不过总体效果还是让人比较满意的,从这个这个实验中我了解到了很多东西。
未来的路还很长,我们要学的还有很多。
参考文献
[1]于明,范书瑞,曾祥烨.ARM9嵌入式系统设计与开发教程[M].北京:
电子工业出版社,2006:
108-116.
[2]李亚峰.ARM嵌入式linux设备驱动实例开发[M].北京:
中国电力出版社,2008:
150-171.
[3]潘伟森,邓胡滨.嵌入式Linux在S3C2410上的移植分析[J].仪器仪表用户,2008,15
(2):
121-122.
[4]师娟娟,彭迪.基于ARM9的嵌入式Linux移植[J].武汉理工大学学报,2008,30
(2):
205-208.