• 路由器开源系统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"), 100).index = true
                entry({"admin","piero","piero"},cbi("admin_piero/piero"),_("BoardType"),1)
                entry({"admin", "piero", "control"},cbi("admin_piero/control"),_("Control"),2)
    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 = 0
    o.datatype = "uinteger"
    o:value(0, translate("LED0"))
    o:value(1, translate("LED1"))
    o:value(2, translate("LED2"))
    
    o = s:taboption("led", ListValue, "ledstatus", translate("LED STATUS:"))
    o.default = 1    --off status
    o.datatype = "uinteger"
    o:value(0, translate("LED ON"))
    o:value(1, translate("LED OFF"))
    
    --
    -- BEEP
    --
    o = s:taboption("beep", ListValue, "beepstatus", translate("BEEP STATUS:"))
    o.default = 1    --off status
    o.datatype = "uinteger"
    o:value(0, translate("ON"))
    o:value(1, 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 '1'
    
    config controlboard
        option beepfreq '100'
        option beepstatus '0'
        option lednum '2'
        option ledstatus '0

    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. 待续

  • 相关阅读:
    Android应用查看本地数据库
    C#导出和导入Excel模板功能
    数据库事务的四种隔离模式
    .NET进阶篇-丑话先说,Flag先立--致青春
    博客的第一天:回顾半年前的基础:SQL--基础查询+年月日格式+拼接
    【MySQL】你以为设置了并行复制就降低延迟了?这个你绝对想不到!
    中秋的月亮
    细看国产数据库,从根上知道如何学习?
    开篇2019
    Mysql学习笔记整理之数据库优化
  • 原文地址:https://www.cnblogs.com/fwst/p/4060458.html
Copyright © 2020-2023  润新知