web服务器Boa移植手册

合集下载

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

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

摘要论文主要介绍了基于ARM9的嵌入式Web服务器Boa的软、硬件设计及其实现,其中硬件部分的核心是三星的S3C2410X为处理器。

最后成果形式为可以远程访问的WebServer嵌入式服务器。

Boa是一款单任务的HTTP服务器。

与其他传统的Web服务器不同的是当有连接请求到来时,它并不为每个连接单独创建进程, 也不通过复制自身进程来处理多链接。

而是通过建立HTTP请求列表来处理多路HTTP连接请求。

同时它只为CGI程序创建新的进程,这样就在最大程度上节省了系统资源,这对嵌入式系统来说至关重要。

同时它还具有自动生成目录、自动解压文件等功能。

因此, Boa在嵌入式系统中具有很高的应用价值。

关键词:ARM;Linux;嵌入式Web服务器;CGIThis 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摘要 (1)Abstract (2)目录 (3)第一章引言 (5)第二章课题背景 (6)2.1 嵌入式系统简介 (6)2.2 嵌入式系统和Linux (6)2.3 ARM9硬件平台 (7)2.3.1 ARM简介 (7)2.3.2 JXARM9-2410 ARM嵌入式教学实验系统 (8)第三章嵌入式Web服务器 (9)3.1 概述 (9)3.2 Web服务器原理 (9)3.3 嵌入式Web服务器实现原理 (9)3.3.1 TCP/IP协议 (9)3.4 嵌入式Web服务器Boa (10)3.4.1 Boa概述 (10)3.4.2 Boa的功能实现 (11)第四章CGI技术 (12)4.1 CGI概述 (12)4.2 CGI工作原理 (12)第五章建立嵌入式系统开发环境 (14)5.1 在Vmware下安装Redhat 9.0 (14)5.2 编译配置主机开发环境 (18)5.2.1 配置以太网 (18)5.2.2 安装配置tftp服务器 (19)5.2.3 配置防火墙 (21)5.2.4 配置NFS服务器 (22)5.3 JXARM9-2410中U-boot烧写 (22)5.3.1 u-boot的功能 (22)5.3.2 使用ADT IDE烧写u-boot (23)第六章系统功能的实现 (25)6.1 GCC简介 (25)6.1.1 GCC概述 (25)6.1.2 GCC基本用法 (25)6.2 Linux内核移植 (26)6.2.1 Linux内核源代码的安装 (26)6.2.2 Linux交叉编译环境的建立和使用 (27)6.2.3 Linux内核的配置和编译 (27)6.3 加载Linux内核映像 (30)6.4 Boa Web服务器的移植 (31)6.4.1 Boa Web服务器的建立 (31)6.5 Linux下动态Web页面的实现 (32)6.5.1 CGI程序分析 (32)6.5.2 Form输入的分析和解码 (34)第七章系统功能的测试 (36)7.1 测试Web服务器 (36)7.2 动态Web页面测试 (37)结束语 (40)致谢 (41)参考文献 (42)附录 (43)第一章引言随着计算机技术的发展,嵌入式系统已成为计算机领域的一格重要组成部分。

Boa的下载、编译、配置

Boa的下载、编译、配置
Boa的下载、编译、配置
默认分类 2008-06-10 13:52 阅读126 评论0 字号: 大大 中中 小小 Boa的下载、编译、配置
1、 进入linux中/home目录下,用wget /boa-0.94.13.tar.gz 下载boa源文件包。
2、 解压boa-0.94.13.tar.gz ,用tar zxvf boa-0.94.13/src命令进入到src目录。
4、 在命令行中输入 ./configure 生成Makefile文件。
5、 在命令行中输入make编译boa。
8、 vi /etc/boa/boa.conf 编辑配置boa,A、port 监视的端口号(一般不修改),port 80。B、user 设置为nobody最好设置为root ,user nobody。C、listen 监视的ip,一般注释掉,通配于服务器的IP地址,#listen 192.168.0.20。D、Group 设置,要在/etc/group文件内容中有的组才行,也可以设为Group 0,则表示没有Group。E、Errorlog 设为Errorlog /var/log/error_log,Accesslog设为Accesslog /var/log/boa/access_log, (前两个选项也可以设为/dev/null表示不要错误信息,或者注释了),目录在6项已经设建好。F、uselocaltime 是否使用本地时间,若注释掉的话就使用UTC时间。G、VerboseCGILogs 是否使用CGI错误信息记录,注释掉表示不记录。H、DocumentRoot 非常重要,html文本文档的目录,我设为DocumentRoot /var/www/。I、Directoryhtml html目录文件名的索引,我设为Directoryhtml index.html,也可以设为Directoryhtml index.asp。J、Defaluttype text/plain 文件扩展名没有或未知的话,使用缺省的MIME类型。K、CGIpath /bin:/usr/bin:/local/bin提供cgi程序的path环境变量(用cgi开发才用到)。L、scriptAlias /cgi-bin/ /var/www/cgi-bin,指明cgi脚本的虚路径对应的实际路径,一般所有的CGI程序都放在实际路径中

移植web服务器boa出现的问题

移植web服务器boa出现的问题

移植web服务器boa出现的问题通过两天的努力终于可以通过pc机网页浏览板子上的资源了。

现在将遇到的问题归纳如下:1、修改src/boa.c注释掉下面语句:if (setuid(0) !=-1){DIE(”icky Linux kernel bug!”);}即修改为:#if 0if(setuid(0) != -1){DIE(”icky Linux kernel bug!”);}#endif否则运行boa时会提示boa.c:226 - icky Linux kernel bug!: No suchfile or directory错误2. make在当前目录下生成一个boa的可执行程序,./boa运行即可,ps能看到boa的进程即说明boa正常工作.注:有些编译器会提示以下错误,按相应方法解决即可.util.c: 100: 1: pasting “t” and “->”does not give a valid preprocessing token make: [util.o] Error1解决方法:方法>. 修改compat.h中的#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff为:#define TIMEZONE_OFFSET(foo)foo->tm_gmtoff3.访问端口号设置大概25左右:Port 80,可以设定我们访问网页时的端口号默认为80—访问时无需指定假如改变了此端口号为8080,必须以下列格式访问: http://192.168.1.3:8080只能在超级终端输入boa一次,如果启动两次,就会出现端口被占用的情况。

友善之臂移植的文件系统中已经在系统启动时已经启动该服务,所以不用再启动一次(具体可查看你的系统启动信息)。

所以如果你用移植好的文件系统,默认情况已经启动,不用再boa。

4、编译capture和cgitest时,修改makefile,在cflags后面加上-static,目的是为了静态编译capture和cgitest,我想应该是我的板上没有它动态运行时的库文件,或者指定的库文件路径不对(还没检查),不过这样编译生成的文件就很大。

嵌入式boa服务器移植说明

嵌入式boa服务器移植说明

嵌入式boa服务器的移植——cpw806开发板:gec2410开发环境:Vmware+redflag6.0交叉编译器:arm-linux-gcc-4.3.2软件版本:linux2.6.31(内核),boa-0.94.13.tar.gz一:准备boa服务器源代码下载地址:/projects/boa/。

二:移植boa服务器1:编译boa服务器①解压#tar–zxvf boa-0.94.13.tar.gz②进入boa-0.94.13/src目录,#./configure③#修改交叉编译器路径#vi MakefileCC=gccCPP=gcc-E该为:CC=arm-linux-gccCPP=arm-linux-gcc-E④#make⑤去除调试信息#arm-linux-strip boa经4,5步之后,便在src目录下生成boa可执行文件。

