路由器开源系统openwrt配置页面定制
1. 新建虚拟机,百度文库有一篇《使用VMware安装OpenWrt》,地址:http://wenku.baidu.com/link?url=NkvaQpTf2dR8FpYn7JD9A7-uaw6XQvLafQ64Mqg9SNEZk8M_JCQTuLELR0GfWlBdmrbA3_EuUxnwQGsRz-JBA6-Jx6QHmYbVcJKJ-V0oX__
装好后,复制下载的openwrt-x86-generic-combined-ext2.vmdk或者其他版本放到虚拟机目录下并修改成OpenWRT.vmdk的名字覆盖掉原来的。就可以开始使用openwrt系统了。
2. 虚拟机里应该有个LAN口网络地址为192.168.1.1, 为了从PC访问虚拟机,将PC下的网络连接里的VMware Network Adapter VMnet1的IP改为同虚拟机一个网段,比如192.168.1.2。然后从虚拟机里PING通PC就说明可以了。
3. 在PC 上打开浏览器,输入192.168.1.1, 应该就能进入到路由器的登录界面。用root和密码登录进去。linux下修改密码用passwd root。
4. 现在要做的是定制luci的界面,比如在一级目录下增加一个PIERO,PIERO下面有2个子标签,BoardType和Control。
首先进入到虚拟机的 /usr/lib/lua/luci/controller/admin/下,新建一个piero.lua文件,添加如下内容:
module("luci.controller.admin.piero", package.seeall) function index()
entry({"admin","piero"}, alias("admin","piero","piero"),_("PIERO"), ).index = true
entry({"admin","piero","piero"},cbi("admin_piero/piero"),_("BoardType"),)
entry({"admin", "piero", "control"},cbi("admin_piero/control"),_("Control"),)
end
这里相当于定义一个界面的入口,entry的参数一表示路径,参数二是target,表示动作,有alias表示直接链接到其他标签,cbi表示执行一个lua文件,template表示引用一个htm的模板,call 表示调用函数。参数三是表示显示的标题,加'_'表示国际化,最后一个表示显示的次序。后两个参数可省略。index=true不知道干吗的。
5. 程序中cbi("admin_piero/control")表示执行admin_piero下的control.lua文件,完整路径为/usr/lib/lua/luci/model/cbi/admin_piero/control.lua,admin_piero为自己新建的目录,建好后再新建control.lua文件,并写入如下代码:(注:linux中方便切换路径可以给一些常用的较长的路径取一个别名方便访问,方法是alias 'cdadmin=cd /usr/lib/lua/luci/controller/admin' ,这样定义之后就可以直接使用cdadmin命令进入admin目录了。)
require("luci.sys")
require("luci.sys.zoneinfo")
require("luci.tools.webadmin")
require("luci.fs")
require("luci.config") local m, s, o m = Map("piero", translate("Control"), translate("This is design by Piero, in order to test for add a new page."))
m:chain("luci") s = m:section(TypedSection, "controlboard", translate("Control Board"))
s.anonymous = true
s.addremove = false s:tab("led", translate("Control LED"))
s:tab("beep", translate("Control Beep"))
--s:tab("adc", translate("Control Adc")) --
-- LED
--
o = s:taboption("led", ListValue, "lednum", translate("LED NUM:"))
o.default =
o.datatype = "uinteger"
o:value(, translate("LED0"))
o:value(, translate("LED1"))
o:value(, translate("LED2")) o = s:taboption("led", ListValue, "ledstatus", translate("LED STATUS:"))
o.default = --off status
o.datatype = "uinteger"
o:value(, translate("LED ON"))
o:value(, translate("LED OFF")) --
-- BEEP
--
o = s:taboption("beep", ListValue, "beepstatus", translate("BEEP STATUS:"))
o.default = --off status
o.datatype = "uinteger"
o:value(, translate("ON"))
o:value(, translate("OFF")) o = s:taboption("beep", Value, "beepfreq", translate("BEEP FREQ:"))
o.datatype = "uinteger" local apply = luci.http.formvalue("cbi.apply")
if apply then
io.popen("/etc/init.d/piero restart")
end return m
Map的调用是: m = Map("配置文件名", "配置页面标题", "配置页面说明")
这里的配置文件名写的是piero,它有一个默认的目录是/etc/config/下,写完上面这些就需要去/etc/config/下新建文件piero,写入如下内容:
config boardinfo
option ipaddr1 '192.168.123.212'
option netmask1 '255.0.0.0'
option boardname '' config controlboard
option beepfreq ''
option beepstatus ''
option lednum ''
option ledstatus '
6. 写完这些后就可以重启虚拟机,然后再从PC上登入192.168.1.1查看,就能看到修改后的效果了。如图:
7. 现在讲界面的中文化。
首先找到luci-i18n-chinese_0.11+svn9769-1_x86.ipk 下好放电脑里,这个版本要注意,要跟自己的版本对上,要不然可能出现部分英文部分中文的样子,然后下一个WinSCP的工具,这个工具是用来跟openwrt传文件的,下好安装后登录,然后将luci-i18n-chinese_0.11+svn9769-1_x86.ipk上传到openwrt下/tmp/目录下,传好后进入虚拟机,进入/tmp目录,然后开始安装,输入opkg install luci-i18n-chinese_0.11+svn9769-1_x86.ipk,然后就可以装好。装好后用192.168.1.1登上去,在系统-语言界面 里选择chinese,然后提交保存。再刷新一下就可以看到中文界面了。
关于自定义界面的中文化,原来的想法是自己去编译汉化包,但是一直没有找到方法,已知的方法是在编译openwrt的时候可以修改po文件的方式,然后一起编译成固件,比较麻烦。后来使用了直接输入中文的办法,方法是先用winscp连接上板子,打开需要汉化的文件,首先点一下winscp上面工具栏的 编码 ,将编码方式修改成utf-8, 然后在文件里需要汉化的地方,直接写入中文。保存后,清缓存,界面上就可以看到汉字了。这种方法不好的是,当你选择界面为英文是,这些直接写中文的地方无法自动转换为英文。
8. 关于快捷路径的保存,之前直接用 alias会导致重启后失效,所以换一种方法,在/etc/profile文件中添加alias cdadmin='cd /usr/...'类似路径,保存退出。这样就可以了。
9. Luci是openwrt上使用较为广泛的一种Web管理界面框架,可以二次开发。
10. 文件修改完后直接在网页上打开常常结果跟自己期望差很多,大多数时候是缓存的影响,可以重启虚拟机,也可以直接删除三个文件,/tmp/luci-indexcache,/tmp/luci-modulecache/*, /tmp/luci-sessioncache/*。
11. OpenWrt有多个版本,Backfire发布于2010年3月。Attitude Adjustment发布于2013年4月25,是现在最稳定的版本。这里用的是Attitude Adjustment版本,版本号可以在192.168.1.1页面的顶部看到。
12. 相关版本下载,以及版本的软件下载,官网是http://downloads.openwrt.org/,再按自己的版本选,比如我的是https://downloads.openwrt.org/attitude_adjustment/12.09/x86/generic/packages/,这里面可以下载很多有用的ipk文件,比如中文包,useradd工具,theme等。下载好后按第7步安装。
13. 关于luci的资料国内的网站上搜到不到,尤其是一些比较偏的东西,可以去google.cn上搜搜,比如关于增加用户名的讨论帖,http://stackoverflow.com/questions/18377138/openwrt-luci-how-to-implement-limited-user-access
14. 关于USB挂载摄像头功能,参考链接http://wenku.baidu.com/link?url=W3TrA6wHp-0GrgztCZJWnIeNsVT9U7dFIeqyxtdHrjeZK_78sRLairb0t-3s85X9o9_vbYDm02Rrwws9NWhCxYOhY8F8cy9zM_-J_441SaW,按里面的步骤,首先是下载和配置好交叉编译工具,比如我这是mips-openwrt-linux-gcc, 然后在http://www.ijg.org/files/位置下载libjpeg源码包,并交叉编译。然后再下载https://sourceforge.net/projects/mjpg-streamer/的源码,并编译。生成的东西拷到板子上。
15. 网上最多的一般是call 方法,cbi方法,和template方法,关于call方法,虽然是调用函数,但是功能可以更强大,比如要实现删除时跳出一个确认框,就可以在index 里的entry里调用call("delete")方法,然后
function delete()
删除动作;
luci.template.render("admin_system/packages",{参数传递})
end
然后在view里的admin-system下写htm, packages.htm。
16. 待续
路由器开源系统openwrt配置页面定制的更多相关文章
- openwrt开源系统LUCI配置界面
转自:http://www.right.com.cn/forum/thread-131035-1-1.html 本人菜鸟,最近在学习这方面的知识,在参考资料的基础上总结如下内容.这篇文章针对如何对op ...
- C#开源系统大汇总(个人收藏)
C#开源系统大汇总 一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖 ...
- NopCommerce 开源商城下载配置安装
NopCommerce 是一款开源商城系统,提供了完整的解决方案.应该来说是目前最完善,功能最强劲的商城系统.基于ASP.NET MVC 框架,EF框架,数据库MSSQL. 系统版本涵盖了从MVC3. ...
- Linux 桌面玩家指南:04. Linux 桌面系统字体配置要略
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- Windows 重装系统,配置 WSL,美化终端,部署 WebDAV 服务器,并备份系统分区
最新博客文章链接 最近发现我 Windows11 上的 WSL 打不开了,一直提示我虚拟化功能没有打开,但我看了下配置,发现虚拟化功能其实是开着的.然后试了各种方法,重装了好几次系统,我一个软件一个软 ...
- Linux 桌面系统字体配置要略
字体显示效果测试 这一段是为了测试宋体字的显示效果,包括宋体里面自带的英文字体,“This is english,how does it look like?”.这一行是小字.后面几个字是加粗的宋体. ...
- 安装Debian 7.8 过程,以及该系统的配置过程
最近,我给自己的电脑安装了Debian操作系统,版本7.8 stable.Debian我相信大家都能了解,它是Ubuntu的基础,Ubuntu是基于Debian的unstable开发的.我安装这个系统 ...
- 如何设置路由器实现静态IP配置
一.概述 嵌入式开发者,经常面对这样的环境:PC(windows)+虚拟机(linux)+开发板.我们希望三者都能相互通信,而且可以联网. 对于实验室只提供一根网线,而自己没有额外的增加端口数量的设备 ...
- 常用SNS开源系统比较
常用SNS开源系统比较 这 几天看了很多关于SNS(社交网络服务) 的东西..得到了不少启发..目前的IDEA是..可以在学校弄一个试试..主打的东西不能和现有的SNS冲突(如校内网).利用本地优势. ...
随机推荐
- yum安装PostgreSQL 在6和7
一.安装PostgreSQL 复制代码// 安装EPEL源# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.n ...
- Android仿微信底部选项卡
第一步 添加依赖 dependencies { compile 'com.yinglan.alphatabs:library:1.0.5' } 第二步 布局使用 <?xml version=&q ...
- 26Flutter 日期 和时间戳/格式化日期库/flutter异步/ 官方自带日期组件showDatePicker、时间组件showTimePicker以及国际化
/* 一.Flutter日期和时间戳 日期转换成时间戳 var now=newDateTime.now(); print(now.millisecondsSinceEpoch); //单位毫秒,13位 ...
- 阶段5 3.微服务项目【学成在线】_day18 用户授权_06-方法授权-方法授权测试-无权限异常处理
现在没权限返回的信息 控制台抛出的异常是这个 : 不允许访问,这是Spring Security跑出来的 我们在异常处理器里面打个断点看一下 重新测试,就跳转到了异常捕获类这里. 这是异常的类型 这里 ...
- LeetCode_104. Maximum Depth of Binary Tree
104. Maximum Depth of Binary Tree Easy Given a binary tree, find its maximum depth. The maximum dept ...
- LeetCode_58. Length of Last Word
58. Length of Last Word Easy Given a string s consists of upper/lower-case alphabets and empty space ...
- (一)java面试易忘题目精选(1)
1. int和Integer有什么区别? 答:Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类 ...
- Python中列表,元组,字典,集合的区别
参考文档https://blog.csdn.net/Yeoman92/article/details/56289287 理解Python中列表,元组,字典,集合的区别 列表,元组,字典,集合的区别是p ...
- 【Leetcode_easy】653. Two Sum IV - Input is a BST
problem 653. Two Sum IV - Input is a BST 参考 1. Leetcode_easy_653. Two Sum IV - Input is a BST; 完
- dropout含义与原理
含义 在训练过程中,对神经网络单元按照一定比例暂时将其丢弃. 原理 由于网络参数过多,训练数据少,或者训练次数过多,会产生过拟合的现象.dropout产生的一个重大原因就是为了避免过拟合. 每一层的神 ...