嵌入式課設(shè)報(bào)告web遠(yuǎn)程控制系統(tǒng)設(shè)計(jì)._第1頁(yè)
嵌入式課設(shè)報(bào)告web遠(yuǎn)程控制系統(tǒng)設(shè)計(jì)._第2頁(yè)
嵌入式課設(shè)報(bào)告web遠(yuǎn)程控制系統(tǒng)設(shè)計(jì)._第3頁(yè)
嵌入式課設(shè)報(bào)告web遠(yuǎn)程控制系統(tǒng)設(shè)計(jì)._第4頁(yè)
嵌入式課設(shè)報(bào)告web遠(yuǎn)程控制系統(tǒng)設(shè)計(jì)._第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、課 設(shè) 報(bào) 告課程名稱 嵌入式系統(tǒng)課程設(shè)計(jì) 實(shí)驗(yàn)項(xiàng)目 web遠(yuǎn)程控制系統(tǒng)設(shè)計(jì) 指導(dǎo)教師 周金和 、 王勇 學(xué) 院 信息與通信工程 專 業(yè) 電子信息工程 班級(jí)/學(xué)號(hào) 電信1101/ 學(xué)生姓名 實(shí)驗(yàn)日期 成 績(jī) _ 16實(shí)驗(yàn)步驟一、搭建及移植web服務(wù)器 搭建及移植boa服務(wù)器是本次課題的要點(diǎn)所在,為了能夠順利搭建服務(wù)器,前期做了大量工作對(duì)其進(jìn)行學(xué)習(xí)以及研究,在基本掌握boa服務(wù)器的搭建和移植的具體操作方法還有該服務(wù)器的工作方式、流程之后,才著手進(jìn)行搭建和移植,即便如此,在搭建和移植的過(guò)程中還是遇到了不少問(wèn)題,下文也進(jìn)行了分析和解決。1.1 下載及配置BOA服務(wù)器1.1.1 下載安裝boa服務(wù)器首

2、先在/下載BOA服務(wù)器的源碼:boa-0.94.13.tar.gz版本為0.94.13。對(duì)其進(jìn)行解壓:$ tar xzf boa-0.94.13.tar.gz 還要安裝必要的工具bison,flex。否則會(huì)出現(xiàn):make: yacc:命令未找到 make: * y.tab.c 錯(cuò)誤 127。$ sudo apt-get install bison flex 在輸入上一條命令之前需要保證虛擬機(jī)聯(lián)網(wǎng),虛擬機(jī)聯(lián)網(wǎng)方式如下首先把主機(jī)聯(lián)上網(wǎng),虛擬機(jī)網(wǎng)絡(luò)設(shè)置橋接改成nat$ sudo vim /etc/network/interfaces static改成dhcp ,在a

3、ddress,netmask, gateway加#注釋用:wq保存并退出重啟網(wǎng)路配置$sudo /etc/init.d/networking restart1.1.2 修改相關(guān)配置文件修改src/compat.h文件:打開(kāi)compat.h找到這一條語(yǔ)句:#define TIMEZONE_OFFSET(foo) foo#->tm_gmtoff 將其修改為: #define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff 這是由于本機(jī)所使用的交叉編譯版本對(duì)語(yǔ)句用法的不同。修改 src/log.c文件。 打開(kāi)log.c注釋掉下列語(yǔ)句: /*if (dup2(e

4、rror_log, STDERR_FILENO) = -1) DIE("unable to dup2 the error log"); */否則會(huì)出現(xiàn)錯(cuò)誤:log.c:73 unable to dup2 the error log:bad file descriptor。修改src/boa.c文件。 打開(kāi)src/boa.c注釋掉下面兩句話: #if 0 if (passwdbuf = NULL) DIE(”getpwuid”); if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) = -1) DIE(”in

5、itgroups”); #endif否則會(huì)出現(xiàn)錯(cuò)誤:boa.c:211 - getpwuid: No such file or directory。 #if 0 if (setuid(0) != -1) DIE(”icky Linux kernel bug!”); #endif否則會(huì)出現(xiàn)問(wèn)題:boa.c:228 - icky Linux kernel bug!: No such file or directory。1.1.3 生成boa可執(zhí)行文件進(jìn)入相關(guān)目錄生成makefile文件: $ cd boa-0.94.13/src $ ./configure 修改makefile文件。 $sudo

