怎么在嵌入式中实现一个 web 页面?

11 天前
 kydin
背景:
需要提供一个 Web 页面给到嵌入式开发板,就是像路由器一样输 IP 进入。
开发板的 Flash 大小为 16MB ,这个大小目前暂时不可能扩大,除去系统占用留下的空间 10MB 内。
运行的是 PetaLinux 系统,这个板子的性能是够的,就是 Flash 小。

需求:
1. 显示一些系统信息:比如版本号、MAC 地址....
2. 显示我的程序的一些数据:比如我程序的 MQTT 连接状态.....
3. 提供下载系统日志/内核日志的按钮
4. 提供一个输入框来配置我的程序的配置文件:比如 MQTT 服务器端口、地址......

提问:
因为小弟之前做过 OpenWrt 相关的程序,所以目前能想到的就是用 ubus+uhttpd+luci 。
加上 c 语言使用 ubus 库对于需求的第 2 点和第 4 点实现起来非常简单,然后需求的第 3 点直接用 cgi 来做就好了。
但是目前的系统不是 OpenWrt ,同时也想尝试其它不同的技术,所以想问一下大家有没有什么建议?
4717 次点击
所在节点    程序员
46 条回复
valord577
11 天前
http server 也不用手撸 https://www.gnu.org/software/libmicrohttpd/

[捂脸笑] arm64 static releas+strip 140K
diivL
11 天前
你这点需求,socat + bash 都行.
话说楼上很多人看个标题就开始乱答了吗? 什么 lwip, Arduino 都出来了.
elechi
11 天前
最简单快速的还是 go
Mainer
11 天前
我们的做法是, 用 C++写 API, 使用 websocket 协议通信.
web 静态页面占用几百 K, 输入路由 IP 进入 web 页面后, 通过 websocket 长链接来进行调试.
leconio
11 天前
https://github.com/lexbor/lexbor
前段时间看到了这个,官方宣传是 Fast embeddable web browser engine written in C with no dependencies
KylinYou
10 天前
16MB 限制的话需要考虑 web 代码的压缩
AFOX
10 天前
cpp-httplib
bfdh
10 天前
uhttpd + cgi + html + css + jquery ,手撕前端,不要什么框架,jquery 请求 cgi ,前后端分离。
anytk
10 天前
Mongoose +1

官方有样例 https://mongoose.ws/documentation/tutorials/device-dashboard/

但是需要注意的是 GPL 授权 或商业购买。
uIPC
10 天前
你的需求空间足够了,静态打包出来的 web 页面最多几百 k 字节。
5xX4U5sUwdELgdQ3
10 天前
arduino 之前出过基于 OpenWrt 的开发板, arduino yun 和 linino, 我试玩过, MCU 和 Linux 的通信有点 tricky. 不过似乎停止维护了, 你可以看看能不能得到什么启发.

https://github.com/arduino/linino
https://docs.arduino.cc/retired/getting-started-guides/ArduinoYunLin/
BingoXuan
10 天前
PetaLinux 不是给 zynq apsoc 构建 Linux 系统的吗?直接 go 构建后用 upx 压缩,一个 gin 工程还加了 modbus 库才 8M ,加上静态文件估计 10M 绰绰有余
0xsui
10 天前
很多实现方式,
1.参考 openwrt ;
2.参考 padavan ;
3.参考 ESP8266-RTOS ,https://github.com/fdivitto/ESPWebFramework
LeeEnzo
10 天前
node.js
lsk569937453
10 天前
刚编译了一个 rust 的 web 项目,target 是 armv7-unknown-linux-gnueabihf ,strip 后的大小 6M 。
内存紧张的话就把前端编译成静态文件放到固定目录下,后端项目通过路径去访问前端静态文件就行了,golang 、rust 是肯定可以。
bjfane
10 天前
rust 看可以。编译完很小。且可以有 web 界面。
azenk
10 天前
直接用 c++的 Web 框架多好,比如 oat++,直接省去了 http server 和 html ,all in one 了。
wxf666
10 天前
几百 KB 的 BusyBox ,有内嵌一个小型服务器 httpd 呀?

可以运行 CGI 脚本,或者为 URL 后缀指定解释器(如 php )?

lkiuyu
10 天前
c++有个开源的 cpp-httplib 项目,可以试试
Jax2000
10 天前
@LeeEnzo nodejs 的 runtime 16MB 够吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1051349

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX