当前位置:文档之家› 嵌入式Linux WEB服务器Boa 移植方法

嵌入式Linux WEB服务器Boa 移植方法

嵌入式Linux WEB服务器Boa 移植方法
嵌入式Linux WEB服务器Boa 移植方法

【转】嵌入式linux WEB服务器BOA的移植方法

2011-09-07 20:45

转载自分享

最终编辑549800946

作者:李驹光、郑耿

随着Internet技术的兴起,在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S结构,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器,能够生成动态页面,在用户端只需要通过Web浏览器就可以对嵌入式设备进行管理和监控,非常方便实用。本节主要介绍这种应用的开发和移植工作。用户首先需要在嵌入式设备上成功移植支持脚本或CGI功能的Web服务器,然后才能进行应用程序的开发。

1、嵌入式Web服务器移植由于嵌入式设备资源一般都比较有限,并且也不需要能同时处理很多用户的请求,因此不会使用Linux下最常用的如Apache 等服务器,而需要使用一些专门为嵌入式设备设计的Web服务器,这些Web服务器在存贮空间和运行时所占有的内存空间上都会非常适合于嵌入式应用场合。

典型的嵌入式Web服务器有Boa (https://www.doczj.com/doc/3215825352.html,)和thttpd (https://www.doczj.com/doc/3215825352.html,/software/thttpd/)等,它们和Apache等高性能的Web服务器主要的区别在于它们一般是单进程服务器,只有在完成一个用户请求后才能响应另一个用户的请求,而无法并发响应,但这在嵌入式设备的应用场合里已经足够了。

我们绍比较常用的Boa服务器的移植。

Boa是一个非常小巧的Web服务器,可执行代码只有约60KB。它是一个单任务Web 服务器,只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但Boa 支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全,在其站点公布的性能测试中,Boa的性能要好于Apache服务器。

第一步完成Boa程序的移植。从https://www.doczj.com/doc/3215825352.html,下载Boa源码,当前最新版本为0.94.13,将其解压并进入源码目录的src子目录

# tar xzf boa-0.94.13.tar.gz

# cd boa-0.94.13/src

生成Makefile文件

# ./configure

修改Makefile文件,找到CC=gcc,将其改成CC = arm-linux-gcc,再找到CPP = gcc –E,将其改成CPP = arm-linux-gcc –E,并保存退出。

然后运行make进行编译,得到的可执行程序为boa,将调试信息剥去,得到的最后程序只有约60KB大小。

# make

# arm-linux-strip boa

第二步完成Boa的配置,使其能够支持CGI程序的执行。Boa需要在/etc目录下建立一个boa目录,里面放入Boa的主要配置文件boa.conf。在Boa源码目录下已有一个示例boa.conf,可以在其基础上进行修改,下面解释一下该文件的含义:

#监听的端口号,缺省都是80,一般无需修改

Port 80

# bind调用的IP地址,一般注释掉,表明绑定到INADDR_ANY,通配于服务器的所有IP 地址

#Listen 192.68.0.5

#作为哪个用户运行,即它拥有该用户的权限,一般都是nobody,需要/etc/passwd中有

#nobody用户

User nobody

#作为哪个用户组运行,即它拥有该用户组的权限,一般都是nogroup,需要在/etc/group文#件中有nogroup组

Group nogroup

#当服务器发生问题时发送报警的email地址,目前未用,注释掉

#ServerAdmin root@localhost

#错误日志文件。如果没有以/开始,则表示从服务器的根路径开始。如果不需要错误日志,则用#/dev/null。在下面设置时,注意一定要建立/var/log/boa目录

ErrorLog /var/log/boa/error_log

#访问日志文件。如果没有以/开始,则表示从服务器的根路径开始。如果不需要错误日志,则用#/dev/null或直接注释掉。在下面设置时,注意一定要建立/var/log/boa目录

#AccessLog /var/log/boa/access_log

#是否使用本地时间。如果没有注释掉,则使用本地时间。注释掉则使用UTC时间

#UseLocaltime

#是否记录CGI运行信息,如果没有注释掉,则记录,注释掉则不记录

#VerboseCGILogs

#服务器名字

ServerName https://www.doczj.com/doc/3215825352.html,

#是否启动虚拟主机功能,即设备可以有多个网络接口,每个接口都可以拥有一个虚拟的Web服

#务器。一般注释掉,即不需要启动

#VirtualHost

#非常重要,HTML文档的主目录。如果没有以/开始,则表示从服务器的根路径开始。DocumentRoot /var/www

#如果收到一个用户请求的话,在用户主目录后再增加的目录名

UserDir public_html

#HTML目录索引的文件名,也是没有用户只指明访问目录时返回的文件名DirectoryIndex index.html

#当HTML目录没有索引文件时,用户只指明访问目录时,boa会调用该程序生成索引文件然后

#返回给用户,因为该过程比较慢最好不执行,可以注释掉或者给每个HTML目录加上#DirectoryIndex指明的文件

#DirectoryMaker /usr/lib/boa/boa_indexer

#如果DirectoryIndex不存在,并且DirectoryMaker被注释,那么就用Boa自带的索引

#生成程序来生成目录的索引文件并输出到下面目录,该目录必须是Boa能读写

# DirectoryCache /var/spool/boa/dircache

#一个连接所允许的HTTP持续作用请求最大数目,注释或设为0都将关闭HTTP持续作用KeepAliveMax 1000

#HTTP持续作用中服务器在两次请求之间等待的时间数,以秒为单位,超时将关闭连接KeepAliveTimeout 10

#指明mime.types文件位置。如果没有以/开始,则表示从服务器的根路径开始。可以注释

#避免使用mime.types文件,此时需要用AddType在本文件里指明

MimeTypes /etc/mime.types

#文件扩展名没有或未知的话,使用的缺省MIME类型

DefaultType text/plain

#提供CGI程序的PA TH环境变量值

CGIPath /bin:/usr/bin:/usr/local/bin

#将文件扩展名和MIME类型关联起来,和mime.types文件作用一样。如果用mime.types #文件,则注释掉,如果不使用mime.types文件,则必须使用

#AddType application/x-httpd-cgi cgi

#指明文档重定向路径

#Redirect /bar http://elsewhere/feh/bar

#为路径加上别名

Alias /doc /usr/doc

#非常重要,指明CGI脚本的虚拟路径对应的实际路径。一般所有的CGI脚本都要放在实际路径

#里,用户访问执行时输入站点+虚拟路径+CGI脚本名

ScriptAlias /cgi-bin/ /var/www/cgi-bin/

用户可以根据自己需要,对boa.conf进行修改,但必须要保证其他的辅助文件和设置必须和boa.conf里的配置相符,不然Boa就不能正常工作。在上面的例子中,我们还需要创建日志文件所在目录/var/log/boa,创建HTML文档的主目录/var/www,将mime.types文件拷贝到/etc目录,创建CGI脚本所在目录/var/www/cgi-bin/。mime.types文件用来指明不同文件扩展名对应的MIME类型,一般可以直接从Linux主机上拷贝一个,大部分也都是在主机的/etc目录下。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////

今天自己在开发板上移植了boa服务器。参考资料是李驹光、郑耿大侠在恒颐论坛上的帖子。李大侠写的好,我没有费什么力气就搞定了,:-)。

步骤如下:

1.从https://www.doczj.com/doc/3215825352.html,/下载Boa源码,将其解压并进入源码目录的src子目录

# tar -zxvf boa-0.94.13.tar.gz

# cd boa-0.94.13/src

2.生成Makefile文件

# ./configure

修改Makefile文件,

a.找到CC=gcc,将其改成CC = arm-linux-gcc,

b.找到CPP = gcc –E,将其改成CPP = arm-linux-gcc –E,

保存退出。

3.运行make进行编译,得到的可执行程序为boa,并将调试信息剥去

# make

# arm-linux-strip boa

4.编写boa.conf

5.cp boa 到开发板的/bin目录下,在开发板/etc目录下建boa目录,cp boa.conf到板子的/etc/boa目录。

6.创建日志文件所在目录/var/log/boa,创建HTML文档的主目录/var/www,创建CGI脚本所在目录/var/www/cgi-bin/,在/var/www中放置一个index.html文件

7.cp mime.types文件到开发板/etc目录

8.vi passwd,添加nouser用户,vi group 添加nogroup组

8.运行boa:

#/bin/boa

现在通过其他机器就可以访问了。http://192.168.0.12

