当前位置: 代码迷 >> 综合 >> uClinux 中 boa web server的配置
  详细解决方案

uClinux 中 boa web server的配置

热度:3   发布时间:2024-01-21 13:32:28.0

uClinux中boa web server的配置

作者:wzc0066
来源:www.mcuos.com
正文:


一、环境准备

编译环境: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/boa

2.2、编辑配置文件uClinux-dist/user/boa/examples/boa.conf,如下
Port 80
User 0
Group 0
DocumentRoot /var/www
UserDir public_html
DirectoryIndex index.html
KeepAliveMax 1000
KeepAliveTimeout 10
DefaultType text/html
AddType application/x-httpd-cgi cgi
ScriptAlias /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/PHILIPS/lpc2200/Makefile)进行;
如果配置文件boa.conf的位置不正确,则会得到形如“Authentication password file for /cgi-bin/ not found!”之类的错误!

三、调试

1、如果现在运行boa & (或者运行boa -c /var/www &,但我们已指定DocumentRoot/var/www,所以运行外面的命令就行),会得到错误信息“kmod: failed to exec /sbin/modprobe -s -knet-pf-1, errno = 2”,此时boa web server还不可用!

2、增加编译Kernel/Library/Defaults Selection -> Customize Vendor/User Settings-> BusyBox -> modprobe并重新编译,此时运行boa &又会得到如下错误信息:

__alloc_pages: 6-order allocation failed (gfp=0x1f0/0)
Allocation of length 164704 from process 193 failed
Buffer memory:       52kB
Cache memory:     1076kB
Free pages:         876kB (     0kB HighMem)
ZoneMA freepages:     0kB
Zone:Normal freepages:   876kB
Zone: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 12
kmod: 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 failed
Buffer memory:       52kB
Cache memory:     1076kB
Free pages:         700kB (     0kB HighMem)
ZoneMA freepages:     0kB
Zone:Normal freepages:   700kB
Zone: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 12
munmap of non-mmaped memory by process 195 (insmod): 817fb000
munmap of non-mmaped memory by process 195 (insmod): 815863a0
Unhandled fault: external abort on linefetch (F4) at 0x00000001
fault-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 sockets并从新编译,则boa webserver再启动时除了一个pid外,没任何多余的信息了!(此选项到底有什么作用,我还是不知道!)

四、其它说明

1、我的uclinux的大部分配置都是“默认”的,但这里的“默认”可能是已被硬件厂商修改过的(我用的uClinux-dist-20040408.tar.gz是附带光盘里面的)!

2、web测试时,html文件应放在/var/www目录下,cgi程序应放在/var/www/cgi-bin目录下,这些在配置文件中都写的很明确!

3、也可以通过nfs进行web测试(这样会免去多次烧写的麻烦),nfs的配置详见http://wzc0066.blog.hexun.com/6582493_d.html中的第一点。

五、现存问题

现在cgi、javascript、图片浏览等测试都良好!但在测mp3的时候,还不行,原因可能是还不支持大文件!

我看网上说uclinux好像默认每次分配的最大内存是128K,所以要是运行大于128K的文件就会出错,不知是不是这样!

我还看到一条信息说选择Kernel hacking中的一项配置后就可支持大文件了,但我现在的2.4.x内核中没找到网上说的那一项!

现在点击一mp3文件(二点几M大小)的链接时终端出现的错误信息为:
Allocation of length 2502723 from process 24 failed
Buffer memory:       56kB
Cache memory:     2744kB
Free pages:        2420kB (     0kB HighMem)
ZoneMA freepages:     0kB
Zone:Normal freepages:  2420kB
Zone: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, 选中即可!

TOP

  相关解决方案