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

187 天前
 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 ,同时也想尝试其它不同的技术,所以想问一下大家有没有什么建议?
5378 次点击
所在节点    程序员
46 条回复
cssk
187 天前
lwIP ?
villivateur
187 天前
找找 Arduino 的 WEB 库吧,多得很
kydin
187 天前
@villivateur 请问是讲 Arduino 的库放在 Linux 中跑吗
keep1234
187 天前
esp8266 AP 配置页面就是 web 页面,可以参考一下
wyqn
187 天前
boa ,appweb ,goahead 等服务器+cgi
villivateur
187 天前
@kydin 你是 Linux 的设备? 16MB 我觉得要不还是找个裸机或者 RTOS 开发方案吧,还能省不少空间
villivateur
187 天前
@villivateur 艹,我眼瞎,刚看到 PetaLinux
guanzhangzhang
187 天前
lwIP 很轻量
emartcn
187 天前
用 golang 的 embed 功能,前后端一体。
yplam
187 天前
golang 然后用 upx 压一下应该可以到 1MB ,还要更小的话就用 Rust ,都支持 embed 前端资源
Alexsen
187 天前
lwip 应该能用
suyuyu
187 天前
前后端分离 (
dezou
187 天前
Mongoose
masterclock
187 天前
golang 几乎不可能到 1MB 以下吧?随便引用点库,几乎都到 13M 了,upx 压缩后超 7M
valord577
187 天前
https://docs.gtk.org/gio/class.ThreadedSocketService.html

这个不知道适不适合你 但是 glib 静态库 + 一个.c main 打包 release + strip 后也有 3.5M

如果很在意大小的话 建议参考 gio 的代码 手撸一个 tcp server 吧
valord577
187 天前
处理 http request 报文 可以用 nodejs 的库 基于事件处理的

https://github.com/nodejs/llhttp

如果是 respone 报文 直接 sprintf 拼一下就行
masterclock
187 天前
我们的做法是做一个 SPA ,比如用 React ,出来的结果几百 K
用 c++等做 API ,出来结果也是几百 K
1zh3n
187 天前
Rust 也够呛,不上框架也许可以。上个框架随随便便就 10M+ 了
valord577
187 天前
17 楼的办法 也是可行的 前后端分离

如果页面比较多 需要炫酷的前端特效 **方案比我的靠谱**

手撸一个 spa 类似 nginx try_files 的 web server 也不是很难 :P
chenxuuu
187 天前
这种简单功能,手写个 http server 得了,本身 http 协议也不复杂
主要逻辑功能都用前端来轮询,静态网页文件+几个接口完事

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

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

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

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

© 2021 V2EX