就可以访问到你放置的那个index页面了。

9.编辑helloworld.c程序测试cgi的运行

#arm-linux-gcc -o helloworld.cgi helloworld.c

#cp helloworld.cgi 到开发板的/var/www/cgi-bin目录下

在pc机的浏览器地址栏输入http://192.168.0.12/cgi-bin/helloworld.cgi,可以看到相关页面,CGI脚本测试通过。

10.从CGIC的主站点https://www.doczj.com/doc/3215825352.html,/cgic/下载源码,将其解压并进入源码目录

# tar -zxvf cgic205.tar.gz

# cd cgic205

11.修改Makefile文件

a.找到CC=gcc,将其改成CC=arm-linux-gcc,

b.找到AR=ar,将其改成AR=arm-linux-ar,

c.找到RANLIB=ranlib,将其改成RANLIB=arm-linux-ranlib。

e.找到gcc cgictest.o -o cgictest.cgi ${LIBS},

将其改成$(CC) $(CFLAGS) cgictest.o -o cgictest.cgi ${LIBS},

f.找到gcc capture.o -o capture ${LIBS},

将其改成$(CC) $(CFLAGS) capture.o -o capture ${LIBS},

保存退出。

12.然后运行make进行编译,得到的CGIC库libcgic.a,我们通过调试辅助程序capture和测试程序cgictest.cgi,来验证生成CGIC库的正确性。

13.将capture和cgictest.cgi拷贝到主机的/var/www/cgi-bin目录下。

在工作站的浏览器地址栏输入http://192.168.0.12/cgi-bin/cgictest.cgi,可以看到页面,CGIC 库和测试脚本

嵌入式WEB服务器BOA的移植方法

2011-08-01 09:37

今天自己在开发板上移植了boa服务器。参考资料是李驹光、郑耿大侠在恒颐论坛上的帖子。李大侠写的好,我没有费什么力气就搞定了,:-)。

步骤如下:

1.从https://www.doczj.com/doc/3215825352.html,/下载Boa源码,将其解压并进入源码目录的src子目录

# tar -zxvf boa-0.94.13.tar.gz

# cd boa-0.94.13/src

2.生成Makefile文件

# ./configure

修改Makefile文件,

a.找到CC=gcc,将其改成CC = arm-linux-gcc,

b.找到CPP = gcc –E,将其改成CPP = arm-linux-gcc –E,

保存退出。

3.运行make进行编译,得到的可执行程序为boa,并将调试信息剥去

# make

# arm-linux-strip boa

4.编写boa.conf

5.cp boa 到开发板的/bin目录下,在开发板/etc目录下建boa目录,cp boa.conf到板子的/etc/boa目录。

6.创建日志文件所在目录/var/log/boa,创建HTML文档的主目录/var/www,创建CGI脚本所在目录/var/www/cgi-bin/,在/var/www中放置一个index.html文件

7.cp mime.types文件到开发板/etc目录

8.vi passwd,添加nouser用户,vi group 添加nogroup组

8.运行boa:

#/bin/boa

现在通过其他机器就可以访问了。http://192.168.0.12

就可以访问到你放置的那个index页面了。

9.编辑helloworld.c程序测试cgi的运行

#arm-linux-gcc -o helloworld.cgi helloworld.c

#cp helloworld.cgi 到开发板的/var/www/cgi-bin目录下

在pc机的浏览器地址栏输入http://192.168.0.12/cgi-bin/helloworld.cgi,可以看到相关页面,CGI脚本测试通过。

10.从CGIC的主站点https://www.doczj.com/doc/3215825352.html,/cgic/下载源码,将其解压并进入源码目录

# tar -zxvf cgic205.tar.gz

# cd cgic205

11.修改Makefile文件

a.找到CC=gcc,将其改成CC=arm-linux-gcc,

b.找到AR=ar,将其改成AR=arm-linux-ar,

c.找到RANLIB=ranlib,将其改成RANLIB=arm-linux-ranlib。

e.找到gcc cgictest.o -o cgictest.cgi ${LIBS},

将其改成$(CC) $(CFLAGS) cgictest.o -o cgictest.cgi ${LIBS},

f.找到gcc capture.o -o capture ${LIBS},

将其改成$(CC) $(CFLAGS) capture.o -o capture ${LIBS},

保存退出。

12.然后运行make进行编译,得到的CGIC库libcgic.a,我们通过调试辅助程序capture和测试程序cgictest.cgi,来验证生成CGIC库的正确性。

13.将capture和cgictest.cgi拷贝到主机的/var/www/cgi-bin目录下。

在工作站的浏览器地址栏输入http://192.168.0.12/cgi-bin/cgictest.cgi,可以看到页面,CGIC 库和测试脚本都移植成功。

下边是李大侠的大文了。

随着Internet技术的兴起,在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S结构,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器,能够生成动态页面,在用户端只需要通过Web浏览器就可以对嵌入式设备进行管理和监控,非常方便实用。本节主要介绍这种应用的开发和移植工作。

用户首先需要在嵌入式设备上成功移植支持脚本或CGI功能的Web服务器,然后才能进行应用程序的开发。

1、嵌入式Web服务器移植

由于嵌入式设备资源一般都比较有限,并且也不需要能同时处理很多用户的请求,因此不会使用Linux下最常用的如Apache等服务器,而需要使用一些专门为嵌入式设备设计的Web服务器,这些Web服务器在存贮空间和运行时所占有的内存空间上都会非常适合于嵌入式应用场合。

