20分钟轻松搭建一个嵌入式web服务器

	    前言,使用开源源码搭建起来挺简单的,用来了解框架还是可以的。当然自己写一个并发服务器也是可以的,但是能站在巨人的肩膀上也是
	极好的。为什么写这个呢,因为有了这个锚点,就可以在这个基础上扩展自己的东西,比如:与另一个转发服务器搭配使用实现多终端数据转发,
	终端可以接入蓝牙集中器实现小型设备局域网,终端接入qt图形界面,接入opencv做图像流,图像识别,等等。当然这是后话,前期先把各个设
	备节点搭建起来,后期可以任意发挥设计。
	    本人有什么疏忽的地方,还望各位看官指出,批评改正。好了废话不多说,我们开始快(tuo)乐(fa)的旅途吧!

硬件工具 :嵌入式开发板,PC机,网线,可选:TF卡

软件工具:Linux系统,boa源码,交叉编译器,PuTTY

本次使用开源的boa搭建一个web服务器,boa官网为www.boa.org。
搭建有几个前提条件:
1、 有一块嵌入式开发板,需要带网卡等必备外设
2、 开发板已搭建了嵌入式Linux系统,配置好了网卡,并能ping通PC机
3、 PC机上的Linux已经配置了交叉编译器
4、可选项:开发板跟PC配置好了NFS,tftp

首先说下搭建流程:
1、下载需要的boa版本,并拷贝到Linux环境中。
2、解压并编译boa。
3、修改配置文件
4、创建嵌入式Linux本地环境需要的一些目录文件夹。
5、创建简单的主页,添加boa开机启动
6、尝试访问,并确认搭建成功

一、下载需要的boa版本到Linux环境中。
我们选用版本为boa-0.94.13.tar.gz
20分钟轻松搭建一个嵌入式web服务器_第1张图片
注:通过格式可以看出在Linux下使用tar命令便可解压。
将压缩包复制到Linux环境下,我使用的是虚拟机搭建的Linux环境,Linux选用的是Ubuntu12.4.2,不知道自己Ubuntu版本可以通过lsb_release -a命令查看,如下图:
lsb_release
二、解压并编译boa。
进入boa压缩包所在的目录,使用"tar -xvf boa-0.94.13.tar.gz"命令解压boa压缩包,如下图:
20分钟轻松搭建一个嵌入式web服务器_第2张图片
解压后会生成boa-0.94.13文件夹,使用"cd boa-0.94.13"进入boa目录,如下图:
20分钟轻松搭建一个嵌入式web服务器_第3张图片
使用cd进入src目录,使用"./configure",运行编译脚本,生成Makefile,如下图:
20分钟轻松搭建一个嵌入式web服务器_第4张图片在这里插入图片描述
注:有兴趣可以看下编译脚本的简介,就知道他具体做什么了,后期有时间会出一下shell脚本的内容,毕竟脚本可以减少很多重复繁琐的工作。
20分钟轻松搭建一个嵌入式web服务器_第5张图片
可以看到在最后创建了Makefile文件,因为我的服务器是要部署在嵌入式Linux环境下,所以需要更改一下Makefile的配置(注:你想直接在Ubuntu上部署,可以不用更改,后面步骤是一样的),使用vim或自己喜欢的编辑器打开Makefile,“vim Makefile”,如下图:
20分钟轻松搭建一个嵌入式web服务器_第6张图片
在Makefile里找到"CC=gcc"这一行,如下图:
20分钟轻松搭建一个嵌入式web服务器_第7张图片
将这两行的gcc修改为"arm-none-linux-gnueabi-gcc -static"(注:-static表示进行静态库链接编译),如下图:
20分钟轻松搭建一个嵌入式web服务器_第8张图片
注意:结尾处不要留有空格,Makefile文件对空格是"敏感"的。修改完以后使用make命令编译,如下图:
20分钟轻松搭建一个嵌入式web服务器_第9张图片
这里我出现了一个错误警告,如下图:
在这里插入图片描述
报错在util.c文件,于是:
20分钟轻松搭建一个嵌入式web服务器_第10张图片

