1.业界流行的嵌入式端Web服务器
在嵌入式平台中,内置Web界面通常用于设备配置、监控和控制。以下是一些流行的嵌入式平台Web界面框架:
-
uIP Web服务器框架
- 一个非常轻量级的Web服务器框架,专为嵌入式系统设计,支持小型TCP/IP协议栈。
-
ESP8266/ESP32 Web框架
- 针对ESP8266和ESP32 WiFi模块的Web框架,如ESP8266Web框架和ESPAsyncWebServer等。
-
MicroWebSrv
- 一个为嵌入式系统设计的轻量级Web服务器,支持C++编写,适用于多种平台。
-
mongoose
- 一个轻量级的网络库,提供了HTTP、WebSocket和MQTT客户端和服务器功能。
-
TASMOTA
- 一个基于ESP8266/ESP32的开源固件,提供了丰富的Web界面,用于智能家居设备。
-
WebThings Gateway
- 一个基于W3C Web of Things标准的开源框架,用于构建连接物理设备和Web应用的网关。
-
Node-RED
- 一个基于流的开发工具,用于连接硬件设备、API和在线服务,支持在嵌入式设备上运行。
-
OpenWrt/LEDE
- 一个基于Linux的开源固件项目,提供了丰富的Web界面和网络功能。
-
Contiki
- 一个开源的物联网操作系统,提供了轻量级的Web服务器实现。
-
LwIP
- 一个轻量级的TCP/IP协议栈,支持HTTP服务器功能。
-
FreeRTOS Web server
- 一个为FreeRTOS操作系统设计的Web服务器,用于创建基于Web的接口。
-
Qt for Embedded Linux
- Qt提供了跨平台的C++图形用户界面框架,也可用于嵌入式Linux设备。
-
Pimoroni's Picolipo
- 一个为树莓派Pico和其他RP2040设备设计的微型Web服务器库。
-
IoT.js
- 一个基于JavaScript的轻量级物联网平台,支持Node.js API。
-
Express.js with Node.js
- 虽然Express.js通常用于服务器端开发,但也可以在嵌入式设备上运行Node.js来创建Web接口。
-
Boa
- Boa是一个非常轻量级的 HTTP 服务器软件,最初由 Paul Phillips 为嵌入式系统和简单 web 服务而开发。它以其小尺寸、易于配置和使用而闻名,特别适合资源受限的环境,如小型微控制器或嵌入式设备。
2.Boa
2.1 Boa 的特点
- 轻量级 :Boa 非常小,通常编译后的二进制文件大小只有几十KB,非常适合资源受限的系统。
- 易于配置 :Boa 的配置文件简单,易于理解和修改,使得它在嵌入式系统中快速部署变得容易。
- 支持基本的 HTTP 功能 :Boa 支持基本的 HTTP 功能,包括 GET 和 POST 请求,以及静态文件的服务器功能。
- 安全性 :虽然 Boa 提供了基本的安全特性,但由于其简单性,它可能不适用于需要高级安全特性的应用。
- 跨平台 :Boa 可以在多种操作系统上运行,包括 Linux、Windows 和其他 Unix 系统。
- 可扩展性 :尽管 Boa 本身功能有限,但它可以通过 CGI 脚本或嵌入式 Perl 脚本进行扩展。
2.2 Boa的使用场景
- 嵌入式设备 :在智能家居设备、工业控制系统等嵌入式设备中提供 web 界面。
- 小型服务器 :在不需要复杂功能的小型服务器上提供简单的 web 服务。
- 测试和开发 :在开发和测试阶段,Boa 可以作为一个快速搭建的本地服务器。
2.3 Boa的下载,编译和安装
安装 Boa 通常涉及下载源代码,然后使用 make 命令进行编译和安装。配置 Boa 涉及编辑其配置文件,通常是一个名为 boa.conf
的文件,其中可以设置监听端口、文档根目录、CGI 脚本目录等。
2.3.1 下载boa源码
官网网址
http://www.boa.org/
当前最新版本0.94.13
2.3.2 boa源码的编译
将boa-0.94.13.tar.gz解压后,进入src目录下:
tar -xvf boa-0.94.13.tar.gz
cd ./boa-0.94.13/src/
配置我本地环境的交叉编译器
source /opt/environment-setup-cortexa53-crypto-fsl-linux
./configure
执行log:
user@user:~/soft/boa-0.94.13/src$ ./configure
....
checking for fcntl.h... yes
checking for sys/fcntl.h... yes
checking for limits.h... yes
checking for sys/time.h... yes
checking for sys/select.h... yes
checking for getopt.h... yes
checking for working const... yes
checking for uid_t in sys/types.h... (cached) {ac_cv_type_uid_t=yes}
checking for pid_t... yes
checking whether time.h and sys/time.h may both be included... yes
checking whether setvbuf arguments are reversed... configure: error: can not run test program while cross compiling
此处最后一句遇到环境检查报错,表示configure脚本在检测某些函数的行为时无法交叉编译,尝试了以下几种方法,都没有效果
# 指定交叉编译工具
./configure --host=arm-linux-gnueabihf
# 使用--disable-checking
./configure --disable-checking
# 禁用测试
CFLAGS="-DSETVBUF_ARGS_REVERSED=0" ./configure
最后只能将编译setvbuf测试这一段测试程序注释掉,暂时先配置通过
编译源代码
make
遇到以下报错:
修改代码:
打开compat.h文件
再打开boa.c文件,将以下部分注释掉
清理编译环境:
make clean
重新编译
make
又报以下错误
修改log.c
重新编译后,编译成功
user@user:~/soft/boa-0.94.13/src$ file boa
boa: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=20cb5a73822daf5e028add0b20892b31464636b3, for GNU/Linux 3.14.0, with debug_info, not stripped
2.3.3 boa部署到目标平台中
编译出来的可执行程序占用空间大小为:
-rwxrwxr-x 1 user user 320680 Nov 4 14:03 boa
如果想优化空间占用,可以去除调试信息,减小体积:
user@user:~/soft/boa-0.94.13/src$ aarch64-fsl-linux-strip boa
# 优化后占用体积
-rwxrwxr-x 1 user user 85248 Nov 4 14:21 boa
先在pc环境中准备好boa的运行环境后再传送到目标平台上,我想将整个boa运行环境放到目标平台的/opt环境下,需要做以下工作:
1.按下图修改源码defines.h中的SERVER_ROOT,然后重新编译boa可执行程序
2.准备运行环境
新创建一个boa的文件夹,组织运行环境的目录结构如下:
user@user:~/soft/boa-0.94.13/boa$ tree
.
├── boa
├── boa.conf
├── boa_indexer
├── cgi-bin
│ ├── test.c
│ └── test.cgi
├── log
│ ├── access_log
│ └── error_log
├── mime.types
└── www
├── image.PNG
└── index.html
3 directories, 10 files
将src目录下编译出来的boa和boa_indexer交叉编译出来的可执行程序直接拷贝到boa路径下
将配套修改好的boa.conf也拷贝到此路径下,修改后的boa.conf内容如下(与原版差异可以自行比较)
Port 80
User 0
Group 0
ErrorLog /opt/boa/log/error_log
AccessLog /opt/boa/log/access_log
DocumentRoot /opt/boa/www
UserDir public_html
DirectoryIndex index.html
DirectoryMaker /opt/boa/boa_indexer
KeepAliveMax 1000
KeepAliveTimeout 10
MimeTypes /opt/boa/mime.types
DefaultType text/plain
CGIPath /bin:/usr/bin:/usr/local/bin
Alias /doc /usr/doc
ScriptAlias /cgi-bin/ /opt/boa/cgi-bin/
创建cgi-bin,log和www子文件夹
在log目录下创建access_log,error_log两个log文件
在www目录下放入图片资源和index.html,index.html内容如下:
<html>
<body>
<h3>this is a test!</h3><br/>
<img src="image.PNG"/>
<h3>tree picture</h3><br/>
<a href="/cgi-bin/test.cgi">to cgi page</a>
</body>
</html>
在cgi-bin下创建test.c,交叉编译为test.cgi
// test.c文件内容
#include <stdio.h>
int main()
{
printf("Content-type:text/html\n\n"); //这句一定要加上
printf("<html><body>");
printf("<font style=\"color:red; font-size:30px;\">Hello, CGI!</font><br/>");
printf("<a href=\"/index.html\">return index.html</a>");
printf("</body></html>");
return 0;
}
我本地环境下的交叉编译过程
source /opt/environment-setup-cortexa53-crypto-fsl-linux
$CC -o test.cgi test.c
而mime.types是直接从Ubuntu环境下的/etc/mime.types拷贝过来的,demo实测没有影响
3.将组织好的运行环境通过网络拷贝到目标板的/opt目录下
4.到/opt/boa目录下手动运行boa
cd /opt/boa
./boa
到/opt/boa/log路径下查看log:
root@:/opt/boa/log# cat error_log
[28/Apr/2022:23:07:23 +0000] boa: server version Boa/0.94.13
[28/Apr/2022:23:07:23 +0000] boa: server built Nov 4 2024 at 07:44:09.
[28/Apr/2022:23:07:23 +0000] boa: starting server pid=9749, port 80
boa运行成功
5.使用浏览器访问目标板ip地址,查看内置网页成功
打开浏览器,访问我板子的ip地址
http::/172.168.7.12:80
网页成功出现,与预存图片资源一致
参考资料:
嵌入式http服务器boa 简介_嵌入式boa-CSDN博客
标签:Web,log,嵌入式,编译,选型,boa,Boa From: https://www.cnblogs.com/Wangzx000/p/18524543