编译过程中出现如下错误util.c:100:1:pasting“t”and“->”does not give a valid preprocessing token make:[util.o]Error1解决办法修改compat.h中的#define TIMEZONE_OFFSET(foo)foo##->tm_gmtoff为:#define TIMEZONE_OFFSET(foo)foo->tm_gmtoff有人说改用2.95.3版本的编译器也可以避免这个错误,本人没有试验过。

至此编译完成,此时便可生成可执行程序boa。

2:配置boa.conf文件有关boa.conf的说明文档很多,本人不再赘述,下面为有必要修改和注意的部分。

1修改User nobody为User0;2修改Group nogroup为Group0②设定日志目录:boa日志有两部分,Errorlog和AccessLog一般情况下为/var/log/boa/error_log和/var/log/boa/access_log两个文件。

实验14 Webserver的移植实验

实验14 Webserver的移植实验

实验14 Webserver的移植与网络通讯实验第1步:Boa程序的移植;(1)从/ 下载boa-0.94.13.tar.gz源码(或光盘中提供);(2)将下载下来的文件复制到linux的/work目录下,利用tar zxvf boa-0.94.13.tar.gz减压缩boa-0.94.13.tar.gz文件。

(3)切换到boa-0.94.13/src目录执行./configure对其进行配置。

(4)用vi编辑器修改src/Makefile 文件。

找到CC=gcc,改成CC = arm-linux-gcc;找到CPP= gcc –E,修改成CPP = arm-linux-gcc –E。

(5)用vi编辑器修改src/compat.h文件。

找到#define TIMEZONE_OFFSET(foo)foo##->tm_gmtoff,修改成#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff。

(6)执行make命令,编译boa。

(7)执行arm-linux-strip boa 将最终程序 boa 中的调试信息剥去,减小其体积。

第2步:Boa的配置和安装(1)用vi编辑器修改boa-0.94.13/boa.conf文件。

将Group nogroup修改为Group 0;将ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/修改为ScriptAlias /cgi-bin/ /var/www/cgi-bin/;将#ServerName .here 去掉前面的#号。

(2)在目标板上的Linux 中建立相应的目录:在/etc下建立boa目录,在/var下建立log、www目录,在/var/log下建立boa目录,在/var/www下建立cgi-bin目录。

