1. LuCI 是什么
LuCI 是 OpenWrt 的 Web UI 框架,核心特点:
-
基于 Lua + uhttpd + ubus/uci
-
配置驱动(不直接改文件,而是改 UCI)
-
轻耦合,可插插件(package)
2. 整体架构图

3. 核心组成
| 层级 | 角色 | 常见内容 |
|---|---|---|
| uhttpd | HTTP入口 | /etc/config/uhttpd |
| Lua/dispatcher | URL Router → Controller | /usr/lib/lua/luci/dispatcher.lua |
| Controller | 处理请求 & 调 UCI/ubus | /usr/lib/lua/luci/controller/... |
| Model | 读取/写 UCI / RPCD | /usr/lib/lua/luci/model/... |
| View | 渲染 HTML | /usr/lib/lua/luci/view/... |
| UCI | 持久配置数据 | /etc/config/... |
| ubus/rpcd | API层与系统交互 | wifi, firewall, system |
4. 请求处理流程(以"保存 Wi-Fi 配置"为例)
(1) 浏览器点击 "保存" → POST
(2) uhttpd 转发给 LuCI dispatcher
(3) Dispatcher 找到对应 Controller
(4) Controller 调用 Model 写 UCI: wifi.ssid="MyAP"
(5) 提交 UCI → uci commit wireless
(6) Controller 触发系统动作 (ubus call hostapd reload)
(7) 返回 JSON / HTML 页面
特点:所有配置不直接改文件,而走 UCI + commit
5. 配置持久化机制
-
Edit = uci set
-
Save & Apply = uci commit + reload/restart
-
改写的是 /etc/config/* 文件(统一入口,便于 scripts/CLI/GUI 同源)
6. 插件扩展机制(如何增加一个页面)
添加新功能一般需要三件:
/usr/lib/lua/luci/controller/myapp.lua ← 路由 + 控制逻辑
/usr/lib/lua/luci/model/cbi/myapp/*.lua ← 调UCI的模型文件
/usr/lib/lua/luci/view/myapp/*.htm ← 页面模板
注册路由后重启 uhttpd/LuCI 即可显示 UI 模块。
7. 为什么 LuCI 适合路由器/嵌入式
-
运行在低 RAM/Flash 上(Lua轻量)
-
统一系统配置模型 (UCI)
-
面向 RPC(可与 CLI/scripts/daemon 无缝协同)
-
插件化结构适配 ODM/OEM 场景