路由器开源系统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冲突(如校内网).利用本地优势. ...
随机推荐
- svn add 命令 递归目录下所有文件
svn add 命令 递归目录下所有文件 摘自:https://blog.csdn.net/yefl007/article/details/46506281 即使被忽略了也可以使用此命令. svn a ...
- C#如何控制panel加载的字窗体中控件的位置随着显示器分辨率大小而改变
System.Windows.Forms.Screen screen=Screen.PrimaryScreen; System.Drawing.Rectangle rct=screen ...
- 根据DELTA自动生成SQL语句
上传客户端的CLIENTDATASET.delta到服务器的clientdataset.data,服务端解析clientdataset的数据生成相应的SQL语句. 相对于直接调用datasetprov ...
- Mac更新npm和node版本
npm: 查看当前版本: npm --version 更新到最新版: sodu npm install npm@latest -g node: 1.查看当前版本: node -v 2.清除npm当前缓 ...
- php关于文件上传的两个配置项说明
; Maximum allowed size for uploaded files.; http://php.net/upload-max-filesizeupload_max_filesize = ...
- iOS-AVPlayer
MPMoviePlayerController足够强大,几乎不用写几行代码就能完成一个播放器,但是正是由于它的高度封装使得要自定义这个播放 器变得很复杂,甚至是不可能完成.例如有些时候需要自定义播放器 ...
- python多进程——fork()
简介 程序每次执行时,操作系统都会创建一个新进程来运行程序指令.进程中可调用os.fork,要求操作系统新建一个子进程.[Windowsc系统中,os模块没有os.fork函数]. 每个进程都有 ...
- 【VS开发】TCP服务端如何判断客户端断开连接
原文出自:http://www.cnblogs.com/youxin/p/4056041.html 一篇文章: 最近在做一个服务器端程序,C/S结构.功能方面比较简单就是client端与serve ...
- vue input 循环渲染问题
<li> <span>下属区县:</span> <div class="quxianList" v-for="(qx,index ...
- AI新生代“教父”崛起,或成就迈向具有类人意识机器的一大步
<麻省理工科技评论>公布了 2018 年全球十大突破性技术,“对抗性神经网络”即“生成对抗网络”作为突破性人工智能技术赫然上榜.这家全球最顶级科技杂志编辑部对这项革命性技术给出的评价是:它 ...