一、项目环境介绍:
1、Ubuntu 12.04 发行版
2、GCC 交叉编译工具链(版本 4.5.1)
3、U-boot-2010.03
4、FS4412 开发板(ARM Cortex-A9 内核)
5、FS_11C14 开发板(ARM Cortex-M0 内核)
二、本节目的:
1、了解嵌入式 Web 服务器 BOA
2、了解 CGI 脚本
3、掌握 BOA 交叉编译和移植
4、掌握 SQLite3 的移植
5、源文件下载地址:
三、BOA 介绍(参见 Linux 系统移植):
BOA 是一款单任务的 HTTP 服务器
通过建立 HTTP 请求列表来处理多路 HTTP 连接请求
只为 CGI 程序创建新的进程,最大程度上节省了系统资源
具有自动生成目录、自动解压文件等功能
结合源代码了解更多功能
四、BOA 工作流程(参见 Linux 系统移植):
修正 BOA服务器的根目录
读配置文件(boa.conf)
写日志文件
初始化 Web 服务器
当有客户端连接请求到达时,Web 服务器负责接收客户端请求,并保存相关请求信息
接收客户端请求后,Web 服务器分析客户端请求并做出相应的处理
处理完客户请求后,向客户端发送响应信息,最后关闭与客户端的 TCP 连接
五、BOA 移植:
1、安装词法和语法分析模块 bison 和 flex
sudo apt-get install bison flex
2、将源码 boa-0.94.13.tar 复制到相应目录并解压
本项目文件均在: ~/Documents/WarehouseSystem
3、配置 BOA
执行 configure 命令生成 Makefile
./configure
Makefile 修改
![](https://i-blog.csdnimg.cn/blog_migrate/67c28463cba9e6f0721038a564421ec8.png)
为
![](https://i-blog.csdnimg.cn/blog_migrate/e1645c5f8ba5c3b4254fdf63d2d6ae4d.png)
compat.h 修改
![](https://i-blog.csdnimg.cn/blog_migrate/556b88d94d2ac77c9d2633224f6bab99.png)
为
![](https://i-blog.csdnimg.cn/blog_migrate/5d38da3041796387bd821aba66ad3648.png)
boa.c 注释掉下面两段
![](https://i-blog.csdnimg.cn/blog_migrate/a05c8e2e497925099ee75d886ab2881d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/61f503427c34d0d6ade381b0e0f4c7d4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2a0da4c3ec975067000cbe19374b7668.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4328ebd6f664115ef615eb3eeda13900.png)
make 编译源文件
make
修改配置文件 boa.conf
![](https://i-blog.csdnimg.cn/blog_migrate/24cf016ec31a31a1738422047ba2f828.png)
为
![](https://i-blog.csdnimg.cn/blog_migrate/b318e263710c1273ffac36c2b75c6e4c.png)
创建 boa 目录
mkdir /source/rootfs/etc/boa
拷贝 boa 和 boa.conf 到 boa 目录
cp ./boa ../boa.config /source/rootfs/etc/boa
在 rootfs 下创建 HTML 文档的主目录
mkdir /source/rootfs/www
拷贝
HTML 里内容
到 www 目录用于测试
cp -r images pice *.html /source/rootfs/www
创建日志文件
mkdir /source/rootfs/var/log
mkdir /source/rootfs/var/log/boa
touch /source/rootfs/var/log/boa/error_log
touch /source/rootfs/var/log/boa/access_log
创建 CGI 脚本目录
mkdir /source/rootfs/www/cgi-bin
拷贝 mime.types 到 rootfs/etc 下
sudo cp /etc/mime.types /source/rootfs/etc/
4、终端测试 BOA 服务器
启动开发板进入 /etc/boa 目录执行 boa 程序
./boa
查看进程
ps | grep './boa'
![](https://i-blog.csdnimg.cn/blog_migrate/6893c8d031a6b840453d219ae28fb6b3.png)
查看错误日志内容如下则启动正常
cat /var/log/boa/error_log
![](https://i-blog.csdnimg.cn/blog_migrate/bc61e00e4e1aa9dc4328f6cac110f2ae.png)
进入主机在输入如下命令出现如下界面则 BOA 移植成功
firefox 192.168.1.5
![](https://i-blog.csdnimg.cn/blog_migrate/dffecf2791f094f4ac102090f4161bca.png)
六、CGI 脚本测试:
1、新建 CGI 测试 C 文件
vim hello.c
2、编写 CGI 测试代码
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
printf("Content-type: text/html\n\n");
printf("<html>\n");
printf("<head><title>CGI Output</title></head>\n");
printf("<body>\n");
printf("<h1>Hello, world.</h1>\n");
printf("<body>\n");
printf("</html>\n");
return 0;
}
3、编译生成 CGI 测试程序并拷贝到开发板根文件系统
arm-none-linux-gcc -o hello.cgi hello.c
cp hello.cgi /source/rootfs/www/cgi-bin
4、打开开发板并运行 ./boa
5、进入主机在输入如下命令出现如下界面则测试成功
firefox 192.168.1.5/cgi-bin/hello.cgi
![](https://i-blog.csdnimg.cn/blog_migrate/e5415cb426d25b2e21ad23434a68f1c2.png)
七、SQLite3 移植:
1、将源码 sqlite-amalgamation-3.7.3.tar.gz 复制到相应目录并解压
本项目文件均在: ~/Documents/WarehouseSystem
2、创建存放编译生成文件的目录
mkdir ~/Documents/WarehouseSystem/sqlite3_arm
3、配置交叉编译和安装参数
cd sqlite-3.7.3
./configure --host=arm-none-linux-gnueabi --prefix=/home/wf/Documents/WarehouseSystem/sqlite3_arm
![](https://i-blog.csdnimg.cn/blog_migrate/23b425540209862932dfff0cf890c337.png)
4、修改 Makefile
![](https://i-blog.csdnimg.cn/blog_migrate/100533847c1c1b8428b75ef39db17fbe.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cfa4af8131c62f2e6cea90b5086efa8b.png)
5、交叉编译和安装
make clean; make; make install
6、将 sqlite3 拷贝到开发板根文件系统
cp ./sqlite3_arm/bin/sqlite3 /source/rootfs/usr/bin
7、将库文件拷贝到开发板根文件系统并创建软链接
mkdir /source/rootfs/usr/lib
cp ./sqlite3_arm/lib/libsqlite3.so.0.8.6 source/rootfs/usr/lib
ln -s libsqlite3.so.0.8.6 libsqlite3.so.0
8、测试 sqlite3
打开开发板并执行如下命令
sqlite3 test.db
create table stu(id, name);
insert into stu values(11, 'wenfei6316');
select * from stu;
.q
结果如下图所示,则 SQLite3 移植完成
![](https://i-blog.csdnimg.cn/blog_migrate/07d0b29bca24177e7523fc233218f61e.png)