(3)将下列文件拷贝到目标板的相应目录:(将需要复制到目标板的文件复制到宿主机的/mnt/nfs文件夹下,以nfs方式将宿主机的目录挂载到目标机上,然后将文件复制到(4)设置好网络参数,后台运行boa:(5)并在浏览器中输入:http://192.168.1.50,进行测试。

嵌入式boa服务器搭建和移植

嵌入式boa服务器搭建和移植

嵌入式boa服务器搭建和移植1.先下载源码/ ==> boa-0.94.13.tar.g2.tar -xvf boa-0.94.13.tar.g3./configure4.修改MakefileCC =or32-linux-gccCPP = or32-linux-gcc–E5.修改boa.c,注释下面几行if (setuid(0) != -1) {DIE(“icky Linux kernel bug!”);}改为/*if (setuid(0) != -1) {DIE(“icky Linux kernel bug!”);}*/6.修改文件compat.h#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff修改成#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff7.make 编译,这时候就会生成一个boa的可执行文件boa的配置文件是boa.conf,大概的配置是这样的:MimeTypes /etc/mime.types //指明mime.types文件位置DefaultType text/plain //文件扩展名没有或未知的话,使用的缺省MIME类型CGIPath /bin:/usr/bin:/usr/local/bin //提供CGI程序的PATH环境变量值Alias /doc /usr/doc //为路径加上别名ScriptAlias /cgi-bin/ /var/www/cgi-bin/ //输入站点和CGI脚本位置对于调试阶段,可以把主机的目录挂载到目标板上面,这样就方便调试。

假设主机的NFS共享目录是/NFS,在NFS下面建立一个www的文件夹,然后在www的文件夹下面建立images,cig-bin目录,还有一个index.html,可以随便找一个主页就可以了。

在主机上mkdir /NFS/wwwmkdir /NFS/www/imagesmkdir /NFS/www/cgi-bincp <dir>/index.html /NFS/www/然后在板子上面建立/var/www的目录mkdir /var/wwwmount -t nfs -o nolock <主机IP>:/NFS/www /var/www //挂载目标www板子上建立日志存放目录,在板子上:mkdir /var/logmkdir /var/log/boa对于boa配置文件的移植,可以把主机上的boa.conf拷贝到主机的NFS共享目录/NFS/www 下面。

boa以及servfox移植笔记

boa以及servfox移植笔记

Boa移植1.修改CC=此为自己的交叉编译路劲(which arm-linux-gcc查看交叉编译路劲)2.修改CPP =此为自己的交叉编译路劲–ELDFLAGS = -g -static(添加静态编译选项)。

3../configure 生成Makefile修改src/compat.h找到#define TIMEZONE_OFFSET(foo) foo## ->tm_gmtoff修改成#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff修改define.h找到#define SERVER_ROOT “/etc/boa”修改为#define SERVER_ROOT “/root/myfile/myboa/server”这里定义的web服务器的文件根目录(用户可以自己定义,只要跟boa.conf中的定义一致就可以)boa.c:211 - getpwuid: No such file or directory解决办法: 修改src/boa.c注释掉下面这段程序:if (passwdbuf == NULL) {DIE(”getpwuid”);}if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {DIE(”initgroups”);}即修改为:#if 0if (passwdbuf == NULL) {DIE(”getpwuid”);}if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {DIE(”initgroups”);}#endif④boa.c:228 - icky Linux kernel bug!: No such file or directory解决办法: 修改src/boa.c注释掉下面语句:if (setuid(0) != -1) {DIE(”icky Linux kernel bug!”);}即修改为:#if 0if (setuid(0) != -1) {DIE(”icky Linux kernel bug!”);}#endif4.make5.arm-linux-strip boa6.修改boa.conf文件7.port 80er 09.Group 010.#ServerAdmin root@localhost11.#ErrorLog /var/log/boa/error_log12.#AccessLog /var/log/boa/access_log13.S erverName .here14.D ocumentRoot /root/myfile/myboa/server15.D irectoryIndex index.html16.#DirectoryMaker /usr/lib/boa/boa_indexer17.K eepAliveMax 100018.K eepAliveTimeout 10019.M imeTypes /root/myfile/myboa/server/mime.type20.D efaultType text/html21.#Alias /doc /usr/doc22.S criptAlias /cgi-bin/ /root/myfile/myboa/server/cgi-bin23.S criptAlias /index.html/ /root/myfile/myboa/server/http-java-applet (23可以没有)在root目录下创建:/root/myfile/myboa/server/在server下创建cgi-bin、http-java-applet、并将PC上/etc/mime.types文件拷贝到开发板server目录下在/root/myfile下创建bin目录将可执行文件boa复制到bin目录下移植servfox24.【移植servfox】其实spcaview也可以做采集端。

boa移植boa交叉编译

boa移植boa交叉编译

boa移植boa交叉编译BOA 服务器是⼀个⼩巧⾼效的web服务器,是⼀个运⾏于unix或linux下的,⽀持CGI的、适合于嵌⼊式系统的单任务的http服务器,源代码开放、性能⾼配置boa-0.94.13 # ./configure修改MakefileCC = arm-linux-gccCPP = arm-linux-gcc -E编译boa-0.94.13 # make出现如下错误出现错误:yacc -d boa_grammar.ymake: yacc: Command not foundmake: *** [y.tab.c] Error 127解决办法:# sudo apt-get install bison出现错误:lex boa_lexer.lmake: lex: Command not foundmake: *** [lex.yy.c] Error 127解决办法:# sudo apt-get install flex出现错误:arm-none-eabi-gcc -g -O2 -pipe -Wall -I. -c -o alias.o alias.cIn file included from alias.c:26:0:boa.h:41:19: fatal error: netdb.h: No such file or directorycompilation terminated.<builtin>: recipe for target 'alias.o' failedmake: *** [alias.o] Error 1解决办法://将交叉编译⼯具链换成gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)出现错误:arm-linux-gcc -g -O2 -pipe -Wall -I. -c -o util.o util.cutil.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing tokenmake: *** [util.o] Error 1解决办法:# vi compat.h //修改120⾏#ifdef HAVE_TM_GMTOFF#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff#else制作cgi页⾯交叉编译出⼀个cig脚本,供boa使⽤。

Ubuntu16的boaweb服务器搭建

Ubuntu16的boaweb服务器搭建

Ubuntu16的boaweb服务器搭建在VMware上利用Ubuntu 16.04.LTS搭建Boa web服务器作为一个初学的菜鸟,第一次搭建web服务器,搭的还是最为简单的boa服务器,在网上是各种找资料啊,参考了如CSDN博客、Linux公社、博客园等诸多有名的网站,用了小半周才勉强弄出来,许多地方其实还是不太理解,只是用网上的方法搭建出来,结合自己搭建的过程,写了这么一篇文档,还希望各位大神老师批评指正,下面就是我自己的一个搭建过程。

一、在虚拟机上安装Ubuntu16Ubuntu16的百度云连接https:///s/1o87P78Q 运行VMware,点击创建新的虚拟机,选择“典型”,点击“下一步”选择“稍后安装操作系统”,点击“下一步”客户机操作系统选择“Linux”,版本选择“Ubuntu 64位”,点击“下一步”填写虚拟机名称,选择保存位置,点击“下一步”点击“下一步”,点击“完成”此时会出现一个新的页面,页面名称就是虚拟机名称点击“编辑虚拟机设备”开始对虚拟机硬件设备进行更改,修改网络配适器,选择自定义(u):特定虚拟网络,下面选择VMnet8(NAT模式),点击“确定”在CD/DVD选项中选择“使用ISO映像文件”,通过储存好的路径打开ISO映像文件,点击“确定”点击开启此虚拟机,此时可能会出现对话框说虚拟机版本不兼容,这时需要重新启动电脑,比如我的电脑本身装的为windows7 则应该重新启动windows7,按esc,然后按F10进入BIOS 系统选择“系统设置” 用左右键选择“处理器虚拟化技术”按回车键选择“启用”,按回车键,按F10保存并退出。

(每个人电脑不一样,依据自己的电脑进行改变)运行VMware,点击开启此虚拟机,语言改为中文简体,点击安装Ubuntu直接点击Continue,不进行选择选择Erase disk and install Ubuntu 使用Ubuntu默认的分区,自己不进行分区,点击Install Now,点击Continue选择你的所在地,选择键盘语言,填写用户名,主机名和密码Ubuntu开始安装,时间大约为2~3个小时,请耐心等待,完成后会提示重启,点击“Restart Now”关机,然后点击“编辑虚拟机设备”,在CD/DVD选项中选择“使用物理驱动器”,点击确定,然后关机然后重新进入Ubuntu16此时的Ubuntu16的屏幕非常小,打开终端,输入xrandr结果为然后输入xrandr -s 1280x768注意中间那个是字母x但是这个只是修改当前一次的,如果想一直修改,需要修改其配置文件/home/namo/.profile,利用gedit /home/namo/.profile打开文件,在文件末尾输入Sudo xrandr --newmode “1280x768_60.00”173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsyncSudo xrandr --addmode Virtual1 “1280x768_60.00”保存并退出此时如果进行su操作的话,会发现认证失败,需要重新更改密码,在终端输入sudo passwd 然后输入当前密码,此时终端会让我们输入新的密码并再次确认,新的密码可以和上一个密码相同,也可以不同,这样密码就更改完了。

移植boa的问题

移植boa的问题

boa成功移植到S3C2410开发板上ARM-LINUX学习整理交流2009-06-06 16:14:27 阅读277 评论0字号:大中小2009 05 11一:下载源码:/[root@localhost ~]# cd /usr/src[root@localhost src]# tar zxvf boa-0.94.13.tar.tar[root@localhost src]# cd boa-0.94.13[root@localhost boa-0.94.13]# cd src[root@localhost src]# ./configure二:编译前修改的文件:1. 修改Makefile文件,找到CC=gcc和CPP=gcc -E,分别将其改为交叉编译器安装的路径:CC=/usr/local/arm/2.95.3/bin/arm-linux-gccCPP=/usr/local/arm/2.95.3/bin/arm-linux-gcc –E保存退出。

2. 修改编译方式:LDFLAGS = -g –static注: 使用静态编译可以让目标文件自动的包含所需要的库文件,而动态编译需要手工拷贝库文件。

3.修改/src/defines.h文件:#define SERVER_ROOT "/etc/boa"4 修改boa-0.94/src/ util.c文件修改char *get_commonlog_time(void)函数。

time_offset = 0;5. 修改src/config.c:加Current_uid=16. 修改compat.h:把第120 行的#defineTIMEZONE_OFFSET(foo)foo##->tm_gmtoff修改为:#defineTIMEZONE_OFFSET(foo)foo->tm_gmtoff7.修改/src/boa.c,注释掉下面两行:/* if (setuid(0) != -1) {DIE("icky Linux kernel bug!");} *//*if (passwdbuf == NULL) {DIE("getpwuid");}*/8 gethostbyname:: Resource temporarily unavailable这个问题我也遇到过,我只是把src文件夹下的config.c里的if(!server_name){..........}(大概在266行到286行之间)注释掉,就能运行在板子上运行boa,到现在为止没有遇到过是么问题。

Boa应用-web网页配置A40i-飞凌嵌入式

Boa应用-web网页配置A40i-飞凌嵌入式

Boa应用-web网页配置A40i-飞凌嵌入式一、简要说明本文主要讲解A40i Boa应用,适用于飞凌 A40i 系列FETA40i-C 核心板Linux3.10 操作系统,其他平台也可以参考,但是不同平台之间会存在差异,需客户自行修改以适应自己的使用。

编写本文章的主要目的是协助客户加速产品的研发速度,由于小编水平有限,在服务过程中所提供的任何资料和信息,都仅供参考,客户有权不使用或自行参考修改,本文章参考资料和信息的完整性、可靠性等问题请自行验证。

硬件平台简介:FETA40i-C核心板基于全志工控行业平台级处理器四核Cortex-A7 A40i设计,主频1.2GHz,集成MAli400MP2 GPU,内存1GB/2GB DDR3L,存储8GB eMMC。

支持绝大部分当前流行的视频及图片格式解码,具有稳定可靠的工业级产品性能和高性价比低功耗等优势,搭载Linux和Android操作系统,适用于基于视觉交互的工业控制产品,目标应用包含,嵌入式设备、智能终端、工业控制、数据采集、机器视觉、工业物联网、移动互联设备、数字标牌等。

<第二章 A40i系列Boa应用Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右。

作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。

但Boa支持CGI,能够为CGI程序fork出一个进程来执行,Boa的设计目标是速度和安全。

1、Boa配置文件Boa配置文件在/etc/boa/boa.conf常用配置说明:(可根据项目需要,将以下配置添加到配置文件里)Group nogroupUser nobody这两个配置是配置boa的运行的属主和属组,如果cgi要配置网卡地址,就必须修改成User rootCGIPath /bin:/usr/bin:/usr/local/bin:/sbinCgi程序运行的一个程序搜索路径;比如运行ifconfig eth0 192.169.0.232就必须配置/sbin路径;ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ /usr/lib/cgi-bin/ 是cgi程序放到boa中的绝对地址,/cgi-bin/ 是客户在网页中提交的cgi地址;例如:/usr/lib/cgi-bin/中放置一个app.cgi;网页访问时候使用/cgi-bin/app.cgi?type=conf&random=0.1111DocumentRoot /var/www这个是虚拟目录在开发板中的真实目录/var/log/boa/access_log日志需要的文件夹和名字VerboseCGILogs调试日志开关,正式运行时候关闭。

嵌入式web服务器BOA与CGI

嵌入式web服务器BOA与CGI

: :web BOA CGI zz2009-11-05 19:19/u1/33226/showart_485155.htmlWEBlighttpdshttpdthttpdboamathopdminihttpdappwebgoahead========================================================================WEB BOA 2007-2-26 16:20:00Internet WebB/S CGI Web WebCGI Web1 Web Linux Apache WebWebWeb Boa thttpd /software/thttpd/Apache WebBoaBoa Web 60KB Web fork Boa CGI CGI fork Boa Boa ApacheBoa Boa 0.94.13 src# tar xzf boa-0.94.13.tar.gz# cd boa-0.94.13/srcMakefile# ./configureMakefile CC=gcc CC = arm-linux-gcc CPP = gcc –ECPP = arm-linux-gcc –Emake boa 60KB# make# arm-linux-strip boaBoa CGI Boa /etc boa Boa boa.conf Boa boa.conf # 80Port 80# bind IP INADDR_ANY IP#Listen 192.68.0.5# nobody /etc/passwd#nobodyUser nobody# nogroup /etc/group# nogroupGroup nogroup# email#ServerAdmin root@localhost# /#/dev/null /var/log/boaErrorLog /var/log/boa/error_log# /#/dev/null /var/log/boa#AccessLog /var/log/boa/access_log# UTC#UseLocaltime# CGI#VerboseCGILogs#ServerName # Web##VirtualHost# HTML /DocumentRoot /var/www#UserDir public_html#HTMLDirectoryIndex index.html# HTML boa# HTML #DirectoryIndex| | |ilikuw w .d o c u -t r a c k .c mCct obyw w .d o c u -t r a c k .c o#DirectoryMaker /usr/lib/boa/boa_indexer# DirectoryIndex DirectoryMaker Boa# Boa# DirectoryCache /var/spool/boa/dircache# HTTP 0 HTTPKeepAliveMax 1000#HTTPKeepAliveTimeout 10# mime.types /# mime.types AddTypeMimeTypes /etc/mime.types# MIMEDefaultType text/plain# CGI PATHCGIPath /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# + +CGIScriptAlias /cgi-bin/ /var/www/cgi-bin/boa.conf boa.conf Boa /var/log/boaHTML /var/www mime.types /etcCGI /var/www/cgi-bin/ mime.types MIMELinux /etc======================================================================================host test=======================================1. boa-0.94.13/src./configuremake2. etc/ boa boa.conf . boa.confGroup nogroup Group 03. /var/log/ boa boa4./var/www DocumentRoot /var/wwwcgi ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ cgi /usr/lib/cgi-bin/http://201.201.201.249/cgi-bin/cgi-test.cgiCGIPath /bin:/usr/bin:/usr/local/binroot ifconfig ip /sbin=====================================================================cgi=====================================================================//pass.c#include <stdio.h>#include <stdlib.h>#include <string.h>char* getcgidata(FILE* fp, char* requestmethod);int main(){char *input;char *req_method;char name[64];char pass[64];int i = 0;int j = 0;-type: text/plain; charset=iso-8859-1\n\n");printf("Content-type: text/html\n\n");printf("The following is query reuslt:<br><br>");req_method = getenv("REQUEST_METHOD");input = getcgidata(stdin, req_method);// input// Username="admin"&Password="aaaaa"// "Username=" "&Password="// "admin" "aaaaa"// 9 UserName=// "UserName=" "&"for ( i = 9; i < (int)strlen(input); i++ ){if ( input[i] == '&' ){name[j] = '\0';break;}name[j++] = input[i];}// 9 + "&Password="10 + Username//for ( i = 19 + strlen(name), j = 0; i < (int)strlen(input); i++ ){pass[j++] = input[i];}pass[j] = '\0';printf("Your Username is %s<br>Your Password is %s<br> \n", name, pass);return 0;}char* getcgidata(FILE* fp, char* requestmethod){char* input;int len;int size = 1024;likuw w .d o c u -t r a c k .c mCct obyw w .d o c u -t r a c k .c oint i = 0;ifelse if (!strcmp(requestmethod, "POST")){len = atoi(getenv("CONTENT_LENGTH"));input = (char*)malloc(sizeof(char)*(size + 1));if (len == 0){input[0] = '\0';return input;}while(1){input[i] = (char)fgetc(fp);if (i == size){input[i+1] = '\0';return input;}--len;if (feof(fp) || (!(len))){i++;input[i] = '\0';return input;}i++;}}return NULL;}/** gcc -o pass.cgi pass.c*///pass.html<html><head><title> </title></head><body><form name="form1" action="/cgi-bin/pass.cgi" method="POST"><table align="center"><tr><td align="center" colspan="2"></td></tr><tr><td align="right"> </td><td><input type="text" name="Username"></td></tr><tr><td align="right"> &nbsp;&nbsp; </td><td><input type="password" name="Password"></td></tr><tr><td><input type="submit" value=" "></td><td><input type="reset" value=" "></td></tr></table></form></body></html>wte1235thisjok drxdai yuzgy22arda1980yangtao139869blue1327|( )likuw w .d o c u -t r a c k .c mCct obyw w .d o c u -t r a c k .c o| | |©2012 Baidulikuw w .d o c u -t r a c k .c mCct obyw w .d o c u -t r a c k .c o。

嵌入式web服务器boa移植到mini2440开发板详细过程

嵌入式web服务器boa移植到mini2440开发板详细过程

嵌入式web服务器boa移植到mini2440开发板详细过程1、概述为了和开发板上用的httpd服务,我选用的服务器是boa,boa已经没有更新了,但是现在的应用仍然很大,当然更先进的AppWeb当然是更好的选择,不过学习应先从简单的入手。

本教程使用环境是Red Hat Enterprise Linux 6,交叉编译工具是arm-linux-gcc4.3.2,开发板是mini2440,开发板内核是2.6.32.2、到/下载源码,boa最终版是0.94.133、解压文件1)解压[root@localhostopen_source]# lsboa-0.94.13.tar.gz[root@localhostopen_source]# tar -xvfboa-0.94.13.tar.gz -C ./[root@localhostopen_source]# lsboa-0.94.13 boa-0.94.13.tar.gz2)为了和X86版本区别把解压出来的文件夹boa-0.94.13重新命名为boa-0.94.13_arm[root@localhostopen_source]# mv boa-0.94.13 boa-0.94.13_arm4. 编译前修改工作(主要是因为boa太久没有更新,目前相对说比较老,要修改下才能通过编译)1)修改vicompat.h文件[root@localhostopen_source]# lsboa-0.94.13_arm boa-0.94.13.tar.gz[root@localhostopen_source]# cd boa-0.94.13_arm/src/[root@localhostsrc]# vicompat.h找到#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff修改成#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff即将120行和126行的foo##->tm_gmtoff改为foo->tm_gmtoff否则会出现错误:util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token make: *** [util.o] 错误12)修改src/log.c注释掉if (dup2(error_log, STDERR_FILENO) == -1) {DIE("unable to dup2 the error log");}为:/*if (dup2(error_log, STDERR_FILENO) == -1) {DIE("unable to dup2 the error log");}*/否则会出现错误:log.c:73 unable to dup2 the error log:bad file descriptor3)修改src/boa.c注释掉下面两句话:if (passwdbuf == NULL) {DIE(”getpwuid”);}if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) { DIE(”initgroups”);}为#if 0if (passwdbuf == NULL) {DIE(”getpwuid”);}if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) { DIE(”initgroups”);}#endif否则会出现错误:boa.c:211 - getpwuid: No such file or directory。

