嵌入式课设报告web远程控制系统设计_第1页
嵌入式课设报告web远程控制系统设计_第2页
嵌入式课设报告web远程控制系统设计_第3页
嵌入式课设报告web远程控制系统设计_第4页
嵌入式课设报告web远程控制系统设计_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课设报告课程名称嵌入式系统课程设计实验项目web远程控制系统设计指导教师周金和、王勇学院信息与通信工程专业电子信息工程班级/学号电信1101/学生姓名实验日期成 绩实验步骤一、搭建及移植web服务器搭建及移植boa服务器是本次课题的要点所在,为了能够顺利搭建服务器,前期做了大量工作 对其进行学习以及研究,在基本掌握boa服务器的搭建和移植的具体操作方法还有该服务器的工作方式、流程之后,才着手进行搭建和移植,即便如此,在搭建和移植的过程中还是遇到了不少问题, 下文也进行了分析和解决。1.1下载及配置BOA服务器1.1.1 下载安装boa服务器对其进行解压:还要安装必要的工具 bison, fle

2、x。否则会出现:make: yacc :命令未找到$ sudo apt-get in stall bis on flex在输入上一条命令之前需要保证虚拟机联网,虚拟机联网方式如下 首先把主机联上网,虚拟机网络设置桥接改成nat$ sudo vim /etc/network/interfacesstatic 改成 dhcp ,在 address netmask, gateway 力口#注释 用:wq保存并退出重启网路配置$sudo /etc/init.d/networking restart1.1.2修改相关配置文件修改 src/compat.h 文件:打开compat.h找到这一条语句:#de

3、fine TIMEZONE OFFSET(foo) foo#-tm gmtoff将其修改为:#define TIMEZONE OFFSET(foo) (foo)-tm gmtoff这是由于本机所使用的交叉编译版本对语句用法的不同。修改src/log.c文件。打开log.c注释掉下列语句:/*if (dup2(error_log, STDERR_FILENO) = -1) DIE(u nable to dup2 the error log);*/否则会出现错误:log.c:73 unable to dup2 the error log:bad file descriptor 。修改src/boa

4、.c文件。打开src/boa.c注释掉下面两句话:#if 0if (passwdbuf = NULL) DIE(” getpwuid ” );if (in itgroups(passwdbuf-pw_ name, passwdbuf-pw_gid) = -1) DIE(” initgroups ” );#en dif否则会出现错误:boa.c:211 - getpwuid: No such file or directory 。#if 0if (setuid(0) != -1) DIE( ” icky Linux kernel bug!”);#en dif否则会出现问题:boa.c:228 -

5、 icky Li nux kernel bug!: No such file or directory 。1.1.3 生成boa可执行文件进入相关目录生成makefile文件:$ ./con figure修改makefile文件。$sudo vim Makefile修改 CC = gcc 为 CC = arm-linux-gnueabihf-gcc修改 CPP = gcc -E 为 CPP = arm-linux-gnueabihf-gcc-E接下来进行编译。$ make然后为刚刚生成的二进制文件boa瘦身删除其调试信息。$ arm-li nux-gnu eabihf-stripboa1.1.

6、4修改配置找到配置文件boa.co nf并进行如下修改:$ sudo gedit boa-c onf以下步骤需要在计算机上完成:(1) 对Group的修改将Group nogroup (这是修改程序所属的组)。修改为Group 0(2) 对user的修改将User nobody (这里是修改程序所属的用户)。修改为User 0(3) 对 ScriptAlias 的修改将ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/(这里是配置服务器读取cgi程序的目录,需要在 SD卡中同样 的位置建立同样的目录)。修改为 ScriptAlias /cgi-bin/ /www/c

7、gi-bin/(5)对 DoucmentRoot 的修改将DoucmentRoot /var/www(这里是服务器初始网页放置的位置同样需要在SD卡同样的位置建立同样的文件夹并将名为index.html的网页放置在其中)。修改为 DoucmentRoot /www(6)对 ServerName 的修改将#ServerName (取消掉注释否则提示没有服务器名)。否则会出现错误 gethostbyname:No such file or directory ”(7)对 AccessLog 修改将AccessLog /var/log/boa/access_log (在SD卡相应位置建立同名文件夹以

8、存放日志文件,否则提示 找不到文件夹)。修改为 #AccessLog /var/log/boa/access_log否则会出现错误提示:unable to dup2 the error log: Bad file descriptor ”修改完成后直接点击文件左上方的保存按钮进行保存。在目标板上需要做的配置:创建目录/etc/boa并且把boa和boa.conf拷贝到这个目录下:$ mkdir /etc/boa$ sudo cp boa.c onf /media/rootfs/etc/boa创建HTML文档的主目录/www :$ mkdir /www创建CGI脚本所在的目录/www/cgi-b

