恩山无线论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 35116|回复: 22

小米路由3安装原生luci

  [复制链接]
发表于 2016-5-14 11:07 | 显示全部楼层 |阅读模式
本帖最后由 zhangzhenhu 于 2016-5-14 15:21 编辑

论坛发帖排版太费劲了!!!!禁止一切转载!!!读者辛苦爬楼看吧~

关键词
         tp-linkwr2041n v1刷成openwrt
         小米路由3安装opkg命令
         小米路由3安装原生luci(和小米web并存)
         luci启动流程
小米路由3安装s-s
小米路由3安装ss

虎哥openwrt奇幻漂流记

序章
正在使用的路由器是tp-link wr2041n v1,这款路由器200多大洋买的,可是天生就缺陷,经常掉线,网上查了好久说是官方固件的bug,可恶的是tplink一直不解决,也不更新固件,还他妈继续卖,200多大洋,坑人~。
后来按照网上别人的经验,改了下无线配置,关闭了那个什么混合模式,掉线问题才解决,就这样一直坚持用了一年多。
前段时间从别人手里买了ss的帐号用来使用google,用着确实很爽,速度也快,可惜的是手机没办法用,所以想着搞个路由器自动fan wall,考虑把tp-link wr2041n v1刷成openwrt。

tp-link wr2041n v1刷成openwrt
这时对于openwrt其实不甚了解,只是知道有这么个东东,很牛叉的样子,就尝试着刷一下,结果发现openwrt官方不支持这个设备,蛋疼。
柳暗花明又一村,发现网上有别的人写的openwrt添加wr2041n v1设备的教程,经过不懈的努力,参照如下帖子:
https://github.com/wongsyrone/LinuxNotes/blob/master/06.md
给wr2041n v1 刷了breed,然后修改openwrt 15.05.1的代码,进行适配 wr2041n v1,经过多日不断摸索尝试,终于成功了(wongsyrone大神的教程有几个地方有错误,导致走了一点弯路)。
我是从openwrt的官方github项目的chaos_calmer分支fork出来的代码,我修改后的代码在 https://github.com/zhangzhenhu/openwrt/tree/chaos_calmer_wr2041nv1  有兴趣的可以自己了解或者自己修改编译。
适配后的固件是chaos_calmer 15.05.1的版本,可以稳定运行,中继功能没实验过,不知道是否可行,另外wifi灯不亮,这个研究好久都没搞定,有强迫症的我都不得不放弃了。
然后悲剧发生了,tplink真是名副其实的缩水大王,200多的货只有4MB的flash,刷完openwrt后没有一点空间了,什么软件包都无法安装,ss根本安装不上,空间不足!!!!发誓以后再也不买tplink的产品

我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2016-5-14 11:14 | 显示全部楼层
小米路由3的悲剧
考虑重新买个路由器,挑来挑去选了个小米路由3,主要是看中了他的128MB的flash(被tplink的4MB flash伤透了),而且价钱还算可以。
结果买完后又悲剧了,入手后才发现原来没有支持的第三方固件,通过多方了解原来是因为采用来少见的nand flash,其它配置与小米路由mini是一样的。
图片 1.png
当前openwrt官方已经支持小米路由mini了,估计小米也是发现众多mini的用户都刷成官方openwrt了,不受雷军控制了,窃取不到用户数据了,推送不了广告了。所以发布了小米路由3,使用了少见的nand flash,就是不让你刷。
一个nand flash的编程器要700多大洋,很多开发者望而止步了。breed的作者H大都说不再开发小米路由3的版本的了。没有breed,也就不敢随便乱刷固件了。其实openwrt官方是由nand flash驱动的,可以支持适配mt7620a + nand flash这样的硬件组合,适配起来应该不是很麻烦吧。就是没有breed,不敢随便搞,有哪位尝试了小米路由3mini版或者mt7620a通用版的breed,能成功使用的可以告诉我啊,如果可以的化,我就可以去研究openwrt 适配小米路由3
ps:后来发现小米路由3自身的uboot其实也算是不死uboot了,因为其可以从u盘刷固件,就是不如breed的网络方便一些。另外其实openwrt官方版本已经支持nandflash了,已经有驱动了,哪位大牛可以指导下怎么适配小米路由3的版本,我不会写dts文件,里面那些偏移量我不知道怎么确定,有懂的指导下啊.
图片 2.png

