Lua作为一门方便嵌入(其它应用程序)并可扩展的轻量级脚本语言来设计的, 因此, 他一直遵从着简单, 小巧, 可移植, 快速的原则, 官方实现完全采用ANSI C编写, 能以C程序库的形式嵌入到宿主程序中. Lua的每个版本都保持着开放源码的传统, 不过各版采用的许可协议并不相同, 自5.0版(最新版是5.1)开始她采用的是著名的MIT许可协议(与三条款BSD许可证内容颇为近似, 使用者可以"为所欲为"). 正由于上述特点, 所以Lua在游戏开发, 机器人控制, 分布式应用, 图像处理, 生物信息学等各种各样的领域中得到了越来越广泛的应用.
Luci是Lua Configuration Interface的简称, 意在OpenWrt整个系统的配置集中化. 详见链接: http://wiki.openwrt.org/doc/uci.
uhttpd是一个简单的web服务器程序, 主要就是cgi的处理, openwrt是利用uhttpd作为web服务器, 实现客户端web页面配置功能. 对于request处理方式, 采用的是cgi, 而所用的cgi程序就是LuCI.
在web server中的cgi-bin目录下, 运行luci文件(权限一般是755), luci的代码如下:
#!/usr/bin/lua --cgi的执行命令的路径
require"luci.cacheloader" --导入cacheloader包
require"luci.sgi.cgi" --导入sgi.cgi包
luci.dispatcher.indexcache = "/tmp/luci-indexcache" --cache缓存路径地址
luci.sgi.cgi.run() --执行run,此方法位于*/luci/sgi/cgi.lua中
a. 登陆 输入: http://x.x.x.x/ 登录LuCI.
Calling /www/cgi-bin/luci.
b. 进入主菜单status
输入: http://x.x.x.x/cgi-bin/luci/admin/status/ 即可访问status页面, Luci则会calling /luci/admin/status.lua
脚本:
module("luci.controller.admin.status", package.seeall)
/usr/lib/lua/luci/controller/admin/status.lua->index()
模块入口文件status.lua在目录lua\luci\controller\admin下在index()函数中, 使用entry函数来完成每个模块函数的注册:
entry(path, target, title=nil, order=nil)
第一个参数是定义菜单的显示(Virtual path).
第二个参数定义相应的处理方式(target).
alias是指向别的entry的别名, from调用的某一个view, cbi调用某一个model, call直接调用函数.
第三个参数是菜单的文本, _(“string”), 国际化.
第四个参数是是同级菜单下, 此菜单项的位置, 从大到小.
template用来调用已有的htm模板, 模板目录在lua\luci\view目录下, 即语句entry({"admin","status","overview"},template("admin_status/index"),_("Overview"), 1)调用lua\luci\view\admin_status\index.htm文件来显示.
调用\lua\luci\model\cbi\admin_status\processes.lua来实现模块.
官方文档介绍:http://luci.subsignal.org/api/luci/
比如:luci.sys luci.sys.net等
Luci源码结构中的sys.lua 对应的解析在源码/luci-0.11/libs/sys/luasrc/sys.lua
Uci show <config>
Uci get /uci set /uci commit
在脚本中使用uci config文件:http://wiki.openwrt.org/doc/devel/config-scripting
总结一下Luci、Lua、Uci、CBI的关系图,如下图:
以上为最近研究Luci开发的相关资料整理, 同时自己也动手做了几个测试页面并通过luci.sys.call实现了脚本, 系统程序的调用.
为了方便大家学习, 顺便整理出了openwrt的build root的使用官方文档地址: http://wiki.openwrt.org/zh-cn/doc/howto/build 以及CBI模块的section属性设置, 官方文档介绍: http://luci.subsignal.org/trac/wiki/Documentation/CBI. 后续有时间会继续与大家分享openwrt的相关研究, 笔记等等. 也希望大家能多留言, 多指导, 谢谢!
via: http://www.cnblogs.com/andy-ahz/p/3722538.html
本文由 AKmaker 发布
投稿:Andy 校对:Akagi201