iTop-4412网络通信之web服务器搭建和简单的web控制IO(LED)完整实验分析笔记,不会让你失望的

相信看到我这篇文章的,有一大部分是购买了讯为的开发板,看了教程后来查阅的。我也是按照他的教程去做了这个实验。但是我遇到了一些问题:按照视频教程一步一步做最后没有实验成果,我初步分析了一下是由于他的linux的手册和视频中设计的NFS文件系统部分有缺失,说白了教程里的文件操作最后归根到底实际是在开发板上操作的。只不过按照视频教程里说的是开发板开机后自己自动挂载NFS后执行boa,但是我在之前的教程里就没看到关于挂载了的NFS文件系统一节,只看到有NFS共享目录。自我认为挂载了的NFS文件系统和NFS共享目录是有区别的。所以得出结果是必须自己仿照教程自己在开发板上手动文件操作,废话不多说了,搞起:
1、按照教程的步骤第一步是将boa的压缩包复制到Ubuntu系统中进行解压,复制的位置自己找,随便一个地方都可以,只要自己能找到。我把压缩包放的位置如下(用SSH软件直接拖到里边就行):

root@ubuntu:/home/linuxsystemcode/web#

如上所示我是放在了web这个文件夹里;这里提一下这个boa的文件自己可以去boa的官方(地址http://www.boa.org/)去下载;
2、接下来的操作就是对这个压缩包进行解压(这步还是在Ubuntu中操作的):

tar -vxf boa-0.94.13.tar.gz 

3、解压后会有名字为:busybox-1.22.1的文件。进入这个文件夹下的src文件夹里,运行./configure生成Makefile编译文件,具体操作如下(这步还是在Ubuntu中操作的):

root@ubuntu:/home/linuxsystemcode/web# cd boa-0.94.13
root@ubuntu:/home/linuxsystemcode/web/boa-0.94.13# cd src
root@ubuntu:/home/linuxsystemcode/web/boa-0.94.13/src# ./configure

以上操作有就会生成一个Makefile名字的文件,我们打开这个文件,修改其中的两个参数:

root@ubuntu:/home/linuxsystemcode/web/boa-0.94.13/src# vi Makefile

在Makefile这个文件里的第33行左右有以下两行代码:

CC = gcc
CPP = gcc -E

修改成以下代码:

CC = arm-none-linux-gnueabi-gcc -static
CPP = arm-none-linux-gnueabi-gcc -E -static

然后:wq保存退出,输入make命令开始编译boa:

root@ubuntu:/home/linuxsystemcode/web/boa-0.94.13/src# make

这时会在最后一行有一个报错make: *** [util.o] Error 1,接着解决这个报错;使用vi 命令打开当前目录下的compat.h进行代码修改具体操作如下(注意路径,是之前编译时候的那个文件夹里直接打开compat.h文件):

root@ubuntu:/home/linuxsystemcode/web/boa-0.94.13/src# vi compat.h

打开文件后到第123行代码左右找到#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff一行,改为如下代码:

#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff

改完保存退出,接着make编译,编译成功了,没有报错。然后ls查看下是否生成了名为boa文件,我这里生成了如下:

root@ubuntu:/home/linuxsystemcode/web/boa-0.94.13/src# ls
acconfig.h     cgi_header.o         escape.h     Makefile      select.c
aclocal.m4     cgi.o                escape.o     Makefile.in   select.o
alias.c        check_struct_for.m4  get.c        mmap_cache.c  signals.c
alias.o        compat.h             get.o        mmap_cache.o  signals.o
boa            config.c             globals.h    parse.h       sublog.c
boa.c          config.cache         hash.c       pipe.c        sublog.o
boa_grammar.y  config.h             hash.o       pipe.o        timestamp.c
boa.h          config.h.in          index_dir.c  queue.c       timestamp.o
boa_indexer    config.log           index_dir.o  queue.o       util.c
boa_lexer.l    config.o             ip.c         read.c        util.o
boa.o          config.status        ip.o         read.o        webindex.pl
buffer.c       configure            lex.yy.c     request.c     y.tab.c
buffer.o       configure.in         lex.yy.o     request.o     y.tab.h
cgi.c          defines.h            log.c        response.c    y.tab.o
cgi_header.c   escape.c             log.o        response.o

然后查看一下boa文件的大小:

root@ubuntu:/home/linuxsystemcode/web/boa-0.94.13/src# ll boa
-rwxr-xr-x 1 root root 932735 Apr 16 04:56 boa*

上边可看出文件有点儿大,使用arm-none-linux-gnueabi-strip boa命令给文件瘦身一下,操作如下:

root@ubuntu:/home/linuxsystemcode/web/boa-0.94.13/src# arm-none-linux-gnueabi-strip boa
root@ubuntu:/home/linuxsystemcode/web/boa-0.94.13/src# ll boa
-rwxr-xr-x 1 root root 642340 Apr 16 04:57 boa*

可以看出boa文件小了一些,到这里boa编译就完成了。在Ubuntu上的操作就暂时结束了,下边的操作基本都在开发板的Linux系统上操作的,除非另有说明。
4、启动开发板,将之前编译成功生成的boa文件拷贝到开发板的bin目录下(也就是系统的根目录)。我这里是利用前边学过的TFTP实验来下载到开发板的bin目录下的,你们也可以用U盘直接拷贝到开发板或者用NFS文件共享把boa文件复制到开发板的bin文件夹里,操作如下(这里指的是我利用TFTP的操作,是在Ubuntu中操作的)。
我提前把编译后的boa文件在Ubuntu中复制到了Ubuntu的tftp文件夹里,方便后边的在开发板下载这个文件(有关TFTP文件下载和NFS文件共享实验我会再后边补上,或者你自己去查看一下讯为的视频和手册都有的):

root@ubuntu:~# cd /var/tftpboot/              /*这里就是进入到我的TFTP文件夹里*/
root@ubuntu:/var/tftpboot# cp /home/linuxsystemcode/web/boa-0.94.13/src/boa ./       /*这里就是把boa文件拷贝到我的TFTP文件夹里*/

下面就是在开发板利用TFTP把boa文件下载到开发板的bin文件夹里,如果你自己拷贝到bin里了,就不需要开这步了:

[root@iTOP-4412]#cd bin       							//这里是先进入bin文件夹里
[root@iTOP-4412]#tftp -g -l boa -r boa 192.168.0.101	//这里是把Ubuntu中TFTP文件夹里的boa文件下载到开发板的bin里
[root@iTOP-4412]#ls                                  	//查看是否下载成功,下边第三行第一个就是boa,下载成功
ash            dnsdomainname  kbd_mode       mv             setarch
base64         dumpkmap       kill           netstat        setserial
boa            echo           linux32        nice           sh
busybox        ed             linux64        pidof          sleep
cat            egrep          ln             ping           stat
catv           false          login          ping6          stty
chattr         fdflush        ls             pipe_progress  su
chgrp          fgrep          lsattr         printenv       sync
chmod          fsync          lzop           ps             tar
chown          getopt         makemime       pwd            touch
conspy         grep           mkdir          reformime      true
cp             gunzip         mknod          rev            umount
cpio           gzip           mktemp         rm             uname
cttyhack       hostname       more           rmdir          usleep
date           hush           mount          rpm            vi
dd             ionice         mountpoint     run-parts      watch
df             iostat         mpstat         scriptreplay   zcat
dmesg          ipcalc         mt             sed
[root@iTOP-4412]#

复制成功后,要在开发板上新建几个文件。首先就是在根目录的etc文件夹下新建boa文件,操作如下:

[root@iTOP-4412]#mkdir boa		//创建boa文件		
[root@iTOP-4412]#ls				//查看boa文件是否创建成功,成功!
boa           group         init.d        passwd        rc.d
eth0-setting  hosts         mime.types    profile       resolv.conf
[root@iTOP-4412]#

接着就是在开发板系统的根目录下创建一个名为www文件,操作如下:

[root@iTOP-4412]#cd			//返回根目录		
[root@iTOP-4412]#mkdir www	//新建www文件
[root@iTOP-4412]#ls			//查看是否新建成功,成功!
bin      etc      linuxrc  proc     sys      tmp      var
dev      lib      mnt      sbin     tftp     usr      www
[root@iTOP-4412]#

然后就是在上边新建的www文件夹里新建名为cgi-bin文件,操作如下:

[root@iTOP-4412]#cd www			//进入www文件里		
[root@iTOP-4412]#mkdir cgi-bin	//新建cgi-bin文件
[root@iTOP-4412]#ls			//查看是否新建成功,成功!
cgi-bin
[root@iTOP-4412]#

boa 程序运行需要一个配置文件:boa.conf,在Ubuntu中解压的boa-0.94.13 目录下面有个默认的boa.conf 文件,把它拷贝到开发板的etc/boa 目录下面,操作如下(同上,我还是利用TFTP操作的,是为了复习前边学到,你也可以用U盘来直接拷贝或者NFS文件共享来实现这一步,强烈推荐学以致用,学就是为了用,不然学了干嘛,你说呢?):

//进入到Ubuntu中我的TFTP文件夹里
root@ubuntu:/home/linuxsystemcode/web/boa-0.94.13# cd /var/tftpboot/
//拷贝boa-0.94.13文件夹中的boa.conf文件到我的TFTP文件夹里,方便我后边在开发板下载
root@ubuntu:/var/tftpboot# cp /home/linuxsystemcode/web/boa-0.94.13/boa.conf ./
root@ubuntu:/var/tftpboot# ls			//查看是否拷贝成功,成功!
boa       exec    getpid      msgrecivc  readpipe   test
boa.conf  execls  helloexec   msgsnd     sig_hello  writepipe
creatc    fork    helloworld  pipe       signal
root@ubuntu:/var/tftpboot#

下边就是在开发板上下载boa.conf文件的操作了,如果你自己拷贝过去了,就不需要看我这一步的操作了:

[root@iTOP-4412]#cd etc/boa/		//先进到要放置boa.conf的文件夹里
[root@iTOP-4412]#tftp -g -l boa.conf -r boa.conf 192.168.0.101
[root@iTOP-4412]#ls					//查看是否下载成功,成功!
boa.conf
[root@iTOP-4412]#

boa.conf文件拷贝到开发板的/etc/boa下后就是接着把Ubuntu的etc下的mime.types拷贝到开发板的etc下(我这里还是用的tftp方式):

//进入到Ubuntu中我的TFTP文件夹里
root@ubuntu:/home/linuxsystemcode/web/boa-0.94.13# cd /var/tftpboot/
//Ubuntu的etc下的mime.types到我的TFTP文件夹里,方便我后边在开发板下载
root@ubuntu:/var/tftpboot# cp /etc/mime.types ./
root@ubuntu:/var/tftpboot# ls			//查看是否拷贝成功,成功!第一行第四个就是
boa       exec    getpid      mime.types  pipe       signal
boa.conf  execls  helloexec   msgrecivc   readpipe   test
creatc    fork    helloworld  msgsnd      sig_hello  writepipe
root@ubuntu:/var/tftpboot#

接着就是在开发板上下载mime.types文件的操作了,如果你自己拷贝过去了,就不需要看我这一步的操作了:

[root@iTOP-4412]#cd etc		//先进到要放置mime.types的文件夹里
[root@iTOP-4412]#tftp -g -l mime.types -r mime.types 192.168.0.101
[root@iTOP-4412]#ls					//查看是否下载成功,成功!
boa           resolv.con    init.d        passwd        rc.d
eth0-setting  hosts         mime.types    profile       
[root@iTOP-4412]#

接着就是在开发板的etc下新建group文件,并打开该文件添加一行root:*:0:的代码,保存退出。操作如下:

[root@iTOP-4412]#cd etc		//先进到要放置mime.types的文件夹里
[root@iTOP-4412]#vi group	//新建group文件并打开
//打开group后,添加root:*:0:后,保存退出
[root@iTOP-4412]#ls					//查看是否新建成功,成功!
boa           group         init.d        passwd        rc.d
eth0-setting  hosts         mime.types    profile       resolv.conf     
[root@iTOP-4412]#

然后进到开发板的etc/boa 目录,使用vi boa.conf 命令打开boa.conf 文件修改几处代码:
①第一个修改的是该文件的第49行左右的Group nogroup修改为Group root
②第二个修改的是该文件的第96行左右的#ServerName www.your.org.here修改为ServerName www.your.org.here
③第三个修改的是该文件的第115行左右的DocumentRoot /var/www”修改为DocumentRoot /www。这里的“/www”就是前面步骤使用mkdir 创建的www 目录。
④最后修改的是该文件的第194行左右的ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/修改为ScriptAlias /cgi-bin/ /www/cgi-bin/
到这里就修改完了,保存退出。
5、下面添加自动运行boa 的脚本,打开开发板的etc/init.d/rcS文件,在最后一样添加boa &代码,保存退出。这里的操作大家应该都会了吧,就偷个懒,嘿嘿。
6、接着进入到之前新建的www文件(在开发板的根目录下)。使用vi index.html 命令建立index.html 文件并将下边的代码放到这个新建的文件夹里保存退出(着写代码是html的,不详细说了,感兴趣自己百度他娘一下):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>iTOP-4412</title>
<style type="text/css">
<!--
.STYLE1 {font-size: 36px}
body {
	background-color: #996600;
}
-->
</style>
</head>

<body>
<table width="613" height="424" border="0" align="center">
  <tr>
    <td colspan="2" align="center" valign="middle"><h2 class="STYLE1">iTOP-4412 WEB SERVER </h2></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>
</body>
</html>

到这里就大功告成了,接着就是在开发板输入reboot命令重启开发板。
7、开发板启动进入开发板的bin下运行boa(这里可能运行的时候提示没权限,你可以先修改权限再运行),然后就是ps命令一下查看是否boa运行成功了,操作如下:

[root@iTOP-4412]#cd bin			//进入开发板的bin下
[root@iTOP-4412]#chmod 777 boa	//修改权限
[root@iTOP-4412]#./boa			//运行boa
[root@iTOP-4412]#ps				//查看boa是否在运行
  961 nobody     0:00 boa		//就是这个,有就表示在运行
  989 root       0:00 [flush-179:0]
 9636 root       0:00 [kworker/2:2]
22680 root       0:38 [kworker/0:1]
23761 root       0:00 [kworker/2:0]
25469 root       0:00 [kworker/0:2]
28175 root       0:00 [kworker/0:0]
28244 root       0:00 [kworker/2:1]
30713 root       0:00 [sh]
30714 root       0:00 [sh]
30715 root       0:00 [sh]
30722 root       0:00 ps    
[root@iTOP-4412]#

如果运行成功的话,你就可以打开在同一网络上设备的浏览器了,输入你开发板的IP地址,我这里是192.168.0.120,如果出现下图的效果那就恭喜实验成果了:
在这里插入图片描述
下边就是有在上述的实验上修改一些文件实验IO的控制,也就是LED的控制,具体操作就不写了,可以参照上边部分操作,我把修改步骤整理一下:
①把开发板的www文件下的index.html文件删除或者改名web保存一下(命令为mv index.html web.html),再新建一个index.html文件,打开文件把下边的代码写到里边保存退出:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>led远程控制</title>
<style type="text/css">
body {
	background-color: #999900;
	text-align: center;
}
.ziti {
	font-size: 24px;
}
.juzhong {
	text-align: center;
}
.hsz {
	text-align: center;
}
.hsz td {
	color: #00F;
	font-size: 18px;
}
.hsz {
	background-color: #FCC;
}
.juzhong table {
	text-align: center;
}
.juzhong table tr {
}
#h1 {
	background-color: #0FC;
}
#h2 {
	background-color: #FF9;
}
.h3 {
	background-color: #0CF;
}
.ys1 {
	font-size: 24px;
}
.STYLE1 {font-size: 36px}
</style>
</head>