点评

小米路由3安装原生luci 聪明的我,想到既然小米路由的固件也是基于openwrt的,那么我直接在小米路由官方固件上装ss等其它软件包就可以玩耍了啊。 这个方法是我经过无数次失败尝试后,才摸索出来成功的,  详情 回复 发表于 2016-5-14 11:16
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2016-5-14 11:16 | 显示全部楼层
zhangzhenhu 发表于 2016-5-14 11:14
小米路由3的悲剧考虑重新买个路由器,挑来挑去选了个小米路由3,主要是看中了他的128MB的flash(被tplink的 ...

小米路由3安装原生luci
       聪明的我,想到既然小米路由的固件也是基于openwrt的,那么我直接在小米路由官方固件上装ss等其它软件包就可以玩耍了啊。
       这个方法是我经过无数次失败尝试后,才摸索出来成功的,然后再写的本教程,写教程实在是耗费精力的事情,本教程的方法是没问题的,就是一些细节上我可能会遗漏,如果照着做未必能成功,所以我后面打包了我的所有文件,提供给大家一间安装,已经集成了sschinadns
       注意:由于我们把所有软件包都安装在了/data/目录下下,不是系统默认的,所以如果你用opkg安装某个软件在/etc/init.d/下有启动脚本,必须要打开脚本把里面一些命令的路径要改下,sschinadnslighttpd就都是这样,需要手动改下,否则不能启动,切记
小米路由3开启ssh
       按照论坛里的方法,刷了开发版的固件,然后利用固件的漏洞开启了ssh。这里不细说了,自行查找论坛教程吧。
小米路由3安装opkg
       那么要如何安装luci程序呢?
       使用opkg命令就行,但是你发现小米系统里没有这个命令啊!!,坑爹啊!!
       不用怕,很简单,从其它任何mt7620a的路由设备里把/bin/opkg文件考过来就行了,实在找不到自己编译一下小米路由miniopenwrt固件,在编译好的 build_dir/target-*/目录里就能找到这个文件,我的工具包里就有,opkg命令只是一个文件而已。
       opkg文件拷贝到路由器的/data/ 目录就可以了,为什么是这个目录呢,因为这个目录是可用空间最大的,而且重启不会丢失的,所以我的所有程序都是安装到目录下/data/下。
       拷贝到/data/目录下,要执行这个命令,只需要/data/opkg 就可以了,不能只用opkg,要写路径,否则不找到命令,因为不在系统的搜索路径PATH里面。
      
添加opkg软件包源
       考虑到软件的兼容,我们使用openwrt14.07mt7620芯片的软件源即可。(为啥不用12.09,因为不存在啊!!!)
       修改/etc/opkg.conf 文件,注意:/data/etc/ 目录其实就是/etc/,两个目录是同一个,是同一个,是同一个!!! 记住了,不要删/data/etc/ 里面的文件,因为这货就是/etc/   !!!
# openwrt官方barrier_breaker/14.07的版本ramips/mt7620a/的软件包源
src/gz attitude_adjustment_oldpackageshttp://downloads.openwrt.org/bar ... ckages/oldpackages/
# opkg命令默认讲软件安装的目录,我们设置成/data/目录,不设置会安装到/根目录
dest root /data
#opkg 临时文件目录
dest ram /tmp
# opkg的数据报索引文件的路径,也改到/data/目录下
lists_dir ext /data/var/opkg-lists
option overlay_root /data
arch all 100
arch ramips 200
arch ramips_24kec 300
改完保存,然后执行/data/opkg update
这个源是国外的,如果你的网络不行,可以换成国内的
把上面的源downloads.openwrt.org都换成openwrt.mirrors.ustc.edu.cn 即可,好像潘多拉也有一个mt7620的源,地址我没记下来。

点评

luci工作流程分析 luci其实就是一个web框架而已,提供路由的web管理界面,配合一个http的server服务使用。 小米的固件系统的web也是使用的luci,但是httpserver用的是nginx。 openwrt原生使用uhttpd  详情 回复 发表于 2016-5-14 11:21
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2016-5-14 11:21 | 显示全部楼层
zhangzhenhu 发表于 2016-5-14 11:16
小米路由3安装原生luci       聪明的我,想到既然小米路由的固件也是基于openwrt的,那么我直接在小米路 ...


luci工作流程分析
       luci其实就是一个web框架而已,提供路由的web管理界面,配合一个http的server服务使用。        小米的固件系统的web也是使用的luci,但是httpserver用的是nginx。  openwrt原生使用uhttpd作为http server,小米的固件里也有这个程序。开始我也是使用uhttpd,但是弄了好久总是不成功,后来就改成lighttpd了,这回可以了。
       luci的默认安装路径是/usr/lib/lua/luci ,web的入口位置在/www/。
1)      用户浏览器发起请求http://192.168.31.1/
2)      httpserver 接收到(80端口)
3)      发送web首页(/www/index.html)给浏览器
4)      浏览器收到index.html,但是index.html里面有代码让浏览器又跳转到/cgi-bin/luci
5)      httpserver 接收到浏览器请求/cgi-bin/luci(就是/www/cgi-bin/luci文件),这个是cgi程序,所以http server会执行这个程序,然后/www/cgi-bin/luci输出到结果返回给浏览器。
6)      浏览器收到数据,ok这就是你看到的路由器的首页了。后面浏览器发起的其它请求和操作都是http://192.168.31.1/cgi-bin/luci 这个地址加上不同的参数实现的。
7)      httpserver 响应 http://192.168.31.1/cgi-bin/luci  这个地址的其它参数的请求,其实一直都在执行/www/cgi-bin/luci程序,只是把url中的参数传给/www/cgi-bin/luci程序,/www/cgi-bin/luci程序根据不同的参数返回不同页面,执行不同的操作。