Boa Web服务器在S3C2410上移植

Boa Web服务器在S3C2410上移植

准备工作1.下载Boa源码下载地址: /最新发行版本:0.94.13下载boa-0.94.13.tar.gz,注意:从boa上下载的是boa-0.94.13.tar.tar,解压方式一样将下载的文件放入用户目录解压:# tar xzf boa-0.94.13.tar.gz2、生成Makefile文件boa-0.94.13.tar.gz解压后生成boa-0.94.13目录,运行boa-0.94.13/src/configure文件,执行:#cd boa-0.94.13/src#./configure3、修改Makefile文件(注意:必须用cross-2.95.3, 如使用3.3.2,3.4.1等等会出错)a、修改CC = gcc为CC = /usr/local/arm/2.95.3/bin/arm-linux-gcc (根据自己电脑主机的编译器位置定)b、修改CPP = gcc - E为CPP = /usr/local/arm/2.95.3/bin/arm-linux-gcc -E4、编译进入boa-0.94.13/src目录# make# /usr/local/arm/2.95.3/bin/arm-linux-strip boa (这是为了进行去除boa中生成的编译信息,让文件变小,我在移植过程中没有执行这一步)5. 将编译好的程序放入arm根文件系统的/bin目录下# cp boa /home/arm/nfs/rootfs/bin/Boa的配置这一步的工作也在电脑主机上完成。