6、vim Makefile 修改CC gcc 為 CC arm-linux-gnueabihf-gcc修改CPP gcc -E 為 CPP arm-linux-gnueabihf-gcc -E接下來(lái)進(jìn)行編譯。 $ make 然后為剛剛生成的二進(jìn)制文件boa瘦身刪除其調(diào)試信息。 $ arm-linux-gnueabihf-strip boa 1.1.4 修改配置找到配置文件boa.conf并進(jìn)行如下修改: $ sudo gedit boa-conf 以下步驟需要在計(jì)算機(jī)上完成: (1)對(duì)Group的修改將Group nogroup(這是修改程序所屬的組)。修改為 Group 0 (2)對(duì)user的

7、修改將User nobody(這里是修改程序所屬的用戶)。修改為 User 0 (3)對(duì)ScriptAlias的修改將ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/(這里是配置服務(wù)器讀取cgi程序的目錄,需要在SD卡中同樣的位置建立同樣的目錄)。修改為 ScriptAlias /cgi-bin/ /www/cgi-bin/ (5)對(duì)DoucmentRoot的修改將DoucmentRoot /var/www (這里是服務(wù)器初始網(wǎng)頁(yè)放置的位置同樣需要在SD卡同樣的位置建立同樣的文件夾并將名為index.html的網(wǎng)頁(yè)放置在其中)。修改為DoucmentRoot /w

8、ww (6)對(duì)ServerName的修改將#ServerName .here(取消掉注釋否則提示沒(méi)有服務(wù)器名)。修改為 ServerName .here否則會(huì)出現(xiàn)錯(cuò)誤“gethostbyname:No such file or directory” (7)對(duì)AccessLog修改將AccessLog /var/log/boa/access_log(在SD卡相應(yīng)位置建立同名文件夾以存放日志文件,否則提示找不到文件夾)。修改為#AccessLog /var/log/boa/access_log否則會(huì)出現(xiàn)錯(cuò)誤提示:“unable to dup2 the

9、 error log: Bad file descriptor”修改完成后直接點(diǎn)擊文件左上方的保存按鈕進(jìn)行保存。在目標(biāo)板上需要做的配置:創(chuàng)建目錄/etc/boa并且把boa 和 boa.conf拷貝到這個(gè)目錄下: $ mkdir /etc/boa $ sudo cp boa.conf /media/rootfs/etc/boa 創(chuàng)建HTML文檔的主目錄/www: $ mkdir /www 創(chuàng)建CGI腳本所在的目錄 /www/cgi-bin: $ mkdir /www/cgi-bin 1.2. 測(cè)試服務(wù)器動(dòng)態(tài)網(wǎng)頁(yè)功能到此為止服務(wù)器已經(jīng)搭建完成了,接下來(lái)就要測(cè)試服務(wù)器是否能夠成功運(yùn)行動(dòng)態(tài)網(wǎng)頁(yè)了,為

10、了順利完成測(cè)試,首先要做的是讓目標(biāo)板和主機(jī)能夠通過(guò)交叉網(wǎng)線通信:在虛擬機(jī)菜單欄中安照:虛擬機(jī)-設(shè)置-網(wǎng)絡(luò)適配器-網(wǎng)絡(luò)連接中選擇橋街模式,這樣就可以直接連接主機(jī)的物理網(wǎng)絡(luò)。有時(shí)會(huì)出現(xiàn)無(wú)論怎樣配置都無(wú)法聯(lián)通的情況這時(shí)就需要使用虛擬機(jī)中的虛擬網(wǎng)絡(luò)編輯器來(lái)重置網(wǎng)絡(luò)配置。前面的設(shè)置完成后,先將windows下的ipv4設(shè)置為:IP地址:0,子網(wǎng)掩碼:,默認(rèn)網(wǎng)關(guān):。然后設(shè)置Ubuntu下的ip地址:sudo vi /etc/network/interfaces 將主機(jī)的ip地址設(shè)置為這一網(wǎng)段:address 1 n

11、etmask: gateway: 重啟主機(jī)的網(wǎng)絡(luò)服務(wù): sudo /etc/init.d/networking restart 再去配置目標(biāo)板,同樣將其置于同一網(wǎng)段: sudo gedit /etc/network/interfaces 將目標(biāo)板的ip地址設(shè)置為同一網(wǎng)段:address 2 netmask: gateway:重啟目標(biāo)板的網(wǎng)絡(luò)服務(wù): sudo /etc/init.d/networking restart 配置完后在目標(biāo)板上輸入ifconfig可以查看到如下內(nèi)容這時(shí)

