luci配置界面初步入门开发(1)
时间:2014-7-8 11:25 热度:9886° 评论:0 条

最近在敲鼓开源的openwrt的无线ap路由系统,在ubuntu下面编译了一个openwrt基于X86的vm镜像。在虚拟机上进行模拟,不过这样会有很多模块信息和功能不能再luci上显示出来。初次进入luci的配置界面,界面真的是太专业了,各种设置跟我们平常的逻辑有所不符合,所以对此进行简单的简化。
luci是由lua脚本所形成的,内部很多很多函数和数据结构东西还是得去翻翻lua的脚本,对于这个脚步本来就只有500k大小,但是实现的功能实在太强大了不要要想初步了解luci,可以先看看lua函数定义,匹配,数据结构和迭代结构。在进行luci界面更改前必须先去了解luci实现模式很架构。可以参考该博客。
http://www.cnblogs.com/zmkeil/archive/2013/05/14/3078774.html上述的东西对新手来说还是挺有用的
在补充一点
LUCI文件调用的工作流程
在/etc/config/下面建立配置文件可以查看到luci启动大概,语言,其他环境等设置。
启动www/cgi-bin/ ./luci restart 发现修改过后需要从新启动机器,而服务luci启动无效。
解决办法:删除缓存文件即到/tmp/下面即可。
/www/cgi-bin/luci
luci.dispatcher.indexcache= "/tmp/luci-indexcache"--缓存文件位置“/tmp/luci-indexcache”
luci.sgi.cgi.run()--cgi程序接下来执行程序,Luci的默认路径是/usr/lib/lua/luci,所以luci.sgi.cgi.run()是运行/usr/lib/lua/luci/sgi/cgi.lua文件中的run函数。
httpdispatch:解析请求,获得请求节点,并调用dispatch处理请求节点,如:
Request:http://10.10.82.238/cgibin/luci/;stok=e10fa5c70fbb55d478eb8b8a2eaabc6f/admin/network/firewall/
get: admin network firewall
LUCI代码框架
/lua/luci/controller/admin/
/lua/luci/model/cbi/
/lua/luci/view/
这三个目录为主
主题的区别
主要是css网页布局的区别,主要的代码文件还是一样的,如果想创建自己的主题风格分别创建下面几个目录下的文件
ipkg
www/luci-static/mytheme
usr/lib/lua/luci/view/themes/mytheme
root/etc/uci-defaults
设计designing
usr/lib/lua/luci/view/themes/mytheme目录下面要有下面两个文件
header.htm and footer.htm
header.htm文件开头要有:<%
require("luci.http").prepare_content("text/html")
-%>
还需添加:<link rel="stylesheet" type="text/css" href="<%=media%>/cascade.css" />到footer header
LUCI显示修改
1修改lua\luci\controller\admin。下的system.lua文件
entry({"admin", "system", "test"}, cbi("admin_system/test"), "Test by Wayne", 30).dependent=false
添加或者是删除类似的注册函数entry()
entry(path, target, title=nil, order=nil)简介
entry({"admin", "status"}, alias("admin", "status", "overview"), _("Status"), 20).index = true
entry({"admin", "status", "overview"}, template("admin_status/index"), _("Overview"), 1)
entry({"admin", "status", "iptables"}, call("action_iptables"), _("Firewall"), 2).leaf = true
……
entry({"admin", "status", "processes"wo}, cbi("admin_status/processes"), _("Processes"), 6)
其中target主要分为三类:call,template和cbi
call用来调用函数
entry({"admin", "status", "iptables"}, call("action_iptables"), _("Firewall"), 2)
function action_iptables()函数工作
template用来调用已有的htm模版,模版目录在lua\luci\view目录下
即语句entry({"admin", "status", "overview"}, template("admin_status/index"), _("Overview"), 1)
调用了lua\luci\view\admin_status\index.htm文件来显示。
cbi语句使用cbi模块,这是使用非常频繁也非常方便的模块,在cbi模块中定义各种控件,Luci系统会自动执行大部分处理工作。其链接目录在lua\luci\model\cbi下。
显然语句entry({"admin", "status", "processes"}, cbi("admin_status/processes"), _("Processes"),
调用lua\luci\model\cbi\admin_status\processes.lua来实现模块。
form 和cgi 对应到model/cbi 相应的目
录下面,那里面是对应的定制好的html 和lua 业务处理。
alias 是等同于别的链接。
大概了解了luci的架构和目录之间的关系后那就要更近一步的进行函数的意义理解,当然很多函数都是在luci文件中定义出来的类似c/c++的库一样实现,require就负责调用安装。所以遇到不懂得函数可以用suorceinsight这个软件进行相关的函数查找,或者到luci官网的api处查找具体含义。
在这其中就不得不提UCI,UCI提供的功能与通用配置界面进行交互,uci的命令可以直接在命令模式对无线AP进行配置,在luci就是直接调用该函数进行配置的实现,主要还是通过uci与config下配置文件进行打交道。而无线AP的luci配置界面主要就是更改或者添加config的配置文件然后启动。具体函数可以参考luci官网。
说到文件就提一下文件要在现实出想相应的内容显示出来还要在该功能的文件下声明一map函数并要返回map,接着section,再option 和taboption页内的配置项目录显示,具体可以参考官方源码。
对于无线AP界面的更改必须要知道config下配置文件界面的意义主要还是network这块比较复杂,需要了解无线路由网络知识,switch,wlan,lan,wan,端口物理和配置认识,后面还有vpn和防火墙dhcp等网络知识了解,本人也是刚入门,还有很多东西需要学习,初步更改图片还没有截图,有空再上来分享。


捐赠支持:如果觉得这篇文章对您有帮助,请“扫一扫”鼓励作者!
相关文章本文作者:沁雨寒 文章标题: luci配置界面初步入门开发(1)
本文地址:https://blog.sxx1314.com/openwrt/87.html
版权声明:若无注明,本文皆为“unix 软硬件 技术宅 ”原创,转载请保留文章出处。百度已收录
本文地址:https://blog.sxx1314.com/openwrt/87.html
版权声明:若无注明,本文皆为“unix 软硬件 技术宅 ”原创,转载请保留文章出处。百度已收录