<body class="juzhong">
<table width="900" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td><p class="STYLE1">&nbsp;</p>
    <p class="STYLE1">iTOP-4412 WEB SERVER </p></td>
  </tr>
 
  <tr>
    <td height="30">&nbsp;</td>
  </tr>
  <tr>
    <td><form action="/cgi-bin/myled.cgi" method="get" enctype="application/x-www-form-urlencoded" name="form1" target="_blank" id="form1">
      <table width="300" border="1" align="center" cellpadding="1" cellspacing="1">
        <tr>
          <td>Led1</td>
          <td><input name="led1" type="checkbox" id="led1" value="1" />
            <label for="led1"></label></td>
        </tr>
        <tr>
          <td>Led2</td>
          <td><input name="led2" type="checkbox" id="led2" value="2" />
            <label for="led2"></label></td>
        </tr>
       
        <tr>
          <td colspan="2"><input type="submit" name="submit" id="submit" value="submit" /></td>
          </tr>
      </table>
    </form></td>
  </tr>
  <tr>
    <td ><p>&nbsp;</p>    </td>
  </tr>
</table>
<p>&nbsp;</p>
</body>
</html>

②进入在Ubuntu中,随便地方创建myled.c写入如下代码,保存退出:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	char *data;
	int leds[2] = {0, 0};
	long m, n;
	int exit=0,i,fd;

	printf("Content-Type:text/html;charset=gb2312\n\n");

	printf("<html>\n"); 
	printf("<body>\n");
	printf("<title>iTOP-4412</title> ");
	printf("<h3>iTOP-4412</h3> ");

	data = getenv("QUERY_STRING");
	printf("<p>receive data:%s</p>",data);
	while(*data != '\0')
	{
		if(*data=='=')
		switch(*(data+1))
		{
			case '1':leds[0]=1;break;
			case '2':leds[1]=1;break;
			default:exit=1;break;
		}
		if(exit == 1)
			break;
		data++;
	}
	fd=open("/dev/leds",0);

	for(i=0;i<2;i++)
	{
		if(leds[i]==1)
			printf("<p>%d\t</p>",i+1);
		ioctl(fd,leds[i],i);
	}
	printf("</body>\n");
	printf("</html>\n");

	return 0;
}

然后就是编译myled.c,arm-none-linux-gnueabi-gcc -o myled.cgi myled.c -static,把生成的myled.cgi文件拷贝到开发板的www/cgi-bin下。然后修改下myled.cgi文件的权限,chmod 777 myled.cgi。修改后就可以重启开发板,ps看一下boa是否运行,然后就用浏览器打开你开发板的IP地址,可以看到下图的效果,选择一个LED项测试吧,实验就成功了。也可以用你的手机试一下,发现这个世界是真的神奇(后边还有一句话,看完吧):
在这里插入图片描述
送给阅读过这篇文章的人:为人处世,要非黑即白,灰度相处,一定要掌握好分寸,要进退有度,恪守原则,既不交浅言深,也不讳莫如深,知世故而不世故,处江湖而远江湖
上面这句话慢慢来品,下篇文章见。

发布了6 篇原创文章 · 获赞 3 · 访问量 100

猜你喜欢

转载自blog.csdn.net/weixin_38403894/article/details/105567532