12、就可以測(cè)試主機(jī)與目標(biāo)板之間的連通性了: 分別在主機(jī)和目標(biāo)板上使用ping命令去測(cè)試相互之間的連通性:圖 1.1 測(cè)試連通性出現(xiàn)上圖所示信息就便表示著主機(jī)與目標(biāo)板已經(jīng)聯(lián)通了,可以進(jìn)行通信了。接下來(lái)要做的就是編譯一個(gè)cgi程序,因?yàn)橹皇菧y(cè)試用所以就用最簡(jiǎn)單的hello world來(lái)測(cè)試:首先建立一個(gè)hello.c文件: $sudo gedit hello.c 編寫(xiě)hello world代碼: #include<stdio.h> int main(int argc, char* argv) printf("Content-type:text/htmlnn"); pri

13、ntf("<html>n"); printf("<head><title>cgiCHello.c</title></head>n"); printf("<body>n"); printf("<h1>Hello World! <font color="blue">"CGI C"</font> </h1>n"); printf("</body&g

14、t;n"); printf("</html>n"); return 0; 保存。然后再對(duì)其進(jìn)行編譯,使之成為一個(gè)cgi文件: arm-linux-gnueabihf-gcc -o hello.cgi hello.c 在當(dāng)前文件夾下便會(huì)生成hello.cgi,為這個(gè)文件添加權(quán)限,使其可執(zhí)行: chmod +X hello.cgi 將這個(gè)文件移動(dòng)到SD卡中之前所指定的服務(wù)器中的文件夾: sudo cp hello.cgi /media/rootfs/www/cgi-bin/ 現(xiàn)在可以打開(kāi)瀏覽器在地址欄中輸入2/cgi-bin/hell

15、o.cgi出現(xiàn)下圖所示頁(yè)面說(shuō)明cgi功能可以使用,可以進(jìn)行下一步工作了:(首先應(yīng)在目標(biāo)板中啟動(dòng)Boa服務(wù)器,步驟如下:在目標(biāo)板中找到文件boa的目錄,用cd命令進(jìn)入,輸入$sudo ./boa ,然后用ps -ef查看進(jìn)程中是否有boa?;蛘哂胮s -ef|grep boa直接查找進(jìn)程Boa更加簡(jiǎn)便。接下來(lái)才能訪問(wèn)服務(wù)器。否則會(huì)出現(xiàn)連接不到服務(wù)器的錯(cuò)誤)圖 boa的運(yùn)行與進(jìn)程查看圖 1.2 動(dòng)態(tài)網(wǎng)頁(yè)測(cè)試二、實(shí)現(xiàn)嵌入式web遠(yuǎn)程控制功能 目前為止,服務(wù)器的搭建以及數(shù)據(jù)的傳輸?shù)然竟δ芤呀?jīng)實(shí)現(xiàn)了,為了能夠?qū)崿F(xiàn)嵌入式web遠(yuǎn)程控制的功能,就需要讓控制者進(jìn)入到其主頁(yè)來(lái)進(jìn)行編輯提交,所以在這個(gè)頁(yè)面中就要

16、讓控制者能夠?qū)δ繕?biāo)板進(jìn)行各種控制和修改,而html只是單方向的,不能進(jìn)行信息的交互,這時(shí)候就需要cgi程序來(lái)完成交互的任務(wù)。2.1 靜態(tài)網(wǎng)頁(yè)的配置 首先建立一個(gè)index.html文件: sudo gedit index.html 編寫(xiě)index.html代碼:<!DOCTYPE HTML PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"><html><head><meta http-equiv=&

17、quot;Content-Type" content="text/html; charset=utf-8"><title>無(wú)標(biāo)題文檔</title><script type="text/javascript">function MM_jumpMenu(targ,selObj,restore) /v3.0 eval(targ+".location='"+selObj.optionsselObj.selectedIndex.value+"'"); if

18、 (restore) selObj.selectedIndex=0;</script></head><body><p>&nbsp;</p> <p>&nbsp;</p> <form id="form1" name="form1" method="get" action="/cgi-bin/reboot.cgi"> <input type="submit" value="重

19、啟"></form><a href="0/cgi-bin/hello.cgi#tips" target="_blank">hello</a><pre><form action="/cgi-bin/allroot.cgi" method="post"><input type="text" name="var_ip"><input type="