20分钟轻松搭建一个嵌入式web服务器_第11张图片
使用"/TIMEZONE_OFFSET",然而文件里只有这个地方有这个宏。于是度娘给出结果。打开compat.h文件,搜索"/foo",直接找到到问题点,如下图:
在这里插入图片描述
原来宏定义的时候使用了连接符。但是我们使用的编译器好像并不认识它。注:连接符在c/c++中是用来连接两个子串的,其实在Linux内核源码中连接驱动模块就常有用到连接符。
原来问题在这里的话,只需要删除"##",保存退出":x",再执行"make":
这次成功执行完毕了,如下图:
在这里插入图片描述
编译完成后,可以看到可执行文件boa,如下图:
20分钟轻松搭建一个嵌入式web服务器_第12张图片
使用file boa可以查看boa文件的文件属性,如下图:
在这里插入图片描述
使用arm-none-linux-gnueabi-strip boa 命令为 bos进行文件瘦身,注:瘦身前我们可以先查看下文件大小,并在瘦身后再查看一次,就知道文件瘦身的效果了,如下图:
20分钟轻松搭建一个嵌入式web服务器_第13张图片
接下来就是把我们的小服务器送到嵌入式Linux环境下并配置环境了。
三、创建本地环境需要的一些目录文件夹。
我之前已经用4412的开发板搭建了一个Linux环境,并配置了NFS。如果没有的朋友,可能需要一点时间搭建。NFS可以选择配置或是不配置,主要用途是把boa和其他配置文件移到开发板上,你可以选择TF卡,U盘,tftp你所知道的任意一种方法。
将boa发送到开发板的根目录的/bin文件下,注意,我使用了NFS所以我的"/opt/system/“对应开发板的”/"根目录。
20分钟轻松搭建一个嵌入式web服务器_第14张图片
注:这里需要根据个人情况把boa文件发送过去。
使用PuTTY连接开发板,我用的串口连接,如下图:
20分钟轻松搭建一个嵌入式web服务器_第15张图片
注:根据各自开发板的不同自行选择。
在这里插入图片描述
接下来需要新建一些文件夹
在etc下新建boa文件夹,用于存放boa的配置文件,在根目录下新建www文件,在www下新建cgi-bin,用于存放后期页面及交互代码,如下图:

20分钟轻松搭建一个嵌入式web服务器_第16张图片
将Ubuntu上boa-0.94.13下的默认配置文件拷贝到开发板/etc/boa文件夹下:
20分钟轻松搭建一个嵌入式web服务器_第17张图片
拷贝Ubuntu的/etc/mime.types文件到开发板/etc目录下,我本地已经有了,就不做拷贝了,没有的需要使用cp命令拷贝。注:这是MIME(多用途因特网邮件扩展),这是web服务器支持的规范,为后期处理报文做准备的。
使用vi group 创建用户组文件,在里面添加一行"root:x:0:",如下图:
在这里插入图片描述
接着打开vi /etc/boa/boa.conf文件,将"Group nogroup"这一行,修改为"Group root":
20分钟轻松搭建一个嵌入式web服务器_第18张图片
将"#ServerName www.your.org.here"这一行的注释去掉:
在这里插入图片描述
将"DocumentRoot /var/www"这一行,修改为"DocumentRoot /www",即指定为根目录下的www文件夹:
在这里插入图片描述
将ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/" 这一行, 修改为 “ScriptAlias /cgi-bin/
/www/cgi-bin/”,即在/www下创建的cgi-bin文件夹:

在这里插入图片描述
最后使用":x",保存boa.conf文件并退出,注:其他配置可以根据自己的需求配置。
四、创建简单的主页,添加boa开机启动。
在/www下创建index.html文件,并添加如下代码:
在这里插入图片描述

代码:
<!DOCTYPE html PUBLIC "-//W4C//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>嵌入式Linux远程控制</title>
<style type="text/css">
body {
     
background-color: #999900;
text-align: center;
}
.ziti {
     
font-size: 28px;
}
.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"> WM WEB SERVER </p></td>
</tr>
<tr>
<td height="30">&nbsp;</td>
</tr>
<tr>
<td><form action="/cgi-bin/mytest.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>Resource1</td>
<td><input name="test1" type="checkbox" id=" test1" value="1" />
<label for=" test1"></label></td>
</tr>
<tr>
<td>Resource2</td>
<td><input name=" test2" type="checkbox" id=" test2" value="2" />
<label for=" test2"></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>

使用":x",保存退出。
接着,添加开机启动项,使用vi打开启动文件。“vi /etc/init.d/rcS"文件,在末尾添加"boa &”,让它开机在后台运行,如下图。
20分钟轻松搭建一个嵌入式web服务器_第19张图片
至此,一个简单的嵌入式web服务器搭建完成。
测试:
使用ifconfig命令查看开发板ip地址,如下图:
20分钟轻松搭建一个嵌入式web服务器_第20张图片
确保开发板跟PC主机是可以ping通的,可以使用"ping PC主机ip",来确认是否连通。
如果可以ping通,那么,还等什么,在PC主机上输入开发板ip地址,就可以看到自动跳转到我们刚才创建的网页里了。
20分钟轻松搭建一个嵌入式web服务器_第21张图片
可以看到有一些选择框,后面可以编译自己的可执行文件远程控制我们的开发板,"/cgi-bin/mytest.cgi"中给出可执行文件的路径,这里只需要更改为自己的可执行文件,就可以执行相应操作了。web界面也可以做的更华俏,相信各位聪明的小伙伴能发挥自己想象去更改。

你可能感兴趣的:(嵌入式,linux,ubuntu)