Lua作为一门方便嵌入(其它应用程序)并可扩展的轻量级脚本语言来设计的,因此她一直遵从着简单、小巧、可移植、快速的原则,官方实现完全采用ANSI C编写,能以C程序库的形式嵌入到宿主程序中。Lua的每个版本都保持着开放源码的传统,不过各版采用的许可协议并不相同,自5.0版(最新版是5.1)开始她采用的是著名的MIT许可协议。正由于上述特点,所以Lua在游戏开发、机器人控制、分布式应用、图像处理、生物信息学等各种各样的领域中得到了越来越广泛的应用。

Luci是 Lua ConfigurationInterface的简称,意在OpenWrt整个系统的配置集中化。见链接: http://wiki.openwrt.org/zh-cn/doc/uci

1. Luci 的启动--uhttpd

uhttpd是一个简单的web服务器程序,主要就是cgi的处理,openwrt是利用uhttpd作为web服务器,实现客户端web页面配置功能。对于request处理方式,采用的是cgi,而所用的cgi程序就是luci。

2. Luci 的启动--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中

3. Luci-- Web

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()

4. 以status模块为例进行说明

模块入口文件status.lua在目录lua\luci\controller\admin下在index()函数中,使用entry函数来完成每个模块函数的注册:

entry(path, target, title=nil, order=nil)

5. entry()函数

第一个参数是定义菜单的显示(Virtual path)。

第二个参数定义相应的处理方式(target)。

alias是指向别的entry的别名,from调用的某一个view,cbi调用某一个model,call直接调用函数。

第三个参数是菜单的文本,_(“string”),国际化。

第四个参数是是同级菜单下,此菜单项的位置,从大到小

6. target主要分为三类:call,template 和cbi。

a. call用来调用函数。即语句

entry({"admin", "status", "iptables"}, call("action_iptables"), _("Firewall"), 2)

Firewall模块调用了action_iptables函数

b. template调用

template用来调用已有的htm模版,模版目录在lua\luci\view目录下。即语句

entry({"admin","status","overview"},template("admin_status/index"),_("Overview"), 1)

调用lua\luci\view\admin_status\index.htm文件来显示。

7. cbi调用

a. CBI了解 –- Configuration Binding Interface

CBI模型是Lua文件描述UCI配置文件的结构和由此产生的HTML表单来评估CBI解析器,所有CBI  luci.cbi.Map类型的模型文件必须返回一个map对象,在cbi模块中定义各种控件,Luci系统会自动执行大部分处理工作。其链接目录在lua\luci\model\cbi下 entry({"admin", "status", "processes"}, cbi("admin_status/processes"), _("Processes"), 6),调用\lua\luci\model\cbi\admin_status\processes.lua来实现模块。

8. Luci API的使用

比如:luci.sys luci.sys.net等对应的解析,由Luci源码结构中的/luci-0.11/libs/sys/luasrc/sys.lua完成。

9. Uci的使用

Uci命令的使用

Uci show

Uci get /uci set /uci commit

Uci c API的使用

总结一下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的相关研究、笔记等等。也希望大家能多留言、多指导,谢谢!