9、in :$ mkdir /www/cgi-b in1.2.测试服务器动态网页功能到此为止服务器已经搭建完成了,接下来就要测试服务器是否能够成功运行动态网页了,为了 顺利完成测试,首先要做的是让目标板和主机能够通过交叉网线通信:0sudo vi /etc/ network/i nterfaces1重启主机的网络服务:sudo /etc/i nit.d/network ing restart再去配置目标板,同样将其置于同一网段:sudo gedit /etc/ network/i nterfaces重启目标板的网络服务:sudo /etc/i nit.d/network ing restart配置

10、完后在目标板上输入ifconfig可以查看到如下内容这时就可以测试主机与目标板之间的连通性了:分别在主机和目标板上使用ping命令去测试相互之间的连通性:图1.1测试连通性 出现上图所示信息就便表示着主机与目标板已经联通了,可以进行通信了。接下来要做的就是编译一个cgi程序,因为只是测试用所以就用最简单的hello world来测试:首先建立一个 hello.c文件:$sudo gedit hello.c编写hello world代码:#i ncludeint main (i nt argc, char* argv)prin tf(Co nte nt-type:text/htmlnn);pri

11、n tf(n);prin tf(cgiCH);prin tf(n);prin tf(Hello World! CGI Cn);prin tf(n ”);prin tf(n);return 0;,I保存。然后再对其进行编译,使之成为一个 cgi文件:arm-l inu x-g nu eabihf-gcc-o hello.cgi hello.c在当前文件夹下便会生成hello.cgi,为这个文件添加权限,使其可执行:chmod +X hello.cgi将这个文件移动到 SD卡中之前所指定的服务器中的文件夹:sudo cp hello.cgi /media/rootfs/www/cgi

12、-b in/现在可以打开浏览器在地址栏中输入2/cgi-bin/hello.cgi出现下图所示页面说明cgi功能可以使用,可以进行下一步工作了:(首先应在目标板中启动Boa服务器,步骤如下:在目标板中找到文件boa的目录,用cd命令进入,输入$sudo ./boa ,然后用ps -ef查看进程中是否有boa。或者用ps -ef|grep boa直接查找进程 Boa更加简便。接下来才能访问服务器。否则会出现连接不到服务 器的错误)图 boa的运行与进程查看图1.2动态网页测试二、实现嵌入式web远程控制功能目前为止,服务器的搭建以及数据的传输等基本功能已经实现了,为了能够实现嵌入式web远程控制

13、的功能,就需要让控制者进入到其主页来进行编辑提交,所以在这个页面中就要让控制者能 够对目标板进行各种控制和修改,而html只是单方向的,不能进行信息的交互,这时候就需要cgi程序来完成交互的任务。2.1静态网页的配置首先建立一个 index.html文件:sudo gedit in dex.html编写index.html代码: 无标题文档fun ctio n MM_ju mpMe nu(targ,selObj,restore) v3.0eval(targ+.location=+selObj.optionsselObj.selectedlndex.value+);if (restore) se

14、lObj.selectedI ndex=0; &n bsp;&n bsp;vinput type=submit value=更换其实每个标记都是一一对应的。每个网页文件都是以开始和以结束。与之间的内容是网页的标题。会显示在浏览器的标题栏上。与之间放的是网页内容。&n bsp;语句能够实现空行功能,以便使网页整体结构不会过于紧凑,将index.html拷贝到目标板 HTML文档的主目录/www里。sudo cp in dex.html /media/rootfs/www2/cgi-bin/hello.cgi显示为hello用于测试服务器的cgi功能。效果如图所示:在虚拟机浏览器中输入图2.1 H

15、TML超链接点击hello之后服务器跳转,页面显示的内容:图2.2 超链接hello.cgi2.2动态网页的配置2.2.1 HTML 表单/表单动作指向 allroot.cgi 传送方式为 post/ 插入文本框,赋值名为var ip/插入提交按钮/表单结束上面的语句表示了以post的方式将表单内容发送给allroot.cgi ,同时定义了一个按键和一个输入文本框,按钮的属性为提交按钮,文本框内的值为var_ip的值。2.2.2 cgi功能的实现为了能够实现更改ip的的功能就需要写一个shell脚本调用in terfaces并对其进行修改,然而修改这个文件需要root权限,可是单单给 shel

16、l脚本加上权限并不能达到目的,这时就需要借用一个c程序来提升其权限首先建立一个 allroot.c文件:sudo gedit allroot.c编写allroot.c代码:#i nclude #i nclude #in clude #in clude int mai n()prin tf(Co nte nt-type: text/htmlnn);输出类型uid_t uid ,euid;uid = getuid(); euid = geteuid();if(setreuid(euid, uid)/交换这两个 idperror(setreuid);system(sudo sh /www/cgi-b

