alias嵌入式linux,嵌入式linux项目开发(一)——BOA移植

嵌入式linux项目开发(一)——BOA移植项目目标:使用BOA、CGIC、SQLite搭建嵌入式web服务器

一、嵌入式web服务器BOA简介在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器,能够生成动态页面,在用户端只需要通过Web浏览器就可以对嵌入式设备进行管理和监控,使用极为方便。目前嵌入式设备中所使用的web服务器主要有:boa、thttpd、mini_httpd、shttpd、lighttpd、goaheand、appweb和apache等。BOA是Paul Philips在1991年开发的开源的嵌入式web服务器,BOA功能强大,支持认证,CGI等,应用广泛,特别适合于嵌入式设备。与传统的web服务器为每个访问连接开启一个进程不同,BOA是一个单任务的web服务器,不会为多个连接开启多个任务进程。BOA对所有的活动的http连接在内部进行处理,而且只为每个CGI连接(独立的进程)开启新的进程。因此,BOA在同等硬件条件下显示出更快的速度。测试表明boa在Pentium 300MHZ下能够每秒钟处理几千次点击,在20 MHz 386/SX下能够每秒钟处理几十次点击访问。BOA与apache等高性能web服务器主要区别是,BOA是单进程的服务器,只有在完成一个用户请求后才能响应另一个用户的请求,无法并发响应,在嵌入式设备的应用场合里已经足够。BOA是一个非常小巧的Web服务器,可执行代码只有约60KB,是一个单任务Web服务器,只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求;但BOA支持CGI,能够为CGI程序fork出一个进程来执行。BOA的设计目标是速度和安全,是指不被恶意用户暗中破坏,而不是指它有很好的访问控制和通信加密。可以添加SSL来保证数据传输中的保密和安全。在其站点公布的性能测试中,BOA的性能要好于Apache服务器。BOA官方网站:www.boa.org

二、嵌入式BOA服务器编译

1、下载BOA源码从www.boa.org下载boa-0.94.13.tar.gz源码

2、生成配置文件在BOA顶层目录src下运行./configure

3、修改Makefile文件修改Makefile文件中的交叉编译工具选项CC = arm-linux-gccCPP = arm-linux-gcc–ELDFLAGS = -static

4、修改boa.c文件将boa.c文件中的一下内容注释if ( setuid ( 0 ) != - 1 ) {

DIE ( "icky Linux kernel bug!" );

}

5、修改compat.h文件#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff

修改成

#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff

6、修改config.c文件将if(!server_name){..........}内容注释,位于266-286行不注释会报错:gethostbyname:: Resource temporarily unavailable

7、修改log.c文件注释掉以下内容if (dup2(error_log, STDERR_FILENO) == -1) {DIE("unable to dup2 the error log");}不注释会报错:unable to dup2 the error log:bad file descriptor

8、编译make

9、去除调试信息arm-linux-strip boa

10、修改执行权限chmod 777 boa

三、BOA服务器配置

1、boa.conf文件解析#监听的端口Port 80#服务器绑定的IP地址,注释掉表示绑定到INADDR_ANY,适配服务器所有的IP#Listen 192.68.0.5#服务器运行的用户和组#User oUser 0#Group oGroup 0#当服务器发生问题时发送报警的email地址#ServerAdmin root@localhost#错误日志文件ErrorLog /var/log/boa/error_log#访问日志文件AccessLog /var/log/boa/access_log#是否使用本地时间。如果没注释掉,则使用本地时间。注释掉则使用UTC时间#UseLocaltime#是否记录CGI运行信息#VerboseCGILogs#服务器名字ServerNamewww.hyes.com#是否启动虚拟主机功能,即设备可以有多个网络接口,每个接口都可以拥有一个虚拟的Web服务器#VirtualHost#非常重要,HTML文档的主目录DocumentRoot /var/www#如果收到一个用户请求的话,在用户主目录后再增加的目录名UserDir public_html#HTML目录索引的文件名DirectoryIndex index.html#一个连接所允许的HTTP持续作用请求最大数目KeepAliveMax 1000#HTTP持续作用中服务器在两次请求之间等待的时间数,以秒为单位,超时将关闭连接KeepAliveTimeout 10#指明mime.types文件位置MimeTypes /etc/mime.types#文件扩展名没有或未知的话,使用的缺省MIME类型DefaultType text/plain#提供CGI程序的PATH环境变量值CGIPath /bin:/usr/bin:/usr/local/bin#为路径加上别名Alias /doc /usr/doc#指明CGI脚本的虚拟路径对应的实际路径ScriptAlias /cgi-bin/ /var/www/cgi-bin/

2、其他文件移植从linux的etc目录拷贝mime.types、passwd、group文件到开发板系统的etc目录创建web服务器HTML文档的主目录/var/www创建CGI脚本所在目录/var/www/cgi-bin/

四、BOA移植过程中错误的解决方案1、gethostbyname:: No such file or directory解决办法:修改boa.conf去掉ServerName www.your.org.here前的注释符号(#)2、util.c:100:1: error: pasting "t" and "->"does not give a valid preprocessing token make: *** [util.o]解决办法:修改src/compat.h#defineTIMEZONE_OFFSET(foo) foo##->tm_gmtoff修改成#defineTIMEZONE_OFFSET(foo) (foo)->tm_gmtoff3、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”);}#endif4、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!”);}#endif5、log.c:73 unable to dup2 the error log:bad file descriptor解决方法:修改src/log.c注释掉if(dup2(error_log, STDERR_FILENO) == -1) {DIE("unableto dup2 the error log");}即修改为:#if 0if (dup2(error_log, STDERR_FILENO) == -1) {DIE("unable to dup2 the error log");}#endif6、执行boa程序报错not found解决方法:修改MakefileLDFLAGS = -static

本文出自 “生命不息,奋斗不止” 博客,转载请与作者联系!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值