在嵌入式linux下搭建Boa Webserver

2019-07-12 16:20发布

背景:
1、嵌入式Web的应用。在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的C/S结构,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器,能够生成动态页面,在用户端只需要通过Web浏览器就可以对嵌入式设备进行管理和监控,非常方便实用。
2、嵌入式服务器的选择。由于嵌入式设备资源一般都比较有限,并且也不需要能同时处理很多用户的请求,因此不会使用Linux下最常用的如Apache等服务器,而需要使用一些专门为嵌入式设备设计的Web服务器,这些Web服务器在存贮空间和运行时所占有的内存空间上都会非常适合于嵌入式应用场合。常见的嵌入式Web服务器主要有:lighttpd、thttpd、shttpd和BOA等。
3、Boa是一个非常小巧的web服务器,其可执行代码只有约60Kb,它是一个单任务的服务器,只能依次完成用户的请求,而不会fork出新的进程处理并发的连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行,Boa设计目标是速度与安全。
硬件环境:SBC-S2416单板机 软件环境: 1、PC端:win7下VirtualBox虚拟机+xubuntu系统。具备基本的GCC编译环境,能够执行configure产生Makefile;系统中已搭建好交叉编译环境。 相比于普通的PC机,嵌入式的硬件资源相当的有限,不可能进行本地的开发。因而,嵌入式的软件开发和调试过程通常是在PC机上实现的。这样就形成了一套在PC机上交叉编译,然后生成目标机平台的格式,最后在目标机上执行的开发流程,也就是所谓的交叉编译环境。 2、移植嵌入式Linux系统到开发板上。 Boa搭建过程:
1、下载boa-0.94.13.tar,执行tar解压命令 2、在解压后的src目录下,执行./configure生成MakeFile 3、MakeFile中31、32行,路径改成交叉编译路径。 CC = /usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-gcc 
CPP = /usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-gcc -E
4、执行Make编译命令,生成可执行文件boa,可以用file boa查看。
出现的错误: (1)提示:make: yacc: 命令未找到                make: *** [y.tab.c] 错误127 原因:没有安装yacc 解决方法:执行apt-get install bison命令(可能需要管理员权限sudo)。或者下载byacc-1.9.tar.gz,编译生成yacc,拷贝到/usr/local/bin/下。 (2)提示:make: lex: 命令未找到                   make: *** [lex.yy.c] 错误 127 原因:没有安装lex程序 解决方法:执行apt-get install flex命令。或者下载flex-2.5.37.tar.gz,编译生成flex,然后改名为lex,将lex拷贝到 /usr/local/bin/下。 (3)提示:make ***[util.0] 错误1 解决方法:编辑src下的compat.h文件,大概120行处的 #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff 改为 #define TIMEZONE_OFFSET(foo) foo->tm_gmtoff (4)提示: 解决方法:编辑src下的boa.c文件,注释掉225-227行 #if 0         if (setuid(0) != -1) {             DIE("icky Linux kernel bug!");         } #endif
5、将boa拷贝到目标板的/bin下。(etc/boa下?) 6、配置。参考链接。修改boa-0.94.13文件夹下的boa.conf,放入etc/boa下(此目录在src下difines.h文件中指定#define SERVER_ROOT "/etc/boa"),常见参数: Port端口 User(48行)默认nobody,改为root? Group(49行)默认nogroup,改为root? ErrorLog(62行)默认/var/log/boa/error_log,需要手动建立/var/log/boa目录 AccessLog(74行)默认/var/log/boa/access_log,需要手动建立/var/log/boa目录 (94行)ServerName www.your.org.here前注解#去掉 ?
DocumentRoot(111行)默认/var/www,需手动建立目录
DirectoryIndex(123行)默认index.html
MimeTypes(155行)默认/etc/mime.types,需将虚拟机中该文件拷贝至目标机相同路径下
ScriptAlias(193行)默认/cgi-bin/ /usr/lib/cgi-bin/,需手动建立目录,本文中修改至/var/www/cgi-bin
7、程序运行。(如果boa搭建在虚拟机中,即非交叉编译,本文中要在目标板上搭建,执行$ ./boa -c `pwd`-c表示指定boa.conf的路径,默认的路径是/etc/boa/,`pwd`得到的是当前路径。参见链接。) 目标机执行 boa& 8、相关命令。 fdisk -l 显示挂载的存储设备,本文用来找U盘 mount /dev/‘U盘名’ /mnt 复制U盘内容到mnt cp ‘文件’ ‘路径’ 复制 ifconfig -a 查看网络信息,IP、MAC等 mv ’文件’ ‘路径’ 移动文件,本文用来重命名

后记:想继续探索的问题:1、需要管理员权限的命令,前面加sudo后,输入密码可执行。Linux的用户名和用户组权限是怎么回事。