




免费预览已结束,剩余11页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 设 报 告课程名称 嵌入式系统课程设计 实验项目 web远程控制系统设计 指导教师 周金和 、 王勇 学 院 信息与通信工程 专 业 电子信息工程 班级/学号 电信1101/ 学生姓名 实验日期 成 绩 _ 16实验步骤一、搭建及移植web服务器 搭建及移植boa服务器是本次课题的要点所在,为了能够顺利搭建服务器,前期做了大量工作对其进行学习以及研究,在基本掌握boa服务器的搭建和移植的具体操作方法还有该服务器的工作方式、流程之后,才着手进行搭建和移植,即便如此,在搭建和移植的过程中还是遇到了不少问题,下文也进行了分析和解决。1.1 下载及配置BOA服务器1.1.1 下载安装boa服务器首先在/下载BOA服务器的源码:boa-0.94.13.tar.gz版本为0.94.13。对其进行解压:$ tar xzf boa-0.94.13.tar.gz 还要安装必要的工具bison,flex。否则会出现:make: yacc:命令未找到 make: * y.tab.c 错误 127。$ sudo apt-get install bison flex 在输入上一条命令之前需要保证虚拟机联网,虚拟机联网方式如下首先把主机联上网,虚拟机网络设置桥接改成nat$ sudo vim /etc/network/interfaces static改成dhcp ,在address,netmask, gateway加#注释用:wq保存并退出重启网路配置$sudo /etc/init.d/networking restart1.1.2 修改相关配置文件修改src/compat.h文件:打开compat.h找到这一条语句:#define 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(unable to dup2 the error log); */否则会出现错误:log.c:73 unable to dup2 the error log:bad file descriptor。修改src/boa.c文件。 打开src/boa.c注释掉下面两句话: #if 0 if (passwdbuf = NULL) DIE(”getpwuid”); if (initgroups(passwdbuf-pw_name, passwdbuf-pw_gid) = -1) DIE(”initgroups”); #endif否则会出现错误:boa.c:211 - getpwuid: No such file or directory。 #if 0 if (setuid(0) != -1) DIE(”icky Linux kernel bug!”); #endif否则会出现问题:boa.c:228 - icky Linux kernel bug!: No such file or directory。1.1.3 生成boa可执行文件进入相关目录生成makefile文件: $ cd boa-0.94.13/src $ ./configure 修改makefile文件。 $sudo vim Makefile 修改CC gcc 为 CC arm-linux-gnueabihf-gcc修改CPP gcc -E 为 CPP arm-linux-gnueabihf-gcc -E接下来进行编译。 $ make 然后为刚刚生成的二进制文件boa瘦身删除其调试信息。 $ arm-linux-gnueabihf-strip boa 1.1.4 修改配置找到配置文件boa.conf并进行如下修改: $ sudo gedit boa-conf 以下步骤需要在计算机上完成: (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/cgi-bin/ (5)对DoucmentRoot的修改将DoucmentRoot /var/www (这里是服务器初始网页放置的位置同样需要在SD卡同样的位置建立同样的文件夹并将名为index.html的网页放置在其中)。修改为DoucmentRoot /www (6)对ServerName的修改将#ServerName .here(取消掉注释否则提示没有服务器名)。修改为 ServerName .here否则会出现错误“gethostbyname:No such file or directory” (7)对AccessLog修改将AccessLog /var/log/boa/access_log(在SD卡相应位置建立同名文件夹以存放日志文件,否则提示找不到文件夹)。修改为#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.conf /media/rootfs/etc/boa 创建HTML文档的主目录/www: $ mkdir /www 创建CGI脚本所在的目录 /www/cgi-bin: $ mkdir /www/cgi-bin 1.2. 测试服务器动态网页功能到此为止服务器已经搭建完成了,接下来就要测试服务器是否能够成功运行动态网页了,为了顺利完成测试,首先要做的是让目标板和主机能够通过交叉网线通信:在虚拟机菜单栏中安照:虚拟机-设置-网络适配器-网络连接中选择桥街模式,这样就可以直接连接主机的物理网络。有时会出现无论怎样配置都无法联通的情况这时就需要使用虚拟机中的虚拟网络编辑器来重置网络配置。前面的设置完成后,先将windows下的ipv4设置为:IP地址:0,子网掩码:,默认网关:。然后设置Ubuntu下的ip地址:sudo vi /etc/network/interfaces 将主机的ip地址设置为这一网段:address 1 netmask: gateway: 重启主机的网络服务: sudo /etc/init.d/networking restart 再去配置目标板,同样将其置于同一网段: sudo gedit /etc/network/interfaces 将目标板的ip地址设置为同一网段:address 2 netmask: gateway:重启目标板的网络服务: sudo /etc/init.d/networking restart 配置完后在目标板上输入ifconfig可以查看到如下内容这时就可以测试主机与目标板之间的连通性了: 分别在主机和目标板上使用ping命令去测试相互之间的连通性:图 1.1 测试连通性出现上图所示信息就便表示着主机与目标板已经联通了,可以进行通信了。接下来要做的就是编译一个cgi程序,因为只是测试用所以就用最简单的hello world来测试:首先建立一个hello.c文件: $sudo gedit hello.c 编写hello world代码: #include int main(int argc, char* argv) printf(Content-type:text/htmlnn); printf(n); printf(cgiCH); printf(n); printf(Hello World! CGI C n); printf(n); printf(n); return 0; 保存。然后再对其进行编译,使之成为一个cgi文件: arm-linux-gnueabihf-gcc -o hello.cgi hello.c 在当前文件夹下便会生成hello.cgi,为这个文件添加权限,使其可执行: chmod +X hello.cgi 将这个文件移动到SD卡中之前所指定的服务器中的文件夹: sudo cp hello.cgi /media/rootfs/www/cgi-bin/ 现在可以打开浏览器在地址栏中输入2/cgi-bin/hello.cgi出现下图所示页面说明cgi功能可以使用,可以进行下一步工作了:(首先应在目标板中启动Boa服务器,步骤如下:在目标板中找到文件boa的目录,用cd命令进入,输入$sudo ./boa ,然后用ps -ef查看进程中是否有boa。或者用ps -ef|grep boa直接查找进程Boa更加简便。接下来才能访问服务器。否则会出现连接不到服务器的错误)图 boa的运行与进程查看图 1.2 动态网页测试二、实现嵌入式web远程控制功能 目前为止,服务器的搭建以及数据的传输等基本功能已经实现了,为了能够实现嵌入式web远程控制的功能,就需要让控制者进入到其主页来进行编辑提交,所以在这个页面中就要让控制者能够对目标板进行各种控制和修改,而html只是单方向的,不能进行信息的交互,这时候就需要cgi程序来完成交互的任务。2.1 静态网页的配置 首先建立一个index.html文件: sudo gedit index.html 编写index.html代码:无标题文档function MM_jumpMenu(targ,selObj,restore) /v3.0 eval(targ+.location=+selObj.optionsselObj.selectedIndex.value+); if (restore) selObj.selectedIndex=0; hello其实每个标记都是一一对应的。每个网页文件都是以开始和以结束。与之间的内容是网页的标题。会显示在浏览器的标题栏上。与之间放的是网页内容。 语句能够实现空行功能,以便使网页整体结构不会过于紧凑,hello将index.html拷贝到目标板HTML文档的主目录/www里。sudo cp index.html /media/rootfs/www该语句表示了在网页中加入一个超链接,该链接指向2/cgi-bin/hello.cgi 显示为hello用于测试服务器的cgi功能。效果如图所示:在虚拟机浏览器中输入2显示如下图所示图 2.1 HTML超链接 点击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脚本调用interfaces并对其进行修改,然而修改这个文件需要root权限,可是单单给shell脚本加上权限并不能达到目的,这时就需要借用一个c程序来提升其权限.首先建立一个allroot.c文件: sudo gedit allroot.c 编写allroot.c代码:#include #include #include #include int main()printf(Content-type: text/htmlnn); /输出类型 uid_t uid ,euid; uid = getuid() ; euid = geteuid(); if(setreuid(euid, uid) /交换这两个id perror(setreuid); system(sudo sh /www/cgi-bin/changeip.sh); /调用程序,原来的指导书没有sudo sh,不能成功的调用changeip.sh,因此在前面加上相应调用的语句才执行成功 return 0;保存。然后再对其进行编译,使之成为一个cgi文件: arm-linux-gnueabihf-gcc -o allroot.cgi allroot.c 在当前文件夹下便会生成allroot.cgi,为这个文件添加权限,使其可执行: chmod +X allroot.cgi 将这个文件移动到SD卡中之前所指定的服务器中的文件夹: sudo cp allroot.cgi /media/rootfs/www/cgi-bin/ 这个c程序所做的便是提升changip.sh脚本的权限。 当在网页中输入ip地址2后,进入changip.sh 将通过awk截取变量$f 以-为分隔符的第二个域($2)的值,并赋值给var_ip这个变量:var_ip=echo $QUERY_STRING | awk -F & print $1 | awk -F = print $2将得到的var_ip这个值写入interfaces:eth0_cfg=/etc/network/interfacessed -i /address/d $eth0_cfgecho address $var_ip $eth0_cfg这样就完成了ip的更改。changeip.sh:#!/bin/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 /sysconf.php/p ; then# exit#fiif $REQUEST_METHOD = POST ; then QUERY_STRING=cat /dev/stdinfiecho Content-type:text/htmlecho eth0_cfg=/etc/network/interfacesvar_ip=echo $QUERY_STRING | awk -F & print $1 | awk -F = print $2var_mask=echo $QUERY_STRING | awk -F & print $2 | awk -F = print $2var_gateway=echo $QUERY_STRING | awk -F & print $3 | awk -F = print $2sed -i /netmask/d $eth0_cfgsed -i /address/d $eth0_cfgsed -i /gateway/d $eth0_cfgecho address $var_ip $eth0_cfgecho netmask $var_mask $eth0_cfgecho gateway $var_gateway $eth0_cfg#ifconfig eth0 $var_ip netmask $var_mask#route add default gw $var_gateway为了能够使开发板重启同样需要一个提升权限的reboot.c程序,考虑到cgi的原理是需要将主机提交的数据提供给相应程序来执行,所以这样编写C语言.首先建立一个reboot.c文件: sudo gedit reboot.c 编写reboot.c代码:#include #include #include #include int main(int argc,char *argv,void) printf(Content-type: text/htmlnn); int a;if (a=1) printf(The system is goging to reboot .nn); system(sudo reboot); /原来的代码中没有sudo,因此在点击重启之后屏幕印出The system is goging to reboot .但是没有真正的重启系统,是因为重启系统需要有root的权限,因此加入sudo 之后便可以正常的实现功能 elsereturn(0);/原来的代码没有加;在编译的时候会报错,因此把分号加上了保存。然后再对其进行编译,使之成为一个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-bin/ 三、 测试与调试3. 1 测试远程控制功能3.1.1 配置ip地址功能首先将主机与开发板用网线串口线连好,打开SecureCRT连接进入开发板,如果是上电之前就连接好电脑的话,还可以看到一些启动信息。在开发板上启动boa服务器,之所以使用root权限进入是因为,如果用普通用户权限进入的话,会有端口被占用的提示,然而如果使用8080端口的话,对于本设计后面的进行会带来很多不必要的麻烦。启动boa服务器后,会显示启动信息,服务器版本,服务器创建时间以及服务器所占用的端口号,占用的端口号为80。在主机上打开浏览器,地址栏内输入开发板服务器的ip(2)这样就进入了服务器的主页,主页的内容很直接,两个按钮,一个超链接,一个文本框: boa服务器主页3.1.2 重启功能在开发板上测试重启功能的具体过程如下: 打开服务器初始的页面找到并点击重启按钮,重启这个功能看起来比改变ip要容易的多,但是如果使用c语言来编写cgi程序的时候往往会因为权限的问题带来很多的麻烦。因此要注意加sudo给到系统root权限。重启按钮 浏览器中的显示,目标板自动重启图 服务器重启3.1.3 更改ip功能为了确定ip是否更改首先查看开发板当前ip地址,输入ifconfig命令后可以看到当前的连接,硬件地址,ipv4和ipv6地址,广播地址,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高性能铁氧体磁体项目发展计划
- 干部廉洁考试及答案
- 2025年工信部考试中心题库及答案
- 房车知识培训班课件
- 2025年电工理论考试题目及答案
- 2025年广东军转考试真题及答案
- 2025年小学各科考试题及答案
- 慢丝车间安全培训课件
- 情景投稿课件模板
- 生物中考试题数学及答案
- 水利水电工程单元工程施工质量验收标准第8部分:安全监测工程
- 2022森林防火道路建设基本要求
- 华科版五年级全册信息技术教案(共24课时)
- (完整版)IATF16949新版过程乌龟图的编制与详解课件
- 制药企业仓库温湿度分布的验证
- GB∕T 3099.4-2021 紧固件术语 控制、检查、交付、接收和质量
- 山东临清实验中学2012学年八年级语文 7课背影共3课时教案(表格版) 人教新课标版
- 深圳牛津小学英语单词汇总
- 心脏基础解剖课件
- FBCDZ风机特性曲线(共47页)
- 外来手术器械及植入物管理
评论
0/150
提交评论