17、in/changeip.sh);调用程序,原来的指导书没有sudo sh,不能成功的调用changeip.sh,因此在前面加上相应调用的语句才执行成功return 0;I 保存。然后再对其进行编译,使之成为一个cgi文件:arm-l inu x-g nu eabihf-gcc-o allroot.cgi allroot.c在当前文件夹下便会生成allroot.cgi,为这个文件添加权限,使其可执行:chmod +X allroot.cgi将这个文件移动到SD卡中之前所指定的服务器中的文件夹:sudo cp allroot.cgi /media/rootfs/www/cgi-bin/这个c程序所

18、做的便是提升changip.sh脚本的权限。当在网页中输入ip地址后,进入changip.sh将通过awk截取变量$f以-为分隔符的第二个域 ($2)的值,并赋值给 var ip这个变量:var ip=echo $QUERY STRING | awk -F & print $1T awk -F 三print $2”将得到的var ip这个值写入in terfaces:ethO cfg=/etc/network/interfacessed -i /Aaddress/d $eth0_cfgecho address $var ip $eth0 cfg这样就完成了 ip的更改。cha ngeip.sh

19、:#!/bi n/bash#if the program what called this cgi isnt sysconf.php, this script will refuse to run!#如果不是通过sysconf.php调用这个脚本,则拒绝执行,以保证安全性,避免直接通过http加参数的get#方式直接运行#if -z echo $HTTP_REFERER | sed -n /sysco nf.php/p、 ; the n# exit#fiif $REQUEST_METHOD= POST ; the nQUERY_STRING=cat /dev/stdi nfiecho Cont

20、en t-type:text/htmlecho eth0_cfg=/etc/ network/i nterfacesvar_ip=echo $QUERY_STRING | awk -F & print $1 | awk -F = pri nt $2 var_mask=echo $QUERY_STRING | awk -F & print $2 | awk -F = pri nt $2、 var_gateway=echo $QUERY_STRING | awk -F & print $3 | awk -F = print $2、 sed -i /A netmask/d $eth0_cfg sed

21、 -i /Aaddress/d $eth0_cfg sed -i /Agateway/d $eth0_cfgecho address $var_ip $eth0_cfgecho n etmask $var_mask $eth0_cfgecho gateway $var_gateway $eth0_cfg#ifc onfig eth0 $var_ip n etmask $var_mask#route add default gw $var gateway为了能够使开发板重启同样需要一个提升权限的reboot.c程序,考虑到cgi的原理是需要将主机提交的数据提供给相应程序来执行,所以这样编写C语言

22、.首先建立一个 reboot.c文件:sudo gedit reboot.c编写reboot.c代码:#i nclude #i nclude #in clude #in clude int main (i nt argc,char *argv,void)prin tf(Co nte nt-type: text/htmlnn ”);int a;if (a=1)pri ntf(The system is gog ing to rebootnn ”);system(sudo reboot); 原来的代码中没有 sudo,因此在点击重启之后屏幕印出Thesystem is goging to rebo

23、ot .但是没有真正的重启系统,是因为重启系统需要有root的权限,因此加入sudo之后便可以正常的实现功能elsereturn(O); 原来的代码没有加;在编译的时候会报错,因此把分号加上了保存。然后再对其进行编译,使之成为一个 cgi文件:arm-linux-gnueabihf-gcc -o reboot.cgi reboot.c在当前文件夹下便会生成reboot.cgi,为这个文件添加权限,使其可执行:chmod +X reboot.cgi将这个文件移动到 SD卡中之前所指定的服务器中的文件夹:sudo cp reboot.cgi /media/rootfs/www/cgi-b in/三

24、、测试与调试3. 1测试远程控制功能3.1.1配置ip地址功能首先将主机与开发板用网线串口线连好,打开SecureCRT连接进入开发板,如果是上电之前就连接好电脑的话,还可以看到一些启动信息。在开发板上启动boa服务器,之所以使用root权限进入是因为,如果用普通用户权限进入的话, 会有端口被占用的提示,然而如果使用8080端口的话,对于本设计后面的进行会带来很多不必要的麻烦。启动boa服务器后,会显示启动信息,服务器版本,服务器创建时间以及服务器所占用的端口 号,占用的端口号为 80。2)这样就进入了服务器的主页,主页的内容很直接,两个按钮,一个超链接,一个文本框:boa服务器主页3.1.2重启功能在开发板上测试重启功能的具体过程如下:打开服务器初始的页面找到并点击重启按钮,重启这个功能看起来比改变ip要容易的多,但是如果使用c语言来编写cgi程序的时候往往会因为权限的问题带来很多的麻烦。因此要注意加sudo给到系统root权限。重启按钮浏览器中的显示,目

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论