在电脑主机上的Boa源码boa-0.94.13目录下已有一个示例boa.conf,可以在其基础上进行修改。

如下:#vi boa.conf1、Group的修改修改Group nogroup为Group 02、ScriptAlias的修改修改ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/为ScriptAlias /cgi-bin/ /var/www/cgi-bin/3、ServerName的设置修改#ServerName .here为ServerName .here注意:该项默认为未打开,执行Boa会异常退出,提示“gethostbyname::No such file or directory”,所以必须打开。

第5章 boa的移植部分

第5章 boa的移植部分
5.2 嵌入式Web 服务器-boa的移植
5.2.1 嵌入式web服务器概述 随着嵌入式技术的发展和高速宽带网 络的普及,利用网络实现远程监控已为人 们广泛接受,嵌入式网络监控技术正是在 此条件下逐步发展成熟起来的。
直接采用Internet网络连接嵌入式设备进行 远程监控:必须在嵌入式设备上安装web 服务器,使其支持远程PC或移动终端通过 浏览器来访问该设备。 常见的嵌入式web服务器:boa,httpd和 thttpd。
1. boa简介 Boa 是一款单任务的HTTP 服务器
当有连接请求到来时,它并不为每个连接单独 创建进程,也不通过复制自身进程来处理多链 接, 而是通过建立HTTP 请求列表来处理多路 HTTP 连接请求 同时它只为CGI 程序创建新的进程 在最大程度上节省了系统资源, 这点对嵌入式 系统来讲是至关重要的。
GET方法是通过环境变量QUERY- STRING 传递用户提交的数据。 经过编码的数据以问号打头追加在标识 CGI脚 本地址的URL后一起传给Web服务器。 服务器将其存于QUERY- STRING中,CGI 程 序可以通过getenv( )函数来读取。编码数据除了 表单数据, 还可以是直接调用CGI脚本时追加在 URL地址后面的参数。
POST方法则是通过标准输入( stdin) 传 递 提交数据。 编码了的表单数据独立地传送给Web服务 器,CGI 程序从标准输入中获得,可以用 getchar( ) 、sscanf( ) 、fread( ) 等函数。 要注意的是数据的长度是通过读取环境变 量 CONTENT_LENGTH 获得的,而不是通过 文件尾标识符来判断。
CGI 程序可以用来在web内加入动态的 内容。 通过接口,浏览器能够发送一个可执行 应用程序的HTTP请求,而不仅仅只是静态 的HTML文件。 服务器运行指定的应用程序, 这个应 用程序读取与请求相关的信息,获得请求传 过来的数值。

Linux下嵌入式Web服务器BOA和CGI编程开发

Linux下嵌入式Web服务器BOA和CGI编程开发

