首页 > 其他分享 >【嵌入式Web服务器】嵌入式Web框架选型

【嵌入式Web服务器】嵌入式Web框架选型

时间:2024-11-04 16:20:05浏览次数:3  
标签:Web log 嵌入式 编译 选型 boa Boa

1.业界流行的嵌入式端Web服务器

在嵌入式平台中,内置Web界面通常用于设备配置、监控和控制。以下是一些流行的嵌入式平台Web界面框架:

  1. uIP Web服务器框架

    • 一个非常轻量级的Web服务器框架,专为嵌入式系统设计,支持小型TCP/IP协议栈。
  2. ESP8266/ESP32 Web框架

    • 针对ESP8266和ESP32 WiFi模块的Web框架,如ESP8266Web框架和ESPAsyncWebServer等。
  3. MicroWebSrv

    • 一个为嵌入式系统设计的轻量级Web服务器,支持C++编写,适用于多种平台。
  4. mongoose

    • 一个轻量级的网络库,提供了HTTP、WebSocket和MQTT客户端和服务器功能。
  5. TASMOTA

    • 一个基于ESP8266/ESP32的开源固件,提供了丰富的Web界面,用于智能家居设备。
  6. WebThings Gateway

    • 一个基于W3C Web of Things标准的开源框架,用于构建连接物理设备和Web应用的网关。
  7. Node-RED

    • 一个基于流的开发工具,用于连接硬件设备、API和在线服务,支持在嵌入式设备上运行。
  8. OpenWrt/LEDE

    • 一个基于Linux的开源固件项目,提供了丰富的Web界面和网络功能。
  9. Contiki

    • 一个开源的物联网操作系统,提供了轻量级的Web服务器实现。
  10. LwIP

    • 一个轻量级的TCP/IP协议栈,支持HTTP服务器功能。
  11. FreeRTOS Web server

    • 一个为FreeRTOS操作系统设计的Web服务器,用于创建基于Web的接口。
  12. Qt for Embedded Linux

    • Qt提供了跨平台的C++图形用户界面框架,也可用于嵌入式Linux设备。
  13. Pimoroni's Picolipo

    • 一个为树莓派Pico和其他RP2040设备设计的微型Web服务器库。
  14. IoT.js

    • 一个基于JavaScript的轻量级物联网平台,支持Node.js API。
  15. Express.js with Node.js

    • 虽然Express.js通常用于服务器端开发,但也可以在嵌入式设备上运行Node.js来创建Web接口。
  16. Boa

    • Boa是一个非常轻量级的 HTTP 服务器软件,最初由 Paul Phillips 为嵌入式系统和简单 web 服务而开发。它以其小尺寸、易于配置和使用而闻名,特别适合资源受限的环境,如小型微控制器或嵌入式设备。

2.Boa

2.1 Boa 的特点

  1. 轻量级 :Boa 非常小,通常编译后的二进制文件大小只有几十KB,非常适合资源受限的系统。
  2. 易于配置 :Boa 的配置文件简单,易于理解和修改,使得它在嵌入式系统中快速部署变得容易。
  3. 支持基本的 HTTP 功能 :Boa 支持基本的 HTTP 功能,包括 GET 和 POST 请求,以及静态文件的服务器功能。
  4. 安全性 :虽然 Boa 提供了基本的安全特性,但由于其简单性,它可能不适用于需要高级安全特性的应用。
  5. 跨平台 :Boa 可以在多种操作系统上运行,包括 Linux、Windows 和其他 Unix 系统。
  6. 可扩展性 :尽管 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/

image

当前最新版本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测试这一段测试程序注释掉,暂时先配置通过

image

image

编译源代码

make

遇到以下报错:

image

修改代码:

打开compat.h文件

image

再打开boa.c文件,将以下部分注释掉

image

清理编译环境:

make clean

重新编译

make

又报以下错误

image

修改log.c

image

重新编译后,编译成功

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可执行程序

image

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

网页成功出现,与预存图片资源一致

image

参考资料:

嵌入式http服务器boa 简介_嵌入式boa-CSDN博客

boa交叉编译(移植到arm)-CSDN博客

标签:Web,log,嵌入式,编译,选型,boa,Boa
From: https://www.cnblogs.com/Wangzx000/p/18524543

相关文章