20、submit" value="更換"></form></p></html>其實(shí)每個(gè)標(biāo)記都是一一對(duì)應(yīng)的。每個(gè)網(wǎng)頁(yè)文件都是以<html>開(kāi)始和以</html>結(jié)束。<title>與</title>之間的內(nèi)容是網(wǎng)頁(yè)的標(biāo)題。會(huì)顯示在瀏覽器的標(biāo)題欄上。<body>與</body>之間放的是網(wǎng)頁(yè)內(nèi)容。<p>&nbsp;</p> 語(yǔ)句能夠?qū)崿F(xiàn)空行功能,以便使網(wǎng)頁(yè)整體結(jié)構(gòu)不會(huì)過(guò)于緊湊,<a href="http:/181

21、.168.1.10/cgi-bin/hello.cgi#tips" target="_blank">hello</a><pre>將index.html拷貝到目標(biāo)板HTML文檔的主目錄/www里。sudo cp index.html /media/rootfs/www該語(yǔ)句表示了在網(wǎng)頁(yè)中加入一個(gè)超鏈接,該鏈接指向2/cgi-bin/hello.cgi 顯示為hello用于測(cè)試服務(wù)器的cgi功能。效果如圖所示:在虛擬機(jī)瀏覽器中輸入2顯示如下圖所示圖 2.1 HTML超鏈接 點(diǎn)擊hel

22、lo之后服務(wù)器跳轉(zhuǎn),頁(yè)面顯示的內(nèi)容:圖 2.2 超鏈接hello.cgi2.2 動(dòng)態(tài)網(wǎng)頁(yè)的配置2.2.1 HTML表單<form action="/cgi-bin/allroot.cgi" method="post"> /表單動(dòng)作指向allroot.cgi 傳送方式為post<input type="text" name="var_ip"> /插入文本框,賦值名為var_ip<input type="submit" > /插入提交按鈕 </form>

23、; /表單結(jié)束上面的語(yǔ)句表示了以post的方式將表單內(nèi)容發(fā)送給allroot.cgi,同時(shí)定義了一個(gè)按鍵和一個(gè)輸入文本框,按鈕的屬性為提交按鈕,文本框內(nèi)的值為var_ip的值。2.2.2 cgi功能的實(shí)現(xiàn)為了能夠?qū)崿F(xiàn)更改ip的的功能就需要寫(xiě)一個(gè)shell腳本調(diào)用interfaces并對(duì)其進(jìn)行修改,然而修改這個(gè)文件需要root權(quán)限,可是單單給shell腳本加上權(quán)限并不能達(dá)到目的,這時(shí)就需要借用一個(gè)c程序來(lái)提升其權(quán)限.首先建立一個(gè)allroot.c文件: sudo gedit allroot.c 編寫(xiě)allroot.c代碼:#include <stdio.h>#include <

24、stdlib.h>#include <sys/types.h>#include <unistd.h>int main()printf("Content-type: text/htmlnn"); /輸出類(lèi)型 uid_t uid ,euid; uid = getuid() ; euid = geteuid(); if(setreuid(euid, uid) /交換這兩個(gè)id perror("setreuid"); system("sudo sh /www/cgi-bin/changeip.sh"); /調(diào)用程

25、序,原來(lái)的指導(dǎo)書(shū)沒(méi)有sudo sh,不能成功的調(diào)用changeip.sh,因此在前面加上相應(yīng)調(diào)用的語(yǔ)句才執(zhí)行成功 return 0;保存。然后再對(duì)其進(jìn)行編譯,使之成為一個(gè)cgi文件: arm-linux-gnueabihf-gcc -o allroot.cgi allroot.c 在當(dāng)前文件夾下便會(huì)生成allroot.cgi,為這個(gè)文件添加權(quán)限,使其可執(zhí)行: chmod +X allroot.cgi 將這個(gè)文件移動(dòng)到SD卡中之前所指定的服務(wù)器中的文件夾: sudo cp allroot.cgi /media/rootfs/www/cgi-bin/ 這個(gè)c程序所做的便是提升changip.sh腳

26、本的權(quán)限。 當(dāng)在網(wǎng)頁(yè)中輸入ip地址2后,進(jìn)入changip.sh 將通過(guò)awk截取變量$f 以-為分隔符的第二個(gè)域($2)的值,并賦值給var_ip這個(gè)變量:var_ip=echo $QUERY_STRING | awk -F '&' 'print $1' | awk -F '=' 'print $2'將得到的var_ip這個(gè)值寫(xiě)入interfaces:eth0_cfg="/etc/network/interfaces"sed -i '/address/d' $et