Linux下嵌⼊式Web服务器BOA和CGI编程开发**⽬录**⼀、环境搭建⼆、相关配置(部分)三、调试运⾏四、测试源码参考五、常见错误六、扩展(CCGI,SQLite)# ⼆、相关配置(部分)boa我的配置:/etc/boa$ sudo vi boa.conf# 下⾯⼏个都是关键点,基本就错这⼏个点上# cumentRoot /var/www#将cgi保存的实际位置和⽹站地址做个对应# ScriptAlias /cgi-bin/ /var/www/cgi-bin/#cgi脚本运⾏时能看到的$PATH(可选)# CGIPath /bin:/usr/bin:/usr/local/bin#如果想在任何位置都能运⾏cgi,要添加这个(可选)AddType application/x-httpd-cgi cgi# Boa v0.94 configuration file# File format has not changed from 0.93# File format has changed little from 0.92# version changes are noted in the comments## The Boa configuration file is parsed with a lex/yacc or flex/bison# generated parser. If it reports an error, the line number will be# provided; it should be easy to spot. The syntax of each of these# rules is very simple, and they can occur in any order. Where possible# these directives mimic those of NCSA httpd 1.3; I saw no reason to# introduce gratuitous differences.# $Id: boa.conf,v 1.252002/03/2204:33:09 jnelson Exp $# The "ServerRoot" is not in this configuration file. It can be compiled# into the server (see defines.h) or specified on the command line with# the -c option, for example:## boa -c /usr/local/boa# Port: The port Boa runs on. The default port for http servers is 80.# If it is less than 1024, the server must be started as root.# 端⼝⽼是被占⽤,所以我改掉了Port 88# Listen: the Internet address to bind(2) to. If you leave it out,# it takes the behavior before 0.93.17.2, which is to bind to all# addresses (INADDR_ANY). You only get one "Listen" directive,# if you want service on multiple IP addresses, you have three choices:# 1. Run boa without a "Listen" directive# a. All addresses are treated the same; makes sense if the addresses# are localhost, ppp, and eth0.# b. Use the VirtualHost directive below to point requests to different# files. Should be good for a very large number of addresses (web# hosting clients).# 2. Run one copy of boa per IP address, each has its own configuration# with a "Listen" directive. No big deal up to a few tens of addresses.# Nice separation between clients.# The name you provide gets run through inet_aton(3), so you have to use dotted# quad notation. This configuration is too important to trust some DNS.#Listen 192.68.0.5# User: The name or UID the server should run as.# Group: The group name or GID the server should run as.Group 0# ServerAdmin: The email address where server problems should be sent.# Note: this is not currently used, except as an environment variable# for CGIs.#ServerAdmin root@localhost# ErrorLog: The location of the error log file. If this does not start# with /, it is considered relative to the server root.# Set to /dev/null if you don't want errors logged.# If unset, defaults to /dev/stderrErrorLog /var/log/boa/error_log# Please NOTE: Sending the logs to a pipe ('|'), as shown below,# is somewhat experimental and might fail under heavy load.# "Usual libc implementations of printf will stall the whole# process if the receiving end of a pipe stops reading."#ErrorLog "|/usr/sbin/cronolog --symlink=/var/log/boa/error_log /var/log/boa/error-%Y%m%d.log"# AccessLog: The location of the access log file. If this does not# start with /, it is considered relative to the server root.# Comment out or set to /dev/null (less effective) to disable# Access logging.# AccessLog /var/log/boa/access_log# Please NOTE: Sending the logs to a pipe ('|'), as shown below,# is somewhat experimental and might fail under heavy load.# "Usual libc implementations of printf will stall the whole# process if the receiving end of a pipe stops reading."#AccessLog "|/usr/sbin/cronolog --symlink=/var/log/boa/access_log /var/log/boa/access-%Y%m%d.log" # UseLocaltime: Logical switch. Uncomment to use localtime# instead of UTC time#UseLocaltime# VerboseCGILogs: this is just a logical switch.# It simply notes the start and stop times of cgis in the error log# Comment out to disable.#VerboseCGILogs# ServerName: the name of this server that should be sent back to# clients if different than that returned by gethostname + gethostbynameServerName .here# VirtualHost: a logical switch.# Comment out to disable.# Given DocumentRoot /var/www, requests on interface 'A' or IP 'IP-A'# become /var/www/IP-A.# Example: http://localhost/ becomes /var/www/127.0.0.1## Not used until version 0.93.17.2. This "feature" also breaks commonlog# output rules, it prepends the interface number to each access_log line.# You are expected to fix that problem with a postprocessing script.#VirtualHost# DocumentRoot: The root directory of the HTML documents.# Comment out to disable server non user files.DocumentRoot /var/www# UserDir: The name of the directory which is appended onto a user's home# directory if a ~user request is recieved.UserDir public_html# DirectoryIndex: Name of the file to use as a pre-written HTML# directory index. Please MAKE AND USE THESE FILES. On the# fly creation of directory indexes can be _slow_.DirectoryIndex index.html# DirectoryMaker: Name of program used to create a directory listing.# Comment out to disable directory listings. If both this and# DirectoryIndex are commented out, accessing a directory will give# an error (though accessing files in the directory are still ok). DirectoryMaker /usr/lib/boa/boa_indexer# DirectoryCache: If DirectoryIndex doesn't exist, and DirectoryMaker# has been commented out, the the on-the-fly indexing of Boa can be used # to generate indexes of directories. Be warned that the output is# extremely minimal and can cause delays when slow disks are used.# Note: The DirectoryCache must be writable by the same user/group that # Boa runs as.# DirectoryCache /var/spool/boa/dircache# KeepAliveMax: Number of KeepAlive requests to allow per connection# Comment out, or set to 0 to disable keepalive processing KeepAliveMax 1000# KeepAliveTimeout: seconds to wait before keepalive connection times out KeepAliveTimeout 10# MimeTypes: This is the file that is used to generate mime type pairs# and Content-Type fields for boa.# Set to /dev/null if you do not want to load a mime types file.# Do *not* comment out (better use AddType!)MimeTypes /etc/mime.types# DefaultType: MIME type used if the file extension is unknown, or there# is no file extension.DefaultType text/plain# CGIPath: The value of the $PATH environment variable given to CGI progs. CGIPath /bin:/usr/bin:/usr/local/bin# SinglePostLimit: The maximum allowable number of bytes in# a single POST. Default is normally 1MB.# AddType: adds types without editing mime.types# Example: AddType type extension [extension ...]# Uncomment the next line if you want .cgi files to execute from anywhere#AddType application/x-httpd-cgi cgi# Redirect, Alias, and ScriptAlias all have the same semantics -- they# match the beginning of a request and take appropriate action. Use# Redirect for other servers, Alias for the same server, and ScriptAlias# to enable directories for script execution.# Redirect allows you to tell clients about documents which used to exist in# your server's namespace, but do not anymore. This allows you to tell the # clients where to look for the relocated document.# Example: Redirect /bar http://elsewhere/feh/bar# Aliases: Aliases one path to another.# Example: Alias /path1/bar /path2/fooAlias /doc /usr/doc# ScriptAlias: Maps a virtual path to a directory for serving scripts# Example: ScriptAlias /htbin/ /www/htbin/ScriptAlias /cgi-bin/ /var/www/cgi-bin/View Codecgi我的配置:sudo vi /etc/apache2/sites-enabled/000-defaultServerName 127.0.0.1<VirtualHost *:80>ServerAdmin webmaster@localhostDocumentRoot /var/www<Directory />Options FollowSymLinksAllowOverride None</Directory><Directory /var/www/>Options Indexes FollowSymLinks MultiViews AllowOverride NoneOrder allow,denyallow from all</Directory>ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/<Directory "/usr/lib/cgi-bin">AllowOverride NoneOptions +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,denyAllow from all</Directory>ErrorLog ${APACHE_LOG_DIR}/error.log# Possible values include: debug, info, notice, warn, error, crit, # alert, emerg.LogLevel warnCustomLog ${APACHE_LOG_DIR}/access.log combined Alias /doc/ "/usr/share/doc/"<Directory "/usr/share/doc/">Options Indexes MultiViews FollowSymLinks AllowOverride NoneOrder deny,allowDeny from allAllow from 127.0.0.0/255.0.0.0 ::1/128</Directory></VirtualHost>View Code下⾯提供⼏个测试代码,转⾃其他⼤佬,不过我找不到⽹址了。

boa服务器的移植

boa服务器的移植

boa服务器的移植boa Web服务器是一个单任务http服务器,源代码开放、性能高。

下载地址:/Cgic库文件:cgic205.tar.gz 。

下载地址:/cgic/交叉编译器版本:arm-none-linux-gnueabi-gcc一、编译配置boa服务器1 、[root@localhost /]#mkdir web//在根目录下创建web目录2 、[root@localhost /]# cd /web/3 、[root@localhost web]# rz4 、[root@localhost web]# tar –zxvf boa-0.94.13.tar.gz//将源码解压到/web目录下5 、[root@localhost web]# cd boa-0.94.13/6 、[root@localhost boa-0.94.13]# cd src/7 、[root@localhost src]# ls8 、[root@localhost src]# ./configure//运行./configure使之生成Makefile文件9 、[root@localhost src]# vi Makefile修改内容如下:把CC=gcc 和CPP=gcc -E改写成CC=arm-none-linux-gnueabi-gccCPP=arm-none-linux-gnueabi-g++ -E10 、[root@localhost src]# vi compat.h在一般模式下输入:set nu显示行编号,再用120进到120行,修改内容如下:120 #define TIMEZONE_OFFSET(foo)foo##-&gt;tm_gmtoff改为define TIMEZONE_OFFSET(foo) foo-&gt;tm_gmtoff 把120行foo后两个#号去掉11 、[root@localhost src]# make//编译12 、[root@localhost src]# arm-linux-strip boa //优化boa可执行文件(此步非必须)13 、[root@localhost web]# cd boa-0.94.13/14 、[root@localhost boa-0.94.13]# vi boa.conf //修改boa的配置文件在一般模式下输入:set nu显示行编号,再用111进到111行,修改内容如下:把111 DocumentRoot /var/www改为111 DocumentRoot /var/www//指明html文件所放的路径把193 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/改为193 ScriptAlias /cgi-bin/ /var/www/cgi-bin///指明cgi脚本的虚拟路径所对应的实际路径15、将/src目录下新生成的boa文件下载到目标板的/bin目录下,将boa.conf文件下载到目标板的/etc/boa/目录下。

