Boa Web服务器在S3C2410上移植
- 格式:doc
- 大小:71.00 KB
- 文档页数:10
摘要论文主要介绍了基于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服务器的移植——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两个文件。
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,到现在为止没有遇到过是么问题。
嵌入式Linux中的Web服务器应用Boa是一个非常小巧的Web服务器,其可执行代码只有60K左右。
它是一个单任务的Web服务器,只能依次完成用户的请求,而不会fork出新的进程处理并发连接请求。
但boa 支持cgi,能够为cgi程序fork出一个进程来执行。
Boa的设计目标是速度和安全,在其站点公布的性能测试中,boa的性能要好于apache服务器。
随着网络技术的迅猛发展,在嵌入式设备的管理和交互中,基于Web方式的应用成为目前的主流,用户可以直接通过远程登录的方式对设备进行管理和维护,大大方便了使用性。
下面就为大家讲解一下boa服务器在嵌入式Linux系统中的移植过程。
一、BOA服务器移植工具链:gcc version 4.3.2 (crosstool-NG-1.8.1-none)平台:处理器:s3c2410 内核:linux-2.6.351.解压源码tar xvf boa-0.94.13.tar.tarcd boa-0.94.132.进入src/./configure 生成Makefile修改Makefile修改CC =gcc 为CC =arm-none-linux-gnueabi-gcc修改CPP =gcc -E 为CPP =arm-none-linux-gnueabi-gcc -E3.make编译编译一个linux下的c系统,包含词法和语法分析模块,Linux上用bison和flex。
yacc是一个文法分析器的生成器,bison即是yacc的GNU版本.Lex和YACC是用于构造词法分析机和语法解释器的工具,利用Lex和Y ACC你可以轻松的构造一个语法解释器。
Apt-get install bison flex执行make然后给boa瘦身Arm-none-linux-gnueabi-strip boa二、Boa服务器配置1、创建目录mkdir /source/rootfs/etc/boa2、将boa源码目录下的boa.conf拷贝到/source/rootfs/etc/boa目录下cp boa.conf /source/rootfs/etc/boa3、修改配置文件boa.confvim /source/rootfs/etc/boa(1)Group的修改修改Group nogroup为Group 0(2)user的修改修改User nobody为User 0(3)ScriptAlias的修改修改ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/为ScriptAlias /cgi-bin/ /www/cgi-bin/(5)DocumentRoot的修改修改DocumentRoot /var/www为DocumentRoot /www(6)ServerName的设置修改#ServerName .here为ServerName .here否则会出现错误“gethostbyname::No such file or directory”(7)AccessLog修改修改AccessLog /var/log/boa/access_log为#AccessLog /var/log/boa/access_log(8)以下配置和boa.conf的配置有关,都是在ARM根文件系统中创建以下步骤在开发板上进行:创建HTML文档的主目录/wwwmkdir /www创建CGI脚本所在录/www/cgi-binmkdir /www/cgi-bin当不能使用cgi 时将#AddType application/x-httpd-cgi cgi改为AddType application/x-httpd-cgi cgiboa器测试将boa拷贝到开发板根文件系统的/etc/boa下#cp src/boa /source/rootfs/etc/boa将ubuntu下/etc/mime.types拷贝到开发板根文件系统的/etc下#cp /etc/mime.types /source/rootfs/etc将你的主页index.html拷贝到www目录下运行boa,然后在主机游览器输入开发板网址[root@farsight boa]# ./boa[30/10/2011:19:10:36 +0000] [root@farsight boa]# boa: server version Boa/0.94.13[30/10/2011:19:10:36 +0000] boa: server built 10 30 2011 at 19:10:36[30/10/2011:19:10:36 +0000] boa: starting server pid=968, port 80附1):boa配置文件参数说明boa的配置文件是/etc/boa/boa.conf。
linux2.6.22.1 的在s3c2410板子上的移植20XX年11月05日星期一下午08:12linux2.6.22.1 的在s3c2410板子上的移植----------------------------------------------bootloader编译环境:vivi版本:0.1.4交叉编译器(CROSS-PILE)版本:2.95.3(下载地址略:网上很多搜下。
)操作系统:redhat server 5======================================linux内核编译环境:内核版本:linux2.6.22.2交叉编译器:自己做的适合Linux2.6.22.2版本的交叉编译器操作系统:redhat server 5======================================文件系统编译环境:busybox1.5.1,或1.4.2交叉编译器(CROSS-PILE)版本:同上操作系统:redhat server 5----------------------------------------------硬件:自己做的2410开发板内存:64MB SDRAM(2×16M×16位);CPU:S3C2410 ARM处理器,Nor Flash:2MB的Nor Flash,用于固化测试程序(用来下载bootloader,内核,或文件系统);NANDflash: 64MB的Nand Flash,用于存储Bootloader、Linux内核及文件系统、应用程序和数据;++++++++++++++++++++++++++++++++++++++++++++++====================================================================== ============================一:编译环境搭建====================================================================== ============================一:搭建交叉编译环境说明:由于编译交叉编译环境比较繁琐,建议大家用已经编译好的交叉编译环境。
文档来源为 :从网络收集整理.word 版本可编辑 .欢迎下载支持.基于 TX2440A 开发板的boa 移植心得弄了几天,终于弄出来了!心里还是很美的,高手不要笑话,我是菜鸟,所以小小的boa 移植成功也会开心,好了,言归正传。
一、准备制作创建根文件系统目录,主要包括以下目录 :/bin 、/etc、/dev、/home、 /lib、 /mnt、/opt、 /proc、/root 、/sbin、 /sys、/tmp、/usr、 /var。
建一个名为 root_ 的文件夹#mkdir root_在该文件夹下创建上述目录#mkdir bin etc dev⋯⋯⋯⋯⋯在 /mnt目录下创建以下文件夹,用来挂载 NFS,SD卡和 U盘:nfs、 sd、udisk1、 udisk2、 udisk3、udisk4二、编译 busybox获取,在 / 找到 busybox-压缩包,下载,解压:#tar xjvf busybox-1.15.2进入源码目录,修改Makefile 第164行:CROSS_COMPILE = arm-linux-第 190行:ARCH = arm执行 #make menuconfig 进行配置 busybox配置选项大部分都是保持默认的,只需要注意选择以下这几个选项,其他的选项都不用动:Busybox Setting --->Build Options --->[*]Build Busybox as a static binary(no shared libs)[*]Build with Large File Support (for accessing files > 2GB)Installation Options --->(./_install) Busybox installation prefix <—进入这个选项,输入 busybox的安装路径,如: ../rootfsBusybox Library Tuning --->[*]vi-style line editing commands[*]Fancy shell prompts <—要选择这个选项 : “Fancy shell prompts ”,否则挂载文件系统后,无法正常显示命令提示符:“[\u@\h \W]# ”配置完后,执行 #make make install,然后就会在上一级目录下生成rootfs文件夹,里面包含几个文件夹 /bin、 /sbin、 /usr、linuxrc 。
准备工作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”,所以必须打开。
其它默认设置即可。
此外,还需要将mime.types文件复制根文件系统/etc目录下,通常可以从linux主机的/etc目录下直接复制即可。
#cp /etc/mime.types etc/(以下配置和boa.conf的配置有关,都是在ARM根文件系统中创建)创建日志文件所在目录/var/log/boa创建HTML文档的主目录/var/www创建CGI脚本所在录/var/www/cgi-bin#mkdir -m 777 boa#cd ..#mkdir -m 777 www#mkdir -m 777 www/cgi-bin#cd ..将主机/usr/share/doc/HTML/目录下的index.html(这个是静态的html网页显示文件,是redhat9的欢迎主页,当在局域网的PC的IE上输入http://嵌入式板子的IP地址时会显示这个默认的静态网页)文件和img目录复制到根文件系统的/var/www目录下# cp /usr/share/doc/HTML/index.html /var/www/# cp /usr/share/doc/HTML/img /var/www/将修改后的文件系统下载到ARM板(也可以用nfs启动)运行Boa开发板操作:#boa出错,后来发现etc目录下原来复制进来的文件不见了,后来发现可能是因为系统启动时将文件挂载在这个文件夹,之前存在的文件都被这些命令删除了。
后来我在根文件系统的根目录创建了一个新目录www#mkdir www将etc下的boa文件夹和mime.types文件复制到www, 在系统启动linuxrc脚本中,执行完加载的后面添加一条命令将保存在www中的文件复制到etc目录,即添加/bin/cp –r /www/* /etc重新下载根文件系统到开发板后,执行命令boa#boa出错,超级终端显示:log.c:73 unable to dup2 the error log:bad file descriptor解决方法:在log.c里注释掉那个if语句。
修改后重新执行make等命令,继续上述操作又出现了另个问题:unable to dup2 the error log: Bad file descriptor因为我的文件系统是cramfs,只读的解决方法:在boa.conf里注释掉#AccessLog /var/log/boa/access_log完成配置后,继续执行命令#boa成功,终端显示:boa: server version Boa/0.94.13boa: server built Mar 11 2009 at 20:40:11boa: starting server pid=765, port 80因为我的主机IP为169.254.42.223,接下来设置开发板IP#ifconfig eth0 169.254.42.220连接PC和ARM网络接口,在浏览器中输入输入开发板的IP地址,即http://169.254.42.220,出现是redhat9的欢迎主页,静态网页调试成功CGI功能测试编写hellocgi.c程序#vi hellocgi.c程序如下:交叉编译CGI程序# /usr/local/arm/2.95.3/bin/arm-linux-gcc -o hellocgi hellocgi.c将hellocgi拷贝至嵌入式板子的/var/www/cgi-bin/下,当在局域网PC的IE上输入http://169.254.42.220/cgi-bin/hellocgi显示出hellocgi的网页。
网页出现Hello,world. 移植成功!本次移植的主要参考:/u1/34474/showart.php?id=486604在这里衷心的感谢作者!/u1/34474/showart.php?id=486604内容移植Boa Web服务器到ARM-Linux系统本次移植的主要参考资料:1、《嵌入式Web服务器移植》是网上一份Boa移植文档,比较全面。
本文档就是基本参照它来写的。
基本上上可以说是这篇文章的修改版,增加了我的移植经验。
由于这篇文章被转载得到处都是,我实在无法找到出处。
在这里衷心的感谢文章作者!!2、《构建嵌入式Linux系统》的第十章设置网络服务中的Boa移植部分。
Boa程序的移植1、下载Boa源码下载地址: /目前最新发行版本:0.94.13 (几年没更新版本了)下载boa-0.94.13.tar.gz,注意:若从boa上下载的是boa-0.94.13.tar.tar,解压方式一样解压:ekkamanninja@Tekkaman-Ninja source]$tar xzf boa-0.94.13.tar.gz生成Makefile文件进入boa-0.94.13,直接运行src/configure文件ekkamanninja@Tekkaman-Ninja src]$./configure改Makefile文件(注意:必须用cross-2.95.3, 如使用3.4.1、4.1.1等等会出错)CC =/home/tekkamanninja/working/source/2.95.3/bin/arm-linux-gccCPP =/home/tekkamanninja/working/source/2.95.3/bin/arm-linux-gcc –E交叉编译tekkamanninja@Tekkaman-Ninja src]$ make去除调试信息,减小体积。
(可选)[tekkamanninja@Tekkaman-Ninjasrc]$/home/tekkamanninja/working/source/2.95.3/bin/arm-linux-strip boa6、将编译好的程序放入根文件系统的/bin目录下。
[tekkamanninja@Tekkaman-Ninja src]$ cp boa/home/tekkamanninja/working/nfs/rootfs/bin/配置BoaBoa需要在/etc目录下建立一个boa目录,里面放入Boa的主要配置文件boa.conf。
在Boa 源码目录下已有一个示例boa.conf,可以在其基础上进行修改。
[tekkamanninja@Tekkaman-Ninja src]$ cd ../..[tekkamanninja@Tekkaman-Ninja source]$ cd ../nfs/rootfs/etc/ [tekkamanninja@Tekkaman-Ninja etc]$ mkdir boa[tekkamanninja@Tekkaman-Ninja etc]$ chmod 777 boa/[tekkamanninja@Tekkaman-Ninja etc]$ cd boa[tekkamanninja@Tekkaman-Ninja boa]$ kwrite boa.conf1、Group的修改修改Group nogroup为Group user(开发板上有的组)修改User nobody为User boa(user组中的一个成员)根据你的开发板的情况设定。
一定要存在的组和用户。
以下是我在开发板上的操作:[root@~]#adduser -g user boaChanging password for boaEnter the new password (minimum of 5, maximum of 8 characters)Please use a combination of upper and lower case letters and numbers. Enter new password:Bad password: too short.Warning: weak password (continuing).Re-enter new password:passwd[820]: password for `boa' changed by user `root'Password changed.[root@~]#2、ScriptAlias的修改修改ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/为ScriptAlias /cgi-bin/ /var/www/cgi-bin/这是在设置CGI的目录,你也可以设置成别的目录。