8)      以上就是整个工作流程了。

点评

安装原生luci大体思路 luci的web程序的入口就是/www/cgi-bin/luci,这个是lua脚本语言编写的,打开这个脚本后,就看到其实/www/cgi-bin/luci就是调用/usr/lib/lua/luci 里面的接口,也就是luci界面的所有程序  详情 回复 发表于 2016-5-14 11:26
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2016-5-14 11:26 | 显示全部楼层
本帖最后由 zhangzhenhu 于 2016-5-14 11:38 编辑
zhangzhenhu 发表于 2016-5-14 11:21
luci工作流程分析       luci其实就是一个web框架而已,提供路由的web管理界面,配合一个http的server ...

安装原生luci大体思路
       luciweb程序的入口就是/www/cgi-bin/luci,这个是lua脚本语言编写的,打开这个脚本后,就看到其实/www/cgi-bin/luci就是调用/usr/lib/lua/luci 里面的接口,也就是luci界面的所有程序都在/usr/lib/lua/luci,而/www/cgi-bin/luci是入口。
       熟悉linux的朋友多知道/usr/lib/lua/luci 其实是作为lua的一个lib库存在的。/www/cgi-bin/luci中是引入了luci库。
       有以上的了解后,我们就可以开搞了。
       大体思路就是:
1)      我们在小米路由3的官方系统上再启动一个http server,监听80外的另一个端口,比如8080。
2)      再另外的位置部署一个/www/ ,web程序的入口,这个入口里的cgi-bin/luci调用我们自己的luci

http server
再启动一个http server还是比较简单的,开始我使用系统里由的uhttpd,但是一直失败,后来改成lighttpd
       安装lighttpd
              /data/opkginstall lighttpd 就可以了
       配置lighttpd
              修改文件 /etc/lighttpd/lighttpd.conf,添加cgi支持,红色部分取消注释