uClinux中boa web server的配置

uClinux中boa web server的配置

uClinux中boa web server的配置作者:wzc0066来源:正文:一、环境准备编译环境:uClinux-dist-20040408.tar.gz编译工具:arm-elf-*板子型号:SmartArm2200二、编译配置1、选择Kernel/Library/Defaults Selection -> Customize Vendor/User Settings -> Network Applications -> boa并编2、配置boa web server:2.1、修改文件uClinux-dist/user/boa/src/defines.h将#define SERVER_ROOT "/home/httpd"改成#define SERVER_ROOT "/etc/boa"意思是设定boa web server的ServerRoot路径为/etc/boa2.2、编辑配置文件uClinux-dist/user/boa/examples/boa.conf,如下Port 80User 0Group 0DocumentRoot /var/wwwUserDir public_htmlDirectoryIndex index.htmlKeepAliveMax 1000KeepAliveTimeout 10DefaultType text/htmlAddType application/x-httpd-cgi cgiScriptAlias /cgi-bin/ /var/www/cgi-bin/AddType image/jpeg jpg关于配置文件的几点说明:(1)所以的*Log选项都被注释掉了,否则启动boa的时候提示说不识别这些*Log标记;(2)没有添加"mime.types"选项,原因详见boa测试图片显示乱码;(3)配置文件boa.conf需拷贝到ServerRoot,可以手动,也可以通过修改Makefile文件(uClinux-dist/vendors/PH 如果配置文件boa.conf的位置不正确,则会得到形如“Authentication password file for /cgi-bin/ not found!”之类的错误三、调试1、如果现在运行boa & (或者运行boa -c /var/www &,但我们已指定DocumentRoot/var/www,所以运行外面的命令就to exec /sbin/modprobe -s -knet-pf-1, errno = 2”,此时boa web server还不可用!2、增加编译Kernel/Library/Defaults Selection -> Customize Vendor/User Settings-> BusyBox -> modprobe并重新如下错误信息:__alloc_pages: 6-order allocation failed (gfp=0x1f0/0)Allocation of length 164704 from process 193 failedBuffer memory: 52kBCache memory: 1076kBFree pages: 876kB ( 0kB HighMem)Zone MA freepages: 0kBZone:Normal freepages: 876kBZone:HighMem freepages: 0kB( Active: 94, inactive: 188, free: 219 )= 0kB)25*4kB 21*8kB 12*16kB 5*32kB 2*64kB 1*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB = 876kB)= 0kB)Unable to mmap process text, errno 12kmod: failed to exec /sbin/modprobe -s -k net-pf-1, errno = 12__alloc_pages: 6-order allocation failed (gfp=0x1f0/0)Allocation of length 164704 from process 195 failedBuffer memory: 52kBCache memory: 1076kBFree pages: 700kB ( 0kB HighMem)Zone MA freepages: 0kBZone:Normal freepages: 700kBZone:HighMem freepages: 0kB( Active: 47, inactive: 235, free: 175 )= 0kB)25*4kB 19*8kB 12*16kB 4*32kB 2*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB = 700kB)= 0kB)Unable to mmap process text, errno 12munmap of non-mmaped memory by process 195 (insmod): 817fb000munmap of non-mmaped memory by process 195 (insmod): 815863a0Unhandled fault: external abort on linefetch (F4) at 0x00000001fault-common.c(97): start_code=0x81380040, start_stack=0x815bff74)pid 182: failed 256好像是内存分配错误!但此时boa web server已经可以访问!3、增加编译Kernel/Library/Defaults Selection -> Customize Kernel Settings-> Networking options -> Unix domain webserver再启动时除了一个pid外,没任何多余的信息了!(此选项到底有什么作用,我还是不知道!)四、其它说明1、我的uclinux的大部分配置都是“默认”的,但这里的“默认”可能是已被硬件厂商修改过的(我用的uClinux-dist-20042、web测试时,html文件应放在/var/www目录下,cgi程序应放在/var/www/cgi-bin目录下,这些在配置文件中都写3、也可以通过nfs进行web测试(这样会免去多次烧写的麻烦),nfs的配置详见/658五、现存问题现在cgi、javascript、图片浏览等测试都良好!但在测mp3的时候,还不行,原因可能是还不支持大文件!我看网上说uclinux好像默认每次分配的最大内存是128K,所以要是运行大于128K的文件就会出错,不知是不是这我还看到一条信息说选择Kernel hacking中的一项配置后就可支持大文件了,但我现在的2.4.x内核中没找到网上说现在点击一mp3文件(二点几M大小)的链接时终端出现的错误信息为:Allocation of length 2502723 from process 24 failedBuffer memory: 56kBCache memory: 2744kBFree pages: 2420kB ( 0kB HighMem)Zone MA freepages: 0kBZone:Normal freepages: 2420kBZone:HighMem freepages: 0kB( Active: 98, inactive: 602, free: 605 )= 0kB)7*4kB 9*8kB 11*16kB 7*32kB 4*64kB 1*128kB 0*256kB 1*512kB 1*1024kB 0*2048kB = 2420kB)= 0kB)munmap of non-mmaped memory by process 24 (boa): ffffffff现在虽然还不完美,但一般的使用我想还是没什么问题的!这就是我的boa web server配置的一般过程!最近更新: 关于uClinux大块内存分配问题当运行一个超过1M的应用程序时,uclinux系统会报内存分配错误!在编译内核时需要选中“Allow allocating large blocks (> 1MB) of memory”这一选项后就可以解决问题!但是要找到这个选项的位置对于新手来说还不是太容易, 下面是详细操作过程:∙该配置选项所对应的宏定义是:CONFIG_NO_MMU_LARGE_ALLOCS∙首先需要选中Code maturity level options 中的Prompt for development and/or incomplete code/drivers ∙然后在Kernel hacking 中才可以看到Non power-of-2 kernel allocator (EXPERIMENTAL)选项,∙选中该选项之后就可以看到Allow allocating large blocks (> 1MB) of memory, 选中即可!嵌入式开发联盟∙使用mkvtoolnix切割MKV大文件∙Linux下mysql基本操作指令集∙Debian lenny上安装配置compiz fusion∙静态编译web server Appweb(带Matrixssl支持) For ARM9+ linux∙ECOS中支持FAT32长文件名的FS∙Buffalo LinkStation HD-H120LAN 改机文档∙Linux下通过mencoder截取多媒体中的音频为mp3文件∙sqlite在uClinux下的移植∙Linux下利用mencoder将字幕文件内嵌到视频之中∙我认为学习arm比较好的书。

实验七网络服务器 Boa 实验

实验七网络服务器 Boa 实验

实验七网络服务器 Boa 实验一、实验目的学会嵌入式Web 服务器Boa 的移植;学会使用Boa 服务器。

二、实验设备硬件:EduKit-IV 嵌入式教学实验平台、Mini2410 核心子板、PC 机;软件:Windows 2000/NT/XP、Ubuntu 8.04、其他嵌入式软件包。

三、实验内容下载Boa 服务器程序的源码,完成Boa 程序的移植;修改Boa 的配置,使其能够支持CGI 程序的执行;运行和测.Boa 服务器。