典型的嵌入式Web服务器有Boa (https://www.doczj.com/doc/3215825352.html,)和thttpd (https://www.doczj.com/doc/3215825352.html,/software/thttpd/)等,它们和Apache等高性能的Web服务器主要的区别在于它们一般是单进程服务器,只有在完成一个用户请求后才能响应另一个用户的请求,而无法并发响应,但这在嵌入式设备的应用场合里已经足够了。

我们介绍比较常用的Boa服务器的移植。Boa是一个非常小巧的Web服务器,可执行代码只有约60KB。它是一个单任务Web服务器,只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全,在其站点公布的性能测试中,Boa的性能要好于Apache服务器。

第一步完成Boa程序的移植。从https://www.doczj.com/doc/3215825352.html,下载Boa源码,当前最新版本为0.94.13,将其解压并进入源码目录的src子目录

# tar xzf boa-0.94.13.tar.gz

# cd boa-0.94.13/src

生成Makefile文件

# ./configure

修改Makefile文件,找到CC=gcc,将其改成CC = arm-linux-gcc,再找到CPP = gcc –E,将其改成CPP = arm-linux-gcc –E,并保存退出。

然后运行make进行编译,得到的可执行程序为boa,将调试信息剥去,得到的最后程序只有约60KB大小。

# make

# arm-linux-strip boa

第二步完成Boa的配置,使其能够支持CGI程序的执行。Boa需要在/etc目录下建立一个boa目录,里面放入Boa的主要配置文件boa.conf。在Boa源码目录下已有一个示例boa.conf,可以在其基础上进行修改,下面解释一下该文件的含义:

#监听的端口号,缺省都是80,一般无需修改

Port 80

# bind调用的IP地址,一般注释掉,表明绑定到INADDR_ANY,通配于服务器的所有IP 地址

#Listen 192.68.0.5

#作为哪个用户运行,即它拥有该用户的权限,一般都是nobody,需

要/etc/passwd中有nobody用户

User nobody

#作为哪个用户组运行,即它拥有该用户组的权限,一般都是nogroup,需要在/etc/group文件中有nogroup组

Group nogroup

#当服务器发生问题时发送报警的email地址,目前未用,注释掉

#ServerAdmin root@localhost

#错误日志文件。如果没有以/开始,则表示从服务器的根路径开始。如果不需要错误日志,则用#/dev/null。在下面设置时,注意一定要建立/var/log/boa目录

ErrorLog /var/log/boa/error_log

#访问日志文件。如果没有以/开始,则表示从服务器的根路径开始。如果不需要错误日志,则用#/dev/null或直接注释掉。在下面设置时,注意一定要建立/var/log/boa目录

#AccessLog /var/log/boa/access_log

#是否使用本地时间。如果没有注释掉,则使用本地时间。注释掉则使用UTC时间

#UseLocaltime

#是否记录CGI运行信息,如果没有注释掉,则记录,注释掉则不记录

#VerboseCGILogs

#服务器名字

ServerName https://www.doczj.com/doc/3215825352.html,

#是否启动虚拟主机功能,即设备可以有多个网络接口,每个接口都可以拥有一个虚拟的Web服务器。一般注释掉,即不需要启动

#VirtualHost

#非常重要,HTML文档的主目录。如果没有以/开始,则表示从服务器的根路径开始。DocumentRoot /var/www

#如果收到一个用户请求的话,在用户主目录后再增加的目录名

UserDir public_html

#HTML目录索引的文件名,也是没有用户只指明访问目录时返回的文件名DirectoryIndex index.html

#当HTML目录没有索引文件时,用户只指明访问目录时,boa会调用该程序生成索引文件然后返回给用户,因为该过程比较慢最好不执行,可以注释掉或者给每个HTML目录加上DirectoryIndex指明的文件

#DirectoryMaker /usr/lib/boa/boa_indexer

#如果DirectoryIndex不存在,并且DirectoryMaker被注释,那么就用Boa自带的索引生成程序来生成目录的索引文件并输出到下面目录,该目录必须是Boa能读写

# DirectoryCache /var/spool/boa/dircache

#一个连接所允许的HTTP持续作用请求最大数目,注释或设为0都将关闭HTTP持续作用KeepAliveMax 1000

#HTTP持续作用中服务器在两次请求之间等待的时间数,以秒为单位,超时将关闭连接KeepAliveTimeout 10

#指明mime.types文件位置。如果没有以/开始,则表示从服务器的根路径开始。可以注释掉避免使用mime.types文件,此时需要用AddType在本文件里指明

MimeTypes /etc/mime.types

#文件扩展名没有或未知的话,使用的缺省MIME类型

DefaultType text/plain

#提供CGI程序的PA TH环境变量值

CGIPath /bin:/usr/bin:/usr/local/bin

#将文件扩展名和MIME类型关联起来,和mime.types文件作用一样。如果用mime.types #文件,则注释掉,如果不使用mime.types文件,则必须使用

#AddType application/x-httpd-cgi cgi

#指明文档重定向路径

#Redirect /bar http://elsewhere/feh/bar

#为路径加上别名

Alias /doc /usr/doc

#非常重要,指明CGI脚本的虚拟路径对应的实际路径。一般所有的CGI脚本都要放在实际路径里,用户访问执行时输入站点+虚拟路径+CGI脚本名

ScriptAlias /cgi-bin/ /var/www/cgi-bin/

用户可以根据自己需要,对boa.conf进行修改,但必须要保证其他的辅助文件和设置必须和boa.conf里的配置相符,不然Boa就不能正常工作。在上面的例子中,我们还需要创建日志文件所在目录/var/log/boa,创建HTML文档的主目录/var/www,将mime.types文件拷贝到/etc目录,创建CGI脚本所在目录/var/www/cgi-bin/。mime.types文件用来指明不同文件扩展名对应的MIME类型,一般可以直接从Linux主机上拷贝一个,大部分也都是在主机的/etc目录下。

第三步就是测试Boa能否正常工作,静态HTML页面能否正常访问,CGI脚本能否正常运行,一般采用NFS 方式来进行测试工作,可以将嵌入式目标系统上的/etc目录拷贝到主机的NFS共享目录下,然后将NFS共享目录下的etc目录重新NFS mount为目标系统上的/etc 目录。这样就可以在主机上对etc目录下的各种配置文件,如进行修改而立刻在目标系统上生效。

假设主机/nfs目录为共享目录,在其下面建立一个www子目录作为Web站点的主目录,其内容如下:

# ls /nfs/www

cgi-bin images index.html

index.html为测试主页面,images为存放各种图片的子目录,cgi-bin为CGI脚本的存放

目录。根据示例boa.conf的配置,目前HTML文档的主目录为/var/www,CGI脚本目录为/var/www/cgi-bin,则运行以下命令将主机的/nfs/www目录mount成目标板上的/var/www 目录。然后就可以运行boa了:

# mount -t nfs 192.168.0.20:/nfs/www /var/www -o nolock

# boa

在工作站上运行浏览器进行测试,在地址栏输入目标系统IP,即http://192.168.0.162,可以看到相关页面,表示静态HTML页面测试通过。

接下来进行CGI脚本的测试,我们需要一个测试用的CGI脚本。可以写个最简单的Hello World程序,示例代码如下

#include

void main() {

printf("Content-type: text/html\n\n") ;

printf("\n") ;

printf("CGI Output\n") ;

printf("\n") ;

printf("

Hello, world.

\n") ;

printf("\n") ;

printf("\n") ;

exit(0) ;

}

然后进行交叉编译,将得到的helloworld.cgi拷贝到主机的/nfs/www/cgi-bin目录下。

#arm-linux-gcc -o helloworld.cgi helloworld.c

#cp helloworld.cgi /nfs/www/cgi-bin

在浏览器地址栏输入http://192.168.67.16/cgi-bin/helloworld.cgi,可以看到相关页面,表示CGI 脚本测试通过。

现在我们已经可以让Boa在嵌入式目标系统上正常工作了,嵌入式Web服务器移植成功。在以上的移植过程中,最好设定boa.conf中的错误日志文件ErrorLog,允许Boa记录错误信息;测试静态HTML页面和CGI脚本时,不管结果如何,最好都查看错误日志文件;CGI脚本测试很容易发生权限不够的错误,要保证Boa访问的主目录、CGI脚本目录以及临时文件目录(如果没有设置TMP环境变量时,缺省是/tmp目录),都必须能被Boa运行时所代表的用户完全访问,该用户由boa.conf中的User指出。

目前Web技术中生成动态Web页面的方法有CGI和服务器脚本,如JSP, ASP等,但后者需要Web服务器具有这些脚本的运行支持模块。在嵌入式Web服务器中,考虑到资源限制问题,一般都只提供CGI支持,因此在嵌入式设备中Web方式应用实际上就是基于CGI 的程序开发。

CGI(Common Gate Intergace)是一段运行在Web服务器上的程序,提供同客户端Html 页面的接口。我们看一个实际例子:常见的个人主页上大都有一个留言本,留言本的工作方式是这样的:先由用户输入一些信息,如名字之类的东西,接着用户按一下“留言”(到目前为止工作都在客户端),浏览器就把这些信息传送到服务器的CGI程序中,于是CGI 程序在服务器上按照预定的方法进行处理,在本例中就是把用户提交的信息存入指定的文件

中,最后CGI程序给客户端发回一个“留言结束”字样的页面,用户可以在浏览器里看到。

在进行CGI编程之前,我们先了解HTML的一些知识。CGI可以使用多种编程语言来实现,包括C、C++、Perl等,但在嵌入式设备的开发中,一般都不会采用Perl等解释性语言,因为这种语言还需要有解释执行的支撑模块,会占用存贮空间和内存,最常用的方法当然是用C来编写,但C并不是很适合开发象CGI这种需要大量进行字符串操作的程序,编程比较烦琐,因此,对于一个专业的开发人员来说,首先想到的应该是有没有可复用的库来支持快速高效的开发CGI程序。幸运的是目前就有不少开放源码的支持CGI开发的C 库。我们在此只介绍CGIC,有兴趣的朋友可以自己在Internet上搜索其他的C库。

CGIC库的移植

CGIC是一个支持CGI开发的开放源码的标准C库,可以免费使用,只需要在开发的站点和程序文档中有个公开声明即可,表明程序使用了CGIC库,用户也可以购买商业授权而无需公开声明。

CGIC能够提供以下功能:

1 分析数据,并自动校正一些有缺陷的浏览器发来的数据;

2 透明接收用GET或POST方法发来的From数据;

3 能接受上传文件;

4 能够设置和接收cookies;

5 用一致的方式处理From元素里的回车;

6 提供字符串,整数,浮点数,单选或多选功能来接收数据;

7 提供数字字段的边界检查;

8 能够将CGI环境变量转化成C中的非空字符串;

9 提供CGI程序的调试手段,能够回放CGI程序执行时的CGI状态;

总之,CGIC是一个功能比较强大的支持CGI开发的标准C库,并支持Linux, Unix 和Windows等多操作系统。

以下描述CGIC的移植过程。

从CGIC的主站点https://www.doczj.com/doc/3215825352.html,/cgic/下载源码,当前最新版本是2.05版。将其解压并进入源码目录

# tar xzf cgic205.tar.gz

# cd cgic205

修改Makefile文件,找到CC=gcc,将其改成CC=arm-linux-gcc,找到AR=ar,将其改成AR=arm-linux-ar,找到RANLIB=ranlib,将其改成RANLIB=arm-linux-ranlib。找到gcc cgictest.o -o cgictest.cgi ${LIBS},将其改成$(CC) $(CFLAGS) cgictest.o -o cgictest.cgi ${LIBS},找到gcc capture.o -o capture ${LIBS},将其改成$(CC) $(CFLAGS) capture.o -o capture ${LIBS},并保存退出。

然后运行make进行编译,得到的CGIC库libcgic.a,我们通过调试辅助程序capture和测试程序cgictest.cgi,来验证生成CGIC库的正确性。

将capture和cgictest.cgi拷贝到主机的/nfs/www/cgi-bin目录下。

在工作站的浏览器地址栏输入http://192.168.67.16/cgi-bin /cgictest.cgi,可以看到页面,表示CGIC库和测试脚本都移植成功。cgictest.cgi比较完整的展现了CGIC库的功能,在开发基于CGIC库的CGI程序前最好先掌握cgictest.cgi程序,也是用户开发特定应用程序时的参考范例。

HTML模板的制作

Web方式的应用开发一般都会将界面和程序逻辑脱离开来,允许在一定程度下更改界面,如改变界面文本的属性,建立多语言版本等,而无需改动程序逻辑。界面一般由美工来进行制作,而程序员负责具体功能的实现。在HTML中,表单(FORM)是最主要的传递信息的手段,它适用于任何浏览器。表单中有很多元素,包括输入文本框,单选框,多选框,按钮,等等,可以提供信息的交互。具体对象说明和语法请参见其他HTML书籍,在这里不作介绍。根据应用需求,美工或其他设计人员将最后的Web页面设计出来,作为程序员进行开发的模板。

CGI程序的工作一般就是接收表单数据,进行数据处理,最后根据处理结果生成新的页面返回给浏览器。表单数据一般是以POST方法提交给服务器,由CGI程序获得,程序必须要将界面数据和内部数据对应起来才能够进行下一步的处理。CGI程序从页面获取数据就根据元素名字/值中的元素名字来进行区分。但CGI返回页面就比较麻烦。由于界面在程序开发完成后还有可能会改变,而且有些需要程序处理的地方可能没有表单元素,因此对程序来说,不能以表单元素名作为区分的基础,一般方法是采用HTML中的注释来标记。

程序员需要在模板中为每一个表单元素以及其他任何需要程序处理的地方,按照一定规则,如注释的下一行就是表单元素行,建立其注释标记。CGI程序就可以根据注释标记来判断表单元素信息并进行处理。程序逐行读取模板文件,检查有无注释标记,如有的话,则下一行需要进行处理,给表单元素赋上数据,最后就可以返回带数据的页面给浏览器。

HTML模板还需要关注的是输入的检查。根据输入检查越早越好的原则,需要在用户界面上就对用户提交的数据进行检查。目前一般是采用javascript脚本的方式。当用户提交数据时,表单对象的onSubmit方法就会被调用,在该方法里就可以对用户的输入进行检查。常用的检查有是否必需、最大/小长度、是否字符、是否数字、email地址、IP地址是否正确、是否匹配一个正则表达式等。

CGI程序的开发

CGI程序的工作一般就是接收表单数据,根据应用需求进行数据处理,最后根据处理结果生成新的页面返回给浏览器。表单数据一般是以POST方法提交给服务器,由CGI程

序获得,程序根据元素名字/值中的元素名字来区分数据,完成数据处理后,再读取相应的模板文件,根据注释标记将对应的数据填充到HTML文本中去,生成最后的页面返回给浏览器。

程序一般逻辑为:

1.安全性检查,是否允许运行脚本;

2.处理用户提交的数据,根据元素名字/值中的元素名字来区分数据,然后根据应用需求进行数据处理;

3.将处理结果填充表单,根据注释标记将对应的数据填充到HTML文本中去,生成最后的页面返回给浏览器。

关于具体的代码实现细节,用户可以参考《嵌入式Linux系统开发详解-基于EP93XX 系列ARM》一书的相关章节。(全文完)

嵌入式web服务器搭建讲解

Web服务器创建 随着计算机技术的发展,嵌入式系统已成为计算机领域的一个重要组成部分。广义讲,凡是带有微处理器的专用软硬件系统都可以称为嵌入式系统。所谓嵌入式设备,是指具有计算机功能,但又不称为计算机的设备或器材,几乎包括了我们周期的所有电路设备:PDA、手机机顶盒、汽车、微波炉、电梯、安全系统、自动售货机、医疗仪器、自动取款机等。嵌入式系统可以通过各种无线形式(如WAP、Blue嵌入式Internet技术主要包括传感器技术、通信技术、计算机技术和集成电路技术等。以前的设备控制系统一般是通过专用通信线中进行的,其通信介质、通信协议、相关软件和硬件都是专用的,而Internet技术的发展使嵌入式设备的远程控制和管理方式有了改变。不需要专用的通信线路,并且传输的信息不局局于数据信号,还有声音和图像。最重要的是其通信协议是标准且公开的。随着Web技术的发展,几乎改变了现在的信息表达形式,很多应用都是基于Web 技术的。由于HTML语言的标准统一性,只要在嵌入式设备中有一个微型服务器, 就可以使用任意一种Web浏览器接收和发送信息。所以如何设计这种特别的Web服务器,如何在嵌入式设备中安装Web服务器,就成了嵌入式Web服务器的发展和研究方向。 对于嵌入式Web服务器的研究和应用,其意义是重大的。它为我们管理、控制和监测各种各样设备提供了一个很好的途径。这种设备可以是具有有限内存资源的8位或16位系统,已足够提供一个用户界面,而且这种方式是基于Internet 的。这种设备可以在世界任何一个地方,只要它连入Internet就能够控制它。 1.1 课题的研究意义 Internet的迅猛发展,传统的Client/server体系结构(客户机/服务器),渐渐的在某些方面显示出它的局限性,Browser/server结构(浏览器/服务器)的出现恰恰弥补了这种缺陷。B/S方式已成为一种时尚,大部分网络应用系统都是以这种B/S方式与网络用户交换信息。B/S的基础是客户端要有一个浏览器程序,服务器端要有一个与之对应的Web服务器。显然,Web服务器在B/S方式下起着决定性的作用,因此,一般互联网站都采用功能强大的通用Web服务器。 随着网络各个核心部分业务量的提高,其访问量和数据流量快速增长,处理能力和计算强度也相应增大,使得单一设备根本无法承担,而且许多企业级应用系统的应用请求具有突发性和紧急性的特点,当应用访问急剧上升时,容易造成网络瓶颈。解决这一问题的办法是采用多台嵌入式Web服务器为一个应用服务,集群负载均衡机制就是为解决多个网络设备之间实现合理的业务量分配而提出

嵌入式BOA服务器文档

基于BOA的嵌入式WEB SERVER的设计 随着网络技术的不断发展,网络现在已无处不在。Linux最大的好处在于其良好的网络功能,因此在该系统中,我们通过设计WEB 服务器,使用户能通过浏览器访问设备上的Web服务器来远程控制现场设备。嵌入式Linux下,系统资源是非常有限的,因此我们选择Web服务器时,要考虑到其资源有限的特点;Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右。作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行,Boa的设计目标是速度和安全。 现在,多数嵌入式Linux的代码中已经包含boa的源代码,在嵌入式Linux下实现Boa 只需要对Boa做一些简单的配置和修改。这主要通过对boa.conf、boa.c、mime.types等文件进行修改来实现。服务器中主要包括boa和CGI两部分,其中Boa管理着返回客户端的WEB 页面,而CGI控制着客户端和服务器端的信息交换,所以我们可以通过编写相应的CGI程序来实现所需要的功能。Boa服务器的实现主要分为两步,boa服务器的移植和CGI程序的设计。 1 、boa 服务器移植 Boa服务器的移植主要分为以下步骤进行: (1)首先下载boa源代码,网上有很多关于boa的源码下载网站,官方网址为:https://www.doczj.com/doc/3215825352.html,/; (2)根据目标平台修改boa的配置文件boa.conf,以及相关的源代码文件boa.c,log.c。(3)执行configure生成Makefile,并修改Makefile中CC和CPP等项,改成与目标平台对应的编译工具; (4)交叉编译源代码,生成可执行文件boa; (5)拷贝配置文件boa.conf和可执行程序boa到文件系统中。此时就可以在目标板中运行boa程序了。 下面具体介绍一下如何在ARM平台上移植boa服务器: 本系统中采用的boa源码是boa-0.94.13.tar.gz, 将下载的源码拷贝到工作目录解压, # tar xzf boa-0.94.13.tar.gz 这里注意下系统中需要安装bison,flex等工具,如果在U-BOOT移植中已经在开发主机中安装过这些工具,则可以跳过这一步骤。如果没有,在UBUNTU系统中使用如下命令就可以自动安装: #sudo apt-get install bison flex 如果不安装这些工具,在执行make生成可执行文件时会出现如下错误 make: yacc:comman not found make: *** [y.tab.c] error 127 make: lex:comman not found make: *** [lex.yy.c] error 127 解压完源代码后,我们进入boa目录,boa的所有源代码及编译文件都放在都放在/src下面,进入该目录 #cd /source/boa-0.94.13/src 相关文件的修改:

电子工程师培训课程.doc

课程主题实训内容实训目标Linux开发环境、开发规范培训课时:2天 Unix开发环境Unix系统原理、Unix C开发环境、Unix常用文 件目录管理命令与 网络命令 能使用并管理Unix操作系统,建立并熟 悉Unix /Linux C开发环境。 嵌入式开发语言课时: 11天 标准C开发数据类型,控制语句,自定义数据类型,模块化程 序设计,指针 熟练掌握c基础语法,函数的编写和调用 标准C库C的常用标准库函数errno.h math.h stdlib.h stdio.h等 熟练掌握C标准库函数的调用与灵活应用 数据结构与算法链表,栈,队列,哈希表,二叉树等容器实现常 用搜索算法与 排序算法实现 掌握各种基本数据结构的实现,了解常用 算法,并能在软件开发中灵活应用。 阶段项目基本信息管理系统能独立使用C语言开发应用。 培养良好的编码风格与编码技巧。 Linux应用开发课时: 20天 Linux内核开发Unix/Linux文件服务,IO,内存管理,进程,IPC, 线程,线程同步 掌握Unix/Linux下的基本的开发技术, 了解Linux内核原理。 Linux QT开发QT类结构,常见QT组件,信号与槽,QT设计器, QT2D与3D 掌握QT类库的使用,能开发Linux下的 用户界面。 Linux网络开发Linux下Socket编程,UDP与TCP,TCP下各种服 务器模式,PCAP数 据抓包处理,ARP、IP、ICMP、TCP、UDP协议。 掌握Linux下网络编程技术,能开发网络 通信应用与网络安全应用软件。 Oracle SQL与Pro*C编程DQL语句,DML语句,DDL语句,Oracle函数,视 图,索引,序列等。宿主变量,指示变量,游标 操作,事务处理,SQL操作与动态SQL, 异常处理,SQL与Oracle通信区。 掌握数据库SQL语句。 能进行数据库查询与操作。 能进行SQL数据库编程。 阶段项目网络爬虫:简易搜索引擎的实现掌握基本的应用软件开发能力。掌握程序的分析设计思路。 独立完成简单应用软件的编码。 嵌入式ARM驱动开发课时: 18天 ARM嵌入式开发环境ARM体系结构(包括指令分类,寻址方式、指 令集、存储系统、异常中断处理),ARM嵌入 式开发板硬件设计原理和基本硬件设计流 程。嵌入式Linux基本概念,ARM板的资源 分配,启动模式,Bootloader工作原理,uboot 的烧写,内核的烧写,根文件系统的烧写, uboot的使用指令,嵌入式Linux开发环境的 搭建。 了解ARM体系结构与设计原理,熟练掌 握各种外设的工作原理与驱动机制。 理解bootloader的工作原理, 能熟练使用uboot指令, 掌握s3c6410开发板的uboot、内核、 根文件系统的烧写 能搭建嵌入式Linux开发环境

ARM嵌入式Web服务器Boa的软、硬件设计 毕业设计

摘要 论文主要介绍了基于ARM9的嵌入式Web服务器Boa的软、硬件设计及其实现,其中硬件部分的核心是三星的S3C2410X为处理器。最后成果形式为可以远程访问的WebServer嵌入式服务器。Boa是一款单任务的HTTP服务器。与其他传统的Web服务器不同的是当有连接请求到来时,它并不为每个连接单独创建进程, 也不通过复制自身进程来处理多链接。而是通过建立HTTP请求列表来处理多路HTTP连接请求。同时它只为CGI程序创建新的进程,这样就在最大程度上节省了系统资源,这对嵌入式系统来说至关重要。同时它还具有自动生成目录、自动解压文件等功能。因此, Boa在嵌入式系统中具有很高的应用价值。 关键词:ARM;Linux;嵌入式Web服务器;CGI

This paper has mainly developed the software hardware design and realization of the embedded Web server Boa based on ARM. And the core of the hardware part is S3C2410X microprocessor produced by Samsung . The final achievement is the embedded webserver which can remote visit. Boa is a single-tasking HTTP server. That means that unlike traditional webservers, it does not fork for each incoming connection, nor does it fork many copies of itself to handle multiple connections. It internally multiplexes all of the ongoing HTTP connections. And forks only for CGI programs, this is very important to embedded system. At the same time, it also has the function of automatic directory generation、automatic file gunzipping and so on. So Boa is of highly value in the embedded system application. Keywords: ARM;Linux;Embedded Web server;CGI

基于嵌入式web服务器的网站及应用开发

基于嵌入式web服务器的网站及应用开发 CGI 的工作原理: CGI 是一种通用的接口标准。CGI 程序就是符合这种接口标准的,运行在Web 服务器上的程序。它的工作就是控制信息要求,产生并传回所需的文件。CGI 由浏览器的输入发这个程序。 先看看浏览器浏览网页是怎样实现的。作为一个用户首先在浏览器的地址栏中添加上要访问的主页地址并回车触发这个申请。浏览器将申请发送到服务器上。We服务器接收这些申请并根据.htm 或.html 的后缀并认识到这是HTML 文件。Web 服务器从当前硬盘或内存中读取正确的HTML 文件,然后将它送回浏览器。HTML 文件将被用户的浏览器解释并将结果显示在用户浏览器上。 CGI 程序可以用来在web 内加入动态的内容。通过接口,浏览器能够发送一个可执行应用程序的HTTP 请求,而不仅仅只是静态的HTML 文件。服务器运行指定的应用程序,这个应用程序读取与请求相关的信息,获得请求传过来的数值。例如使用者填写HTML 表单提交了数据,浏览器将这些数据发送到Web 服务器上。Web 服务器接收这些数据并根据客户机指定的CGI 程序把这些数据递交给指定的CGI 程序,并使CGI 在服务器上运行。CGI程序运行结束,生成HTML 页面,Web 服务器把CGI 程序运行的结果送回用户浏览器。HTML 文件将会被用户的浏览器解释并将结果显示在用户浏览器上。CGI 的基本工作情况如下图所示: CGI的输入与输出: Web 服务器与CGI程序之间通过四种途径进行通信:环境变量、命令行、标准输入和标准输出。其中负责输入的有环境变量、命令行和标准输入。命令行只用于ISINDEX查询, 较少使用。环境变量存放服务器向CGI程序传递的一些运行参数, 比如REQUEST_METHOD表示用户提出请求或提交数据的方法是GET还是POST。方法(METHOD)是HTTP 中对命令的称呼。GET 方法通过环境变量QUERY- STRING传递用户提交的数据。经过编码的数据以问号打头追加在标识CGI 脚本地址的URL 后一起传给Web 服务器。服务器将其存于QUERY-STRING 中,CGI程序可以通过getenv() 函数来读取。编码数据除了表单数据,还可以是直接调用CGI 脚本时追加在URL 地址后面的参数。POST 方法则通过标准输入( stdin)传递提交数据。编码了的表单数据独立地传送给Web 服务器,CGI程序从标准输入中获得,可以用getchar( ) ,sscanf( ) ,fread( )等函数。要注意的是数据的长度是通过读取环境变量CONTENT_LENGTH 获得的,而不是通过文件尾标识符来判断。 嵌入式WEB 服务器的硬件结构 嵌入式WEB服务器的硬件结构如图2所示。其主要由CPU芯片、MPEG-4音视频编码芯片、Flash芯片、SDRAM内存、以太网络接口、大容量硬盘组成。其中CPU采用M OTOROLA公司的PowerPC系列嵌入式通信处理器MPC8250。MPEG-4音视频编码芯片

嵌入式Web服务器的实现

第三章 嵌入式Web服务器的实现 3.1 嵌入式Web服务器的概况 随着计算机的日益普及,互联网络(Internet)已经成为人们日常生活的一部分。互联网络是覆盖率极广、联网设备众多、协议完善、功能强大的一种通信方式,已经成为社会重要的基础信息设施,是重要的信息流通渠道。具备互联网络的接入功能,已经成为众多使用微处理器的嵌入式应用的发展方向。网络控制设备逐渐成为一种趋势。 使用互联网络的接入功能将给嵌入式的微处理器应用带来很多好处:利用无所不在的互联网络,可以从全球的任何一个角落实现对设备的监控;利用开放的TCP/IP 网络通信协议,任何的计算机都可以使用通用的网络浏览软件访问设备,不需要专门的计算机和专门的软件;设备的信息通过网页的形式体现。 因此从概念性上来讲,嵌入式Web服务器(Embedded Web Server)是指将Web服务器引入到现场测试和控制设备中,在相应的硬件平台和软件系统的支持下,使传统的测试和控制设备转变为具备了以TCP/IP为底层通信协议,Web技术为核心的基于互联网的网络测试和控制设备。嵌入式Web服务器系统与传统的Web应用相比,简化了系统结构,将信息采集和信息发布都集成到现场的测控设备中。 一般来说,Web服务器通常由以下几个部分组成: ● 服务器初始化部分。这部分主要完成Web服务器的初始化工作,如建立守护进程、创建TCP套接字、绑定端口、将TCP套接字转换成侦听套接字,进入循环结构,等待接收用户浏览器连接。 ● 接收客户端请求。由于客户端请求以文本行的方式实现,所以服务器也以文本行为单位接收。 ● 解析客户端请求。这部分工作比较复杂,需要解析出请求的方法、URL(统一资源定位符)目标、可选的查询信息及表单信息。如果请求方法为HEAD,则简单地返回响应首部即可;如果方法是GET,则首先返回响应首部,然后将客户端请求的URL 目标文件从服务器磁盘上读出,再发送给客户端:如果是POST,则比较麻烦,首先要调用相应的CGI程序,然后将用户表单信息传给CGI程序,CGI程序根据表单内容完成相应的工作,并将结果数据返回。

基于Boa服务器的厨房信息Web监控系统

图2 控制端结构框图 基于Boa 服务器的厨房信息Web 监控系统 叶 丹(四川警安职业学院计算机系,四川绵竹618209) Kitchen Information Monitor System Based on Boa Web Server 本文设计的一种家用厨房信息Web 监控系统可以通过ARM 嵌入式系统动态Web 技术对家庭厨房的环境信息进行网 络远程监控。该监控系统主要包括信息采集端、控制端、网络传输和监视端四个模块,实现厨房环境信息从前端采集后送入控制端进行处理,再交由网络传输端传输,最后输出到监视端进行远程监控的一整套数字化监控流程。厨房信息Web 监控系统工作流程示意图如图1所示。 图1系统流程框图 1信息采集端设计 厨房信息Web 监控系统的前端为信息采集端,用以完成对 厨房环境相关信息的采集,包括温度、可燃气体浓度、现场视频信息的采集。厨房环境是复杂多变的,一些敏感的装置和材料容易因高温或泄漏等不稳定因素引发安全事故,几个关键的监控点集中在灶台、管道、液化气罐、进出口处等。信息采集端对环境信息的采集主要通过传感器和摄像头完成,采集到的信息送到控制端进行处理。 系统选用无固定装置式铂热电阻WZP-130完成对厨房内灶台上方蒸汽温度、液化气罐或天然气管道表面温度、厨房电线布控集中区域温度等厨房内几个关键部位温度的测量。WZP- 130由感温元件、不锈钢外保护管、接线盒以及各种用途的固定 装置组成,可以同时输出两组相同电阻信号供使用。它是利用铂丝在温度变化时自身电阻也随着变化的特性来测量温度的,不锈钢保护管不但具有抗腐蚀性能,而且具有足够的机械强度,保证铂热电阻能安全地使用在各种场合。WZP-130测温范围为- 200~500℃,热响应时间≤4.5s 。WZP-130对温度进行测量后 实时送入控制端进行处理,不同的部位设定不同的温度监控阈值,若超过设定的阈值则进行远程报警处理,在远程监控端可以接收到报警提示。 厨房里的可燃气体通常是从管道里泄漏出来的天然气或者是液化气,其主要成分为甲烷。系统选用气体传感器GS-B2完成对甲烷的检测,该类型气体传感器用于便携式仪表测试甲烷,具有体积小,功耗低,稳定性好,灵敏度高的特点,并且具有较好的可复用性。GS-B2传感器的工作温度是-10°C 到45°C ,湿度≤90%RH ,检测范围是10到5000PPM 。若检测出气体泄漏,则将报警信号送入控制端处理后发送到远程监控端。 信息采集端的视频信息采集使用一个USB 摄像头实现,该摄像头可以提供640×480分辨率的图像,采集后提供给控制端经压缩输出到网络进行传输。Linux 操作系统提供了一组用以图像输入的API 函数V4L ,可以实现设备属性和图像信息的设置、图像区域和帧信息的操作、nmap 方式实现图像截取等。因此,只需要在操作系统中通过V4L 配置USB 摄像头的设备文件就可以实现对厨房环境现场信息的实时采集。实时采集的视频信息经控制端Web 服务器交由网络传输端从Internet 发送出去,在监视端浏览器使用CGI 程序实时显示。 2控制端设计 控制模块主要用于处理前端信息采集模块送回的信息,以 及进行各种通信接口的控制。由于ARM9系列微控制器在网络控制方面有着优越的性能,并且片内资源和接口丰富,功耗控制稳定性能也能满足一般工业产品的需求,更重要的是Linux 操作系统和Boa 服务器对ARM9有着非常好的支持,因此论文采用ARM9微控制器构建控制模块。控制模块采用三星公司基于 ARM920T 嵌入式处理器核的S3C2410A 微控制器。 控制端以控制模块为核心,扩展出以太网接口、UART 串口和USB 接口,这些接口完成与外部设备的通信和连接。为了增加控制端的人机交互可操作度,还需要扩展键盘和LCD 显示模块。为了便于调试,还需要扩展JTAG 模块。控制端的结构框图如图 2所示。 对ARM 系列处理器支持良好,且具有较为 摘 要 设计了基于ARM 的嵌入式技术和Boa 服务器实现的家用厨房信息Web 监控系统,该系统包括前端厨房环境信息采集、控制端、网络传输和远程监控四个部分,利用因特网动态Web 技术实现远程对家庭厨房安全状态的监控。 关键词:Boa ,厨房,监控 Abstract Kitchen Information Monitor System for family used Based on ARM embedded techniques and Boa Web Server was designed.This system include four parts just as fore -end kitchen environment information collecting unit,control unit,net transmission unit and remote monitor unit,and used internet dynamic Web techniques to guard and control the safety condi-tion of kitchen. Keywords :Boa,kitchen,monitor 基于Boa 服务器的厨房信息Web 监控系统 80

WIFI移植全过程

基于S3C S3C242424440的SDIO 卡WIFI 移植移植 1112/1112/yangjun yangjun yangjun 环境:Ubuntu10.10 LINUX2.26.38 交叉编译工具链:arm-linux-gcc 一、SDIO 设备驱动移植 1、 修改SD 卡驱动使内核支持SD 卡 修改文件:arch/arm/mach-s3c2440/mach-smdk2440.c 添加所需头文件: #include #include #include //增加平台设备对sd 卡的支持 static struct platform_device *smdk2440_devices[] __initdata = { &s3c_device_ohci, &s3c_device_lcd, &s3c_device_wdt, &s3c_device_i2c0, &s3c_device_iis, &s3c_device_sdi, }; //添加平台数据dev->platform_data static struct s3c24xx_mci_pdata smdk2440_mmc_cfg __initdata={ .gpio_detect = S3C2410_GPG(8),//此处保留为使用中断号8,看芯片手册 .set_power = NULL, .ocr_avail = MMC_VDD_32_33, }; 2、 在smdk2440_machine_init 中添加 s3c24xx_mci_set_platdata(&smdk2440_mmc_cfg); 二、配置内核以支持Marvel 无线WIFI 选择38内核中的wlan marwell sdio 模块

boa_流程分析

boa 流程分析 默认分类2010-01-19 19:10:38 阅读291 评论0 字号:大中小订阅 引言 随着企业安全意识的增强以及现代化管理水平的提高,对设备的远程监控在工业控制系统中得到了越来越广泛的应用。近年来,Web技术广泛普及,把Web 技术应用在这种监控系统中,可以让操作者通过浏览器维护和管理监测点,查看监测数据。同时,监测中心的服务程序也可以很方便地通过Web把监测数据取回来,进行进一步的处理,十分方便。 μClinux是应用于微控制领域的一种嵌入式Linux操作系统,它源码开放,移植性好,支持多种硬件平台和几乎所有常见网络通信协议,支持文件系统丰富,是一个功能完整的嵌入式操作系统。并且有大量优秀的开放源代码的应用软件和开发工具可用,因此,采用μClinux作为操作平台,使用Web技术进行远程在线监测系统的开发。 1 嵌入式Web服务器 为了能够通过Web来维护和管理远程在线监控系统,必须选择一个恰当的Web服务器,不但要求所选择的Web服务器支持动态Web技术,也要求它能够在嵌入式系统中稳定地工作。 1.1 Web服务器原理和功能 嵌入式Web服务器以TCP/IP协议栈为基础构建,需要实现HTTP,TCP和UDP等协议。任何一个客户机,都可以通过HTTP协议与嵌入式Web Server建立连接。嵌入式Web服务器在Web浏览器和设备之间提供了统一的GUI接口,使得客户端可以像在本地一样透明地监控管理设备状况。 嵌入式Web服务器的主要功能有:响应多个客户的实时HTTP请求,并为每个客户建立连接,这是嵌入式Web服务器的首要功能;对设备的实时监控管理,参数的在线查看与配置等;对设备访问的安全控制机制,包括SSL、用户口令等;实现设备的故障智能报警。 1.2 Boa的特点 在μClinux中常用的Web服务器有:Boa,thttpd,httpd,其中httpd只支持静态页面,显然不适合高级应用,thttpd和Boa所提供的功能基本一样,但是thttpd在运行过程中所需要的资源要远大于Boa,因此使用Boa作为该嵌入式系统的Web服务器。系统的软件开发模型选用B/S模型。 Boa是一个高性能的单任务型Web服务器,可以运行在几乎所有的类Unix 的平台上,Boa支持认证,支持CGI,功能比较全,占用资源也少,非常适合于用在资源有限的嵌入式系统中,目前Boa已经以源码的形式包含在μClinux的发行包中。 2 Boa源码分析 在此通过以下对Boa的源代码进行简单的分析,来提出解决避免恶意攻击的安全解决方案。 2.1 Boa工作流程 图1是Boa工作流程图。Boa从新到达的套接字获得HTTP请求(由一个request结构来存储),并将其保存在队列当中。首先,get_request()将从套接字获得的数据全部保存在request→header_line中,然后调用process_request()来处理在队列中的每一个请求。根据request结构中status所表示的不同状态,将进行不同的处理。如果这个请求符合HTTP协议,则会调用process_option_Iine()将

boa在ARM上的移植方法

Boa服务器ARM板上的移植方法 一、boa服务器移植前的准备 网上下载boa服务器tar源码包 二、boa服务器配置流程 2.1.解压下载来的tar包 在linux终端命令行输入:tar –xf boa_xxx.tar 2.2. 配置boa选项 1. 修改boa.conf生效的目录 cd /src目录下修改defines.h文件 修改第30行,将默认的路径为/usr/boa 改为/home/boa 2.修改src/boa.c 注释掉226行的语句: if (setuid(0) !=-1) { DIE(”icky Linux kernel bug!”); } 即修改为: #if 0 if(setuid(0) != -1) { DIE(”icky Linux kernel bug!”); } #endif 否则运行boa时会提示 boa.c:226 - icky Linux kernel bug!: No suchfile or directory错误 3. 修改boa.conf文件 打开boa.conf文件:vim boa.conf 将94行前面的#去掉 2.3. 编译配置好的boa 1. 切换到boa源码包src下运行configure 在linux终端命令行输入:./configure 2. 修改Makefile文件 将31行的 CC = gcc 修改为:CC=arm-none-linux-gnueabi-gcc 将32行的 CPP=gcc –E 修改为:CPP=arm-none-linux-gnueabi-g++ -E

3. 编译boa源码包 在linux终端命令行输入:make –j2 等待一段时间再输入:echo $? (如果显示为0说明编译成功,反之失败) 在当前目录下生成一个boa的可执行程序,./boa运行即可, 在命令行输入:ps –e (能看到boa的进程即说明boa正常工作移植成功) 将boa可执行文件拷贝到/etc/bin/下 4. 移植完成一大半 注:有些编译器会提示以下错误,按相应方法解决即可. 出现错误: util.c: 100: 1: pasting “t”and “->”does not give a valid preprocessing token make: [util.o] Error1 解决方法: 修改compat.h中122行的 #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff 为: #define TIMEZONE_OFFSET(foo) foo->tm_gmtoff 修改compat.h中126行的 #define TIMEZONE(foo) foo##->tm_zone 为: #define TIMEZONE(foo) foo->tm_zone 三、boa服务器boa.conf文件的设置 1.ARM板上建立/usr/boa目录, 并复制boa.conf到/usr/boa目录下 #mkdir /usr/boa #cp boa.conf /usr/boa 2.访问端口号设置 大概25左右:Port 80,可以设定我们访问网页时的端口号默认为80—访问时无需指定假如改变了此端口号为8080,必须以下列格式访问: http://192.168.0.250:8080一般在同一个电脑上运行多个boa服务器时可采用此 方法我们这里保持默认即可 3. 修改访问权限: 修改User nobody 为user 0 修改Group nogroup 为group 0 4. 设定日志目录:boa日志有两部分,Errorlog 和AccessLog 默认为/var/log/boa/error_log和/var/log/boa/access_log两个文件。 所以我们统一修改为: ErrorLog /usr/boa/error_log AccessLog /usr/boa/access_log (注意:这里/usr/boa目录必须为可写,否则会出项错误:log.c:73 –Unable to dup2 the error log: Bad file r.) 5. 设置html文件目录:

基于嵌入式的智能家居

基于嵌入式的智能家居 摘要 21世纪是智能的时代,是互联网的时代,随着Internet后PC 时代的到来,这个时代的主要特征是以计算机作为作为组成成分融入消费品之中。依赖于嵌入式技术的后PC时代使得传统IT设备逐渐过渡到嵌入式设备并融入到生活的各个方面。本系统采用嵌入式技术,将在系统内移植嵌入式web服务器,用户可以通过互联网对家居进行操作与监控。 关键词嵌入式智能家居Linux 远程监测 Abstract In the 21st century is the era of intelligence, is the age of the Internet, with the advent of Internet post-pc era, the era as computers as the main characteristics of the components into consumer goods. Rely on the embedded technology after traditional PC era makes IT equipment gradually transition to the embedded devices and integrated into all aspects of life. This system adopts the embedded technology, transplanted in the system of embedded web server, the user can through the Internet for household operation and monitoring. Keyword: ARM smart home Linux Remote monitoring 1 绪论 随着生活水平与生活质量的提高,人们对于生活水平要求日益提高,对于生活的便捷性与对信息需求的及时性也越发看重,以嵌入式为核心的智能家居以其便捷性与实时性逐渐走入了我们的视野。目前随着

基于STM32的嵌入式WEB服务器设计+(1)

毕业设计说明书

摘要 在科学技术日新月异的今天,嵌入式系统已成为计算机领域的一个重要组成部分。嵌入式系统具有软件、硬件的可裁剪性,系统精简,具有高时效性,且功耗较低。由于HTML语言的标准统一性,只要在嵌入式设备中有一个微型服务器, 就可以使用任意一种Web浏览器接收和发送信息。本论文首先讨论了基于ARM Cortex-M3的嵌入式Internet技术,介绍了嵌入式网络通信技术的基础知识,然后根据嵌入式设备的特点,对标准TCP/IP协议进行了合理的简化,实现了符合ARM Cortex-M3单片机的嵌入式精简TCP/IP协议栈。在协议栈的基础上,实现了简单的嵌入式Web服务器。 本论文结合嵌入式技术、互联网通讯技术,介绍了嵌入式Web服务器的具体实现过程。论文采用STM32F103C8T6+ENC28J60的硬件构架,基于超文本传输协议(HTTP)传输控制数据和用户信息,设计了微型嵌入式WEB服务器,通过以太网和-据传输共享以单片机应用系统为中心的小型嵌入式设备的信息,实现了嵌入式系统的Internet接入,Internet上的远程用户就可以通过浏览器访问嵌入式Web服务器,进而实现对嵌入式系统的远程控制和监测。 关键字:STM32 WEB服务器远程控制 I

Abstract This system adopts the ST company Cortex-M3 kernel STM32 microprocessor STM32F103. STM32F103 is STMicroelectronics launched a new STM32 connection type (Connectivity) is a high performance products series of micro controller, the chip integrates a variety of standard high performance industrial interface, and different types of STM32 products in the pin and software with perfect compatibility, can be easily adapted to more applications. The new STM32 standard peripherals including 10 timer, two 12 1-Msample/s AD (ADC) (rapid alternating mode 2M sample/s), two of 12 DA (DAC), two I2C ports, five USART ports and three SPI ports and high quality digital audio interface IIS, and STM32F103 with a full USB (OTG) interface, two CAN2.0B interface, and Ethernet 10/100 MAC module. This chip can meet the industrial, medical, building automation, home audio and home appliances market a variety of products demand.. System is the main content of the network control is connected with the equipment and access to the equipment status and data informa-tion can be released; the webpage; timely response control command from the remote user. In addition, the embedded equipment with simple function, low power con-sumption and portability etc. Keywords : STM32 Web server Remote control II

嵌入式的WEB服务器PHP移植

基于嵌入式的WEB服务器 2009嵌入式作业(4)计应1班王延龙嵌入式的WEB服务器php移植 开发板:PXA270-RP(Linux2.6.9) 宿主机:Centos6.0(linux2.6.32) 交叉编译器:arm-linux-gcc 3.4.6 1、下载php-5.2.17.tar.bz2 2、解压到/vptemp #tar-jxv-f php-5.2.17.tar.bz2-C/vptemp 3、编译 #cd/vptemp/php-5.2.17 #CC=arm-linux-gcc./configure--host=arm-linux--prefix=/opt/php5--disable-all--enable-pdo --with-sqlite3--with-sqlite--with-pdo-sqlite--with-zlib--without-iconv 在做这个配置的时候出点问题,不知道为什么CC=arm-linux-gcc就是不对,配置出来的Makefile里面还是gcc,libtool也完全不对,气死了。重启机子又折腾了半天,竟然不知道怎么弄的又可以起作用了。 #make make的时候出现:undefined reference to dlopen、undefined reference to dlclose,解决方法:在makefile中EXTRA_LIBS之后加上-ldl 4、安装 #make install 将PHP源码包中php.ini-dist文件复制到/opt/php5/lib下并改名为php.ini,因为指定了prefix,PHP缺省会去/opt/php5/lib下找php.ini 5、下载到Tiny6410 #cd/opt #tar-jcv-f php5-e.tar.bz2php5

基于ARM的嵌入式Web服务器设计

题目:基于ARM的嵌入式Web服务器设计与实现 学号:1308010139 姓名:吴明川 班级:1308010139 专业:计算机科学与技术 课程老师:孔军 二零一六年五月

摘要 随着计算机、网络通信和Internet 技术的飞速发展和不断进步,嵌入式系统在家庭和工业应用越来越广泛。如何将嵌入式系统和工业控制系统接入Internet,综合利用嵌入式系统资源,实现嵌入式系统的远程管理和控制,已成为倍受关注的研究课题,而实现嵌入式系统的网络化则成为嵌入式系统的发展趋势。 网络通信时,应用程序使用C/S(客户/服务器)模式进行信息交互。传统的服务器程序一般运行在大型的拥有高级操作系统的服务器的计算机上,这样服务器软件需要强大的硬件和系统软件支持。嵌入式网络服务器是利用嵌入式系统实现服务器的软件和硬件功能,是嵌入式技术和网络技术相结合的产物。与传统服务器相比,嵌入式Web服务器具有结构简单、体积小、可靠性强以及方便灵活等特点。这些让它具有很大的发展潜力。另一方面,嵌入式Web服务器与传统的web服务器相比,也受到一些限制。传统的Web服务器主要用于处理较大的客户量的同时并发访问,硬件方面有强大的处理器和内存支持,软件方面有商业数据库支持,而嵌入式Web服务器的处理能力和存储容量都有限,这就要求嵌入式Web服务器在设计过程中需要尽量合理利用资源。 将嵌入式技术与Web 技术相结合,已成为目前嵌入式系统的一个重要发展方向和必然趋势。利用源代码开放的uClinux 为操作系统平台,实现了以ARM 微处理器为核心的嵌入式Web 服务器,在分析了嵌入式Web 服务器的体系结构后,给出了系统的硬件结构组成和软件设计。对Web 服务器的测试结果表明,该服务器运行稳定、控制方便,将在智能家居、远程数据采集、工业控制等领域有着广泛的应用前景。 关键词:网络通信;嵌入式系统;ARM处理器;uClinux;Boa服务器;

基于ARM9的嵌入式3G无线视频监控系统设计

基于ARM9的嵌入式3G无线视频监控系统设计 2011-02-21 23:51:14 来源:互联网 国内外市场上主要推出的是数字控制的模拟视频监控和数字视频监控两类产品。前者的技术发展已经非常成熟,产品性能稳定,在实际工程中得到了广泛应用。 后者是新近崛起的以计算机技术及图像视频压缩技术为核心的新型视频监控系统,该系统在解决模拟视频监控系统的部分弊端的基础上迅速崛起。在互联网的普遍推广和网络带宽逐渐提高的背景下,视频监控技术飞速发展,出现了集多媒体技术、网络通信技术、嵌入式技术于一体的嵌入式网络视频监控系统。 目前国内嵌入式视频监控系统的研究有了很大的发展,但是国内对嵌入式无线视频监控系统的研究还比较少。本文介绍了自主开发的基于ARM 的嵌入式无线视频采集系统设计方案。该方案采用S3C2410 嵌入式处理器和ARMLinux 操作系统,利用通过自行开发的视频服务器软件,通过3G无线上网卡完成客户端与视频服务器的通信。介绍了系统的硬件结构、服务器端软件的总体结构、驱动程序的构建、图像的采集和压缩以及传输模块的设计,并进行了测试。实验结果表明,系统采用H.264 编码技术在保证视频传输质量的同时具有良好的带宽适应能力。 1 系统总体结构 本系统由监控现场摄像头、嵌入式视频服务器、客户端三部分组成。监控现场的摄像头实现图像的采集,并把采集的图像信息通过内部总线传送给嵌入式视频服务器。嵌入式远程视频监控系统是一个基于S3C2410处理器、H.264 压缩、Web 服务器和Linux 操作系统的嵌入式系统,它的主要功能是对摄像头采集到的图像进行H.264 压缩编码,并对编码后的图像通过3G 无线网络进行传输。客户端主要完成图像的接收和解压缩,用户可以通过Web 浏览器访问嵌入式视频服务器来观看摄像头采集到的图像,从而实现远程视频监控。嵌入式远程视频监控系统总体结构如图 1 所示。 图1 嵌入式远程视频监控系统总体结构 2 系统硬件结构 系统硬件由图像传感器MI360 、3G 无线模块MC8630 、图像压缩芯片ZC0301 、微处理器芯片S3C2410 、以太网控制芯片、SDRAM 等芯片组成。S3C2410 具有低功耗、精简而出色的全静态设计等特点,具备MMU 存储器管理功能,拥有独立的16 KB 指令和16 KB 数据缓存,在高性能和低功耗特性方面提供了可靠的性能。无线模块选用中兴3G 模块MC8630,数据速率为前向:3.1 Mb/smax,反向:1.8 Mb/s max 。 为了降低成本,简化设计,本方案选bn用中星微的ZC0301 作为视频压缩编码芯片,Vimicro ZC0301 主要由系统控制、图像信号处理、次取样和水平扫描、JPEG 编码器和USB 设备控制五大功能模块组成。CMOS 图像传感器选择美光的MI360 ,它采用VGA 标准

相关主题
文本预览
相关文档 最新文档