server.modules = (
#      "mod_rewrite",
#      "mod_redirect",
#      "mod_alias",
#      "mod_auth",
#      "mod_status",
#       "mod_setenv",
#      "mod_fastcgi",
#      "mod_proxy",
#      "mod_simple_vhost",
       "mod_cgi",
#      "mod_ssi",
#      "mod_usertrack",
#      "mod_expire",
#      "mod_webdav"
)
              修改监听的端口号
             #bind to port (default: 80)
              server.port = 8080
              其它相关目录修改
              server.document-root= "/data/www/"
              server.errorfile-prefix= “/data/www/error-"
              ##enable syslog
              server.errorlog-use-syslog= “enable"
              cgi.assign = ("cgi-bin/luci"=> “/data/usr/bin/lua")
              url.rewrite = ( "^/luci$" =>"/luci/", # helper only
               "^/cgi-bin/luci.*" => "/luci$0",
                               "^/luci-static/.*" => "/luci$0" )
              修改启动脚本/etc/init.d/lighttpd
              这里就是我上文中说的,我们把lighttpd安装在了/data/目录下,其命令应该是/data/usr/sbin/lighttpd


                   图片 3.png
lua(luci)部署
       创建目录
              mkdir-p /data/usr/bin
              mkdir-p /data/usr/lib/lua/luci
       拷贝lua
              cp/usr/bin/lua  /data/usr/bin/
       安装luci
              直接opkg安装是不行的,由于系统内核版本太低,一些内核依赖不兼容,无法直接安装用 opkg install 安装。
              手动下载luci-base_0.12+svn-r10530-1_ramips_24kec.ipk
              然后解压出来,ipk文件其实就是tar的压缩包
               tar -xzf luci-base_0.12+svn-r10530-1_ramips_24kec.ipk
               tar -xzf data.tar.gz
              然后就会看到我们需要的文件了,注意这里etc/config/luci luci的配置文件,为了和系统的已经有的区分开,我们改写名字,mv etc/config/luci etc/config/luci-opkg 。然后把这些通通复制到/data/目录下,记得先重命名etc/config/luci,再拷贝到/data/,否则会覆盖系统原有的。
              drwxr-xr-x3 tiger tiger 4096 9  24 2014 etc/
drwxr-xr-x 3 tiger tiger 4096 9 24  2014 lib/
drwxr-xr-x 2 tiger tiger 4096 9 24  2014 sbin/
drwxr-xr-x 3 tiger tiger 4096 9 24  2014 usr/
drwxr-xr-x 4 tiger tiger 4096 9 24  2014 www/
              
         然后就是要修改一些文件的内容,以达到我们安装的luci要独立于系统自带的,注意以下这些文件都是/data/目录下的

图片 4.png
图片 6.png 图片 7.png 图片 5.png

启动
             /etc/init.d/lighttpd  enable
             /etc/init.d/lighttpd  start
       如果没有报错,浏览器访问 http://192.168.31.1:8080  


点评

内核模块兼容问 上文说小米原生固件采用的是openwrt 12.09,但是其linux 内核是2.6.36,这个太老了,目前 openwrt 官方的12.09都已经是3.x的内核了,所以目前已知的软件源根本没有2.6.36的内核模块软件包(  详情 回复 发表于 2016-5-14 11:29
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2016-5-14 11:29 | 显示全部楼层
本帖最后由 zhangzhenhu 于 2016-5-14 11:42 编辑
zhangzhenhu 发表于 2016-5-14 11:26
安装原生luci大体思路       luci的web程序的入口就是/www/cgi-bin/luci,这个是lua脚本语言编写的,打开 ...

内核模块兼容问                 上文说小米原生固件采用的是openwrt 12.09,但是其linux 内核是2.6.36,这个太老了,目前 openwrt 官方的12.09都已经是3.x的内核了,所以目前已知的软件源根本没有2.6.36的内核模块软件包(那些kmod-xxx开头的软件包),以至于一些依赖kmod-xxx的软件无法安装,这也就是为什么新版本的ss不支持,而且多拨的功能也无法支持了,mwan3依赖一些kmod。
         解决的方法就是自己编译,我尝试了很久了,熬夜好几天,都没成功,各种问题~~,主要是缺少现成的sdk。谁有兴趣可以一起研究下,目前我有些进展,但是一些软件包编译不过去,版本太低了~~
关于ss的特殊问题
       2.1.4s-s-libev-spec_2.1.4-1_ramips_24kec.ipk)以后的版本依赖一些内核模块,无法安装的,所以要用的2.1.4的版本。
       其对应的luci 界面配置appluci-app-s-s-spec_xxx)是和s-s-libev-spec的版本严格对应的,用最新的luci-app-s-s-spec_是不兼容s-s-libev-spec_2.1.4-1_ramips_24kec.ipk的,但是我尝试了好几个版本,发现还是最新的版的luci-app-s-s-spec提供的web配置页面比较灵活和方便,所以我自己修改了 etc/init.d/s-s文件,使得s-s-libev-spec_2.1.4-1_ramips_24kec.ipk兼容了s-s-libev-spec_2.1.4-1_ramips_24kec.ipk
       所以如果你重新安装ss,一定不要奇怪可能会发生某些问题哦!!!
       对了,还有,ss本地监听端口不要写1080,会失败,选一个8千的端口吧,