实验步骤:下面介绍如何进行BOA 实验(工作目录$WORKDIR 为:/usr/local/src/EduKit-IV/,$SIMPLEDIR 为:$WORKDIR/Mini2410/simple):1)设置环境变量(工作目录$WORKDIR 为:/usr/local/src/EduKit-IV/,$SIMPLEDIR 为:$WORKDIR/Mini2410/simple):$ source /usr/local/src/EduKit-IV/Mini2410/set_env_linux.sh$ source /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/path.sh2)进入到Madplay 播放器实验目录,并解压相应工具包及库:$ cd $SIMPLEDIR/11.1-boa$ tar zxvf boa-0.94.13.tar.gz3)配置boa 生成Makefile:$ cd boa-0.94.13/src$ ./configure --host=arm-linux --target=arm-linux4)修改源码文件:修改$SIMPLEDIR/11.1-boa/boa-0.94.13/src/Makefile:修改:CC = gccCPP = gcc -ECC = arm-linux-gccCPP = arm-linux-gcc -E修改$SIMPLEDIR/11.1-boa/boa-0.94.13/src/compat.h:修改:#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff为:#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff修改$SIMPLEDIR/11.1-boa/boa-0.94.13/src/boa.c:修改:if (setuid(0) != -1) {DIE("icky Linux kernel bug!");}为:// if (setuid(0) != -1) {//// }DIE("icky Linux kernel bug!");5)修改完源码文件后输入命令开始编译源码:$ make$ arm-linux-strip boa6)修改boa 配置文件$SIMPLEDIR/11.1-boa/boa-0.94.13/boa.conf:修改:User nobodyGroup nogroup为:User rootGroup root修改:#ServerName .hereServerName 修改:DocumentRoot为:DocumentRoot /www修改:ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/为:ScriptAlias /cgi-bin/ /www/cgi-bin/7)准备BOA 实验必备源码并拷贝到$NFSDIR 目录(实验中将通过ftp 服务加载到实验平台运行的 linux 上)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
Boa服务器的移植可分成两部分,一个是在x86平台上移植,即在虚拟机的linux下,另一个是 在arm平台上移植,即在开发板上的linux下,本手册的前四步,都是在虚拟机上做移植,第五步 是移植到发开板上。
一、编译 boa 程序
1、下载boa-0.94.13.tar.gz。 2、解压 3、#./configure 4、#make 编译会出错: util.c: 100: 1: pasting “t” and “->” does not give a valid preprocessing token make: [util.o] Error1 解决方法,修改compat.h中的 #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff 为: #define TIMEZONE_OFFSET(foo) foo->tm_gmtoff
3
MimeTypes /etc/mime.types 将网页文件放在/var/www 目录下,cgi 脚本放在/var/www/cgi-bin 目录下。在开发板上运行 boa, 在主机 IE 上输入开发板 IP,可看到网页。
六、常见错误
这些错误内容可查看/var/log/boa/error_log 文件 1、gethostbyname:: No such file or directory 解决办法: 修改 boa.conf 去掉 ServerName .here 前的注释符号(#)。 2、util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token make: *** [util.o] 解决办法: 修改 src/compat.h 找到 #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff 修改成 #define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff 3、boa.c:211 - getpwuid: No such file or directory 解决办法: 修改 src/boa.c 注释掉下面这段程序: if (passwdbuf == NULL) { DIE(”getpwuid”); } if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) { DIE(”initgroups”); } 即修改为: #if 0 if (passwdbuf == NULL) { DIE(”getpwuid”); } if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) { DIE(”initgroups”); } #endif 4、boa.c:228 - icky Linux kernel bug!: No such file or directory 解决办法: 修改 src/boa.c 注释掉下面语句: if (setuid(0) != -1) { DIE(”icky Linux kernel bug!”);
四、运行 boa 程序
在 windows 下通过 http://192.168.1.230(虚拟机的 IP 地址)这种形式访问,进行测试。
五、移植到开发板
1、(第一.3 步)操作完成之后,修改 Makefile 文件,将 CC = gcc CPP = gcc -E 改为: CC = arm-linux-gcc CPP = arm-linux-gcc -E #make #arm-linux-strip boa //去掉调试信息,减少 boa 体积 2、拷贝 PC 上/etc/mime.types 文件到开发板/etc 目录下,如果不用 mimi.types,可将 boa.conf 文件中 MimeTypes /etc/mime.types 修改为: MimeTypes /dev/null boa 配置相关目录 1、boa.conf 的存放目录: 默认 boa.conf 是在/etc/boa.conf 目录的,boa 运行时会自动去找/etc/bon.conf 目录。这个设定 是在 define.h 文件中定义的,可在编译之前进行修改。 2、log 目录: 分为 Errorlog 和 AccessLog 两个目录,可在 boa.conf 中修改。如: ErrorLog /var/log/boa/error_log AccessLog /var/log/boa/access_log 3、html 文件存放目录, 可在 boa.conf 文件中修改。如: DocumentRoot /var/www 4、cgi 脚本存放目录, 可在 boa.conf 文件中修改。如: ScriptAlias /cgi-bin/ /var/www/cgi-bin 5、mime.types 存放目录, 可在 boa.conf 文件中修改。如:
web 服务器 Boa 移植手册
说明:
交叉编译器版本: arm-linux-gcc 4.1.2
操作系统平台: Linux Red Hat 9.0
开发板平台: arm TX2440A
Boa版本: boa-0.94.13
手册中字体颜色的约定: 修改的代码用红色字体 添加的大段代码用蓝色字体 执行的命令用红色字体,前面加 # 在终端上打印出的信息用紫色字体 出现的错误信息用绿色字体 说明的文字用红色粗体 需要修改的文件加灰色底纹
4
} 即修改为: #if 0 if (setuid(0) != -1) { DIE(”icky Linux kernel bug!”); } #endif 5、log.c:73 unable to dup2 the error log:bad file descriptor 解决方法: 方法 1> 确定日志目录对与所有用户都具有可读/写的权限 方法 2> 修改 src/log.c (建议采用方法 1)注释掉 if (dup2(error_log, STDERR_FILENO) == -1) { DIE("unable to dup2 the error log"); } 即修改为: #if 0 if (dup2(error_log, STDERR_FILENO) == -1) { DIE("unable to dup2 the error log"); } #endif
二、修改配置文件 boa.conf
1、建立/etc/boa 目录, 并复制 boa.conf 到/etc/boa 目录下,并按照以下步骤进行修改。 2、修改访问权限:修改 User nobody 为 User 0,修改 Group nogroup 为 Group 0。 3、设定日志目录:boa 日志有两部分,Errorlog 和 AccessLog,一般情况下为/var/log/boa/error_log 和/var/log/boa/access_log 两个文件。所以根据自己的情况情况设置日志目录: ErrorLog /var/log/boa/error_log AccessLog /var/log/boa/access_log 注意:这里/var/log/boa 目录必须为可写,否则会出现错误:log.c:73 – Unable to dup2 the error log: Bad file r. 在启动脚本里将 var 挂载成 ramfs: mount –n –t ramfs ramfs /var 4. 设置 html 文件目录: DocumentRoot /var/www 5. 设置默认首页: DirectoryIndex index.html 6. 设置 cgi 脚本目录: 将 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin 修改为 ScriptAlias /cgi-bin/ /var/www/cgi-bin 这些目录可以自己修改,但是要步设置建立相关文件夹并放入文件
1、根据(第二.3 步)的设置建立/var/boa 文件夹。 2、根据(第二.4 步)的设置建立/var/www 文件夹, 并在此目录下存放 html 文件,包括 index.html 文件。 3. 根据(第二.6 步)的设置建立/var/www/cgi-bin 文件夹, 并存放一些用来测试的 cgi 脚本。
5
相关文档
最新文档