api文档 luci_Luci介绍相关推荐

  1. ElementUI官方介绍 开发API文档链接

    ElementUI官方介绍 开发API文档 http://element-cn.eleme.io/#/zh-CN/component/quickstart

  2. 一款适合IT团队的在线API文档、技术文档工具-showdoc介绍

    还在为word文档传来传去查阅不方便而烦恼吗,还在为查看数据库字段含义不方便而烦恼吗,还在为编写接口文档而烦恼吗?今天为大家推荐一款适合IT团队的在线API文档.技术文档工具,有免费开源和在线托管的版 ...

  3. 简单介绍如何制作.chm文件(以Java API文档为例)

    简单介绍如何制作.chm文件--以将官方的Java API文档制作成.chm文件为例 1. 下载Java API 文档 2. 如何制作成.chm文件 (1)使用CHMWriter制作 (2)使用别的软 ...

  4. Jmeter API文档-常用类使用方法介绍

    Jmeter本身就集成了一些比较好用的类,可以在脚本开发中辅助使用,具体使用方法可以参考jmeter的API文档.Jmeter工具的API文档存放在工具包的docs/api文件夹中.  1.vars操 ...

  5. 为TypeScript项目生成API文档

    为TypeScript项目生成文档 使用typedoc为TypeScript项目生成API文档. 1. 使用typedoc生成HTML文档 需要安装 typedoc. npm i typedoc 可以 ...

  6. 再见丑陋的 SwaggerUI,这款API文档生成神器界面更炫酷,逼格更高!

    欢迎关注方志朋的博客,回复"666"获面试宝典 一般在使用 Spring Boot 开发前后端分离项目的时候,都会用到 Swagger.Swagger 是一个规范和完整的框架,用于 ...

  7. 先写API文档还是先写代码?你需要这款神器Apifox!

    代码未动,文档先行 其实大家都知道 API 文档先行的重要性,但是在实践过程中往往会遇到很多困难. 程序员最讨厌的两件事:1. 写文档,2. 别人不写文档.大多数开发人员不愿意写 API 文档的原因是 ...

  8. 干掉 Postman?测试接口直接生成API文档,这个文档工具真香!

    欢迎关注方志朋的博客,回复"666"获面试宝典 实不相瞒我的收藏夹里躺着很多优质的开源项目,我有个爱好平时遇到感兴趣的开源项目都会记录下来,然后有时间在慢慢研究.前几天刚给同事分享 ...

  9. 还在发愁写API文档?推荐一款阿里腾讯都在用的API管理神器!

    欢迎关注方志朋的博客,回复"666"获面试宝典 前言 ❝ 程序员最讨厌的两件事:1. 写文档,2. 别人不写文档.大多数开发人员不愿意写 API 文档的原因:写文档短期收益远低于付 ...

  10. 使用Android Studio的时候如何查看开发文档,API文档,doc文档,SDK文档

    有的时候,我们在Android开发中需要查看需要的一些类或包里面有什么方法,返回值,调用关系和继承关系等等.这个时候我们就可以使用SDK软件开发工具中的其中之一--API文档,来查一下. 那么,下面就 ...

最新文章

  1. javascript 构造函数类和原型 prototyp e定义的属性和方法的区别
  2. Python绘图 二维、三维
  3. w10查询自己电脑ip
  4. 深度学习笔记:Tensorflow手写mnist数字识别
  5. CTO:再写if-else,逮着罚款1000!
  6. python 数据库查询结果_python 数据库查询结果
  7. 手机通讯录c语言导入手机软件,有什么软件能快速将手机通讯录的联系人传到另一个手机上...
  8. 【Java从0到架构师】Spring - 复杂对象、Converter
  9. i.MX6ULL 开发板在Ubuntu系统下实现串口通信
  10. Python爬虫教程——入门一之爬虫基础了解
  11. R语言学习20150414
  12. 取消卸载 Symantec 客户端需要密码提示
  13. IDEA中对Git的常规操作(合并,提交,新建分支,更新)
  14. 文章翻译—基于误差状态卡尔曼滤波器的四元数运动学—前言
  15. ARM amba总线介绍
  16. 2021Java大厂面试知识分享,分享PDF高清版
  17. 《一人之下》佳句欣赏
  18. CANoe-工作模式与转接板功能
  19. 解决Could not find metadata org.apache.maven.pluginsmaven-archetype-pluginmaven-metadata.xml in
  20. PyQt5-使用掩码限制QLineEdit控件的输入

热门文章

  1. mysql无法创建partition_mysql的partition分区
  2. php 又拍云,DEDEcms图片附件上传到又拍云使用云存储
  3. 阿里云因发现Log4j2漏洞未及时上报,被工信部处罚!
  4. 传冯德伦获邀进军好莱坞拍片 希望舒淇加盟
  5. 链家房源数据清洗和预处理(pandas)
  6. android网易云播放时图片,Android 网易云音乐图片高斯模糊
  7. C++实现LZ77压缩算法
  8. P2P追债也用上大数据
  9. dm-thin-provision架构及实现简析
  10. ConvMAE:当Masked卷积遇见何恺明的MAE