图片 8.png
小米系统里已经有Dnsmasq了,不用你自己再安装。
我是用Dnsmasq+chinadns + ss fan wall,貌似不太稳定,经常还是打不开,也不知道怎么回事,有了解的提示我一下啊!


打包下载                  


  下载地址

         安装包解压后三个文件
-rw-r--r-- 1 zhangzhenhu  staff    19M 5 14 09:17 miwifi3-luci-tiger.tar   luci的安装包
-rw-r----- 1 zhangzhenhu  staff    32M 5  4 18:02miwifi_r3_all_55ac7_2.11.20.bin   小米的开发版固件用开开启ssh
-rw-r--r-- 1 zhangzhenhu  staff   795B 5 14 09:10 openssh.sh               开启ssh的一个脚本

         安装方法
1.   先开启ssh
a)      刷小米的开发版固件miwifi_r3_all_55ac7_2.11.20.bin
b)     如果你自己电脑是linux、mac、或者虚拟机linux,执行sh  ./openssh  ${ stok} ${newPwd}  ${ oldPwd}  ;是windows的话就用浏览器去一条条打开吧;如果你没看懂,按照这个教程来https://www.right.com.cn/forum/fo ... 51&orderby=dateline
c)      把miwifi3-luci-tiger.tar 拷贝到路由器的/data/目录下。不会?自己看论坛或者放弃吧,我太累了,不想解释了。
d)     解压miwifi3-luci-tiger.tar 执行命令tar –xf miwifi3-luci-tiger.tar
e)      cd  miwifi3-luci-tiger/ && sh -x   install.sh
f)       坏消息,这个安装脚本我没测试过,要测试我需要把我的路由器再刷回官方固件,完全重新来一遍,太累了,不搞了~~,你如果失败了找我,我再修正吧。

未完待续
        

后面我还在开展两条线,一条线是上面说的编译2.6.36的kmod模块;另一条线是openwrt15.05的版本添加小米路由3的支持,这样可以直接换了。目前两条线都没成功呢,熬夜好久了,不想搞了,太累了~~


我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-5-14 11:32 | 显示全部楼层
生命在于折腾。
我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-5-14 11:44 | 显示全部楼层
楼主这么绕啊,就算cc适配了,MTK的无线也不咋样,再说nand识别也不难啊

点评

关键是我不懂、不会~~嵌入式我完全门外汉,最近两周才接触openwrt,毛都不会~~~  详情 回复 发表于 2016-5-14 11:49
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2016-5-14 11:49 | 显示全部楼层
血洗刀锋 发表于 2016-5-14 11:44
楼主这么绕啊,就算cc适配了,MTK的无线也不咋样,再说nand识别也不难啊

关键是我不懂、不会~~嵌入式我完全门外汉,最近两周才接触openwrt,毛都不会~~~
我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-5-15 12:09 | 显示全部楼层
支持,但需要等到高考之后才能玩
我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-5-16 10:02 | 显示全部楼层
期待楼主,此贴必火!!!
我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-5-16 15:42 | 显示全部楼层
楼主,我要当你的小白。
我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-5-17 19:30 | 显示全部楼层
帖子给我们的小米路由3用户开辟了一个新的方法 虽然新买的路由3已经给SSH了(能力有限) 但还是不敢继续深入了 就是怕变成砖相信等不久的以后会有更好的开发资料
我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-5-26 23:49 | 显示全部楼层
鼓励下楼主!!!
我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-5-27 07:07 | 显示全部楼层
我有一个小米3路由,由于不能去广告而放着
我的恩山、我的无线 The best wifi forum is right here.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|Archiver|恩山无线论坛 ( 苏ICP备05084872号-1 )

GMT+8, 2019-6-19 03:31

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表