随着物联网技术的发展,在一些嵌入式设备管理的与交互中需要通过web服务来访问和控制一些设备,这就需要我们的嵌入式设备能够支持这个功能(嵌入式web服务),即是在嵌入式的设备中运行一个支持脚本或CGI功能的web服务器。常见的嵌入式web服务器有下面的几个:
minihttpd ,lighttpd , shttpd ,thttpd ,boa ,appweb , goahead 等。
我这里就选择使用了mini_httpd,这个功能相对于其他的来说有弱一点,但是可以满足我的需要了。具体的功程如下:
1下载mini_httpd网站:http://www.acme.com/software/mini_httpd/
# wget http://www.acme.com/software/mini_httpd/mini_httpd-1.21.tar.gz
2编译
解压:
# tar –zxvf mini_httpd-1.21.tar.gz
修改Makefie,把编译器换成交叉编译器为arm
主要修改了下面的部分:
#BINDIR = /usr/local/sbin
BINDIR = /home/chengfei/develop/atmel/sm/web/sbin/
#MANDIR = /usr/local/man
MANDIR = /home/chengfei/develop/atmel/sm/web/man/
#CC = cc
CC = /usr/local/arm/arm-2007q1/bin/arm-none-linux-gnueabi-gcc
编译:
# make
# make install
经过上面这些操作,最后把mini_httpd文件安装到上面设置的目录sbin下。
把sbin目录下的所有文件拷贝到arm开发板的文件系统下的sbin目录下。
3配置文件
创建一个mini_httpd.conf的文件,并加上下面的这些内容:
nochroot
dir=/mini_httpd/wwwroot
cgipat=**.cgi
user=root
pidfile=/mini_httpd/mini_httpd.pid
logfile=/mini_httpd/mini_httpd.log
charset=UTF-8
上面的目录mini_httpd是在根文件系统中没有的,需要再到文件系统下创建mini_httpd这个目录。不过也可以在制作好文件系统后,待arm开发板启动后再创建也是可以的。
现在我就在待制作的文件系统中创建了上面所需要的目录。
4测试:
创建test.c文件
内容如下:
#include <stdio.h>
#include <unistd.h>
void main()
{
printf("Content-type: text/html;charset=gb2312\n\n");
printf("\n");
printf("<html><head><title>CGI TEST</title></head>");
printf("<body>");
printf("<h1>CGI TEST</h1>");
printf("<h2>chengfei</h2>");
printf("Hello Web!\n");
printf("</body></html>");
}
编译测试文件:
# arm-none-linux-gnueabi-gcc –o test.cgi test.c
5重新制作文件系统
制作文件系统
把测试使用的程序加入到文件系统中,并重新制作文件系统。也有其他不用重新制作文件系统的方法.
烧写文件系统到板子
6测试:
查看mini_httpd的版本
# mini_httpd -V
启动mini_httpd
# mini_httpd –C /etc/mini_httpd.conf
运行后会出现下面的信息:这个后面再处理!
socket: Address family not supported by protocol
mini_httpd: started as root without requesting chroot(), warning only
7打开浏览器测试一下
192.168.0.126
可以看到下面的界面:
再输入:
192.168.0.126/test.cgi
到此mini_httpd的移植工作就完成了