27、h0_cfgecho "address $var_ip" >> $eth0_cfg這樣就完成了ip的更改。changeip.sh:#!/bin/bash#if the program what called this cgi isn't sysconf.php, this script will refuse to run!#如果不是通過(guò)sysconf.php調(diào)用這個(gè)腳本,則拒絕執(zhí)行,以保證安全性,避免直接通過(guò)http加參數(shù)的get#方式直接運(yùn)行#if -z echo $HTTP_REFERER | sed -n '/sysconf.php/p&

28、#39; ; then# exit#fiif $REQUEST_METHOD = "POST" ; then QUERY_STRING=cat /dev/stdinfiecho "Content-type:text/html"echo ""eth0_cfg="/etc/network/interfaces"var_ip=echo $QUERY_STRING | awk -F '&' 'print $1' | awk -F '=' 'print $2&#

29、39;var_mask=echo $QUERY_STRING | awk -F '&' 'print $2' | awk -F '=' 'print $2'var_gateway=echo $QUERY_STRING | awk -F '&' 'print $3' | awk -F '=' 'print $2'sed -i '/netmask/d' $eth0_cfgsed -i '/address/d' $eth0_c

30、fgsed -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為了能夠使開(kāi)發(fā)板重啟同樣需要一個(gè)提升權(quán)限的reboot

31、.c程序,考慮到cgi的原理是需要將主機(jī)提交的數(shù)據(jù)提供給相應(yīng)程序來(lái)執(zhí)行,所以這樣編寫(xiě)C語(yǔ)言.首先建立一個(gè)reboot.c文件: sudo gedit reboot.c 編寫(xiě)reboot.c代碼:#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <unistd.h> int main(int argc,char *argv,void) printf("Content-type: text/htmlnn"); int a;if (a=1) pri

32、ntf("The system is goging to reboot .nn"); system("sudo reboot"); /原來(lái)的代碼中沒(méi)有sudo,因此在點(diǎn)擊重啟之后屏幕印出The system is goging to reboot .但是沒(méi)有真正的重啟系統(tǒng),是因?yàn)橹貑⑾到y(tǒng)需要有root的權(quán)限,因此加入sudo 之后便可以正常的實(shí)現(xiàn)功能 elsereturn(0);/原來(lái)的代碼沒(méi)有加;在編譯的時(shí)候會(huì)報(bào)錯(cuò),因此把分號(hào)加上了保存。然后再對(duì)其進(jìn)行編譯,使之成為一個(gè)cgi文件: arm-linux-gnueabihf-gcc -o reboot.c

33、gi reboot.c 在當(dāng)前文件夾下便會(huì)生成reboot.cgi,為這個(gè)文件添加權(quán)限,使其可執(zhí)行: chmod +X reboot.cgi 將這個(gè)文件移動(dòng)到SD卡中之前所指定的服務(wù)器中的文件夾: sudo cp reboot.cgi /media/rootfs/www/cgi-bin/ 三、 測(cè)試與調(diào)試3. 1 測(cè)試遠(yuǎn)程控制功能3.1.1 配置ip地址功能首先將主機(jī)與開(kāi)發(fā)板用網(wǎng)線串口線連好,打開(kāi)SecureCRT連接進(jìn)入開(kāi)發(fā)板,如果是上電之前就連接好電腦的話,還可以看到一些啟動(dòng)信息。在開(kāi)發(fā)板上啟動(dòng)boa服務(wù)器,之所以使用root權(quán)限進(jìn)入是因?yàn)?,如果用普通用戶?quán)限進(jìn)入的話,會(huì)有端口被占用的提示,然而如果使用8080端口的話,對(duì)于本設(shè)計(jì)后面的進(jìn)行會(huì)帶來(lái)很多不必要的麻煩。啟動(dòng)boa服務(wù)器后,會(huì)顯示啟動(dòng)信息,服務(wù)器版本,服務(wù)器創(chuàng)建時(shí)間以及服務(wù)器所占用的端口號(hào),占用的端口號(hào)為80。在主機(jī)上打開(kāi)瀏覽器,地址欄內(nèi)輸入開(kāi)發(fā)板服務(wù)器的ip(2)這樣就進(jìn)入了服務(wù)器的主頁(yè),主頁(yè)的內(nèi)容很直接,兩個(gè)按鈕,一個(gè)超鏈接,一個(gè)文本框: boa服務(wù)器主頁(yè)3.1.2 重啟功能

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論