小米路由器mini 安装openWrt+更新源+挂载U盘+安装python

来源:互联网 发布:netfits云墙 mac 编辑:程序博客网 时间:2024/05/11 18:24

刚刚入手一个小米路由器mini,本来就是打算装openWrt的,想试试玩玩看。


刷openwrt的基本流程是参考的如下博主的文章

http://www.right.com.cn/forum/thread-147929-1-1.html


没有遇到什么严重问题,但是一些细节需要注意。

(0)小米路由器mini和小米路由器,不要搞混了。。。。

(1)截止到今天,小米路由mini的firmware版本为0.7.51,我的是0.7.50。一定要先刷入一个开发板而不是稳定版,并且能够支持上面博主所说的mtd命令的版本。

若不使用低版本,在尝试mtd -r write xxxx.bin firmware时会找不到firmware的错误。

我使用的是0.7.15版,这个版本可以从如下地址获得。

http://www.miui.com/thread-1776173-1-1.html

(2)刷机之前需要做一次路由器绑定,然后连接上路由器,进入miwifi.com,再进入“下载”页面。找到页面下面的“SSH工具”那个按钮,此时会有一个root密码需要记下来,后面用。

(3)刷miwifi_ssh.bin时,一定要保证U盘里没有残留miwifi.bin。

(4)貌似一定要用WinSCP这个软件将待刷入的固件传送到小米路由mini上,记得选择SCP模式。

(5)刷完以后,重新连接小米路由器mini,这次使用的是192.168.1.1的ip,要配置好ssh,之后才能通过电脑ssh上去。我选择的是Dropbear接口为wan。我ssh工具用的是SecureCRT,并不是上面博主说的putty。


好,总的来说刷机过程还是没有痛苦的。系统小,刷起速度也快。刷的时候还在和女朋友看关于大脑的纪录片。看完了以后想,怎么也要搞个软件源才行吧,于是就ssh上小米路由mini。上来就

opkg update


好嘛,没有一个源是可以的。。。于是着手手动改源。目前我刷的openWrt是PandoraBox 14.09 r355,是基于openWrt Barrier Breaker的。使用的原地址是

http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/


这里面有好几个文件夹,将这些源都写到/etc/opkg.conf里。我的opkg.conf文件如下

rc/gz barrier_breaker_base http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/base src/gz barrier_breaker_management http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/managementsrc/gz barrier_breaker_oldpackages http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/oldpackagessrc/gz barrier_breaker_packages http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/packages      src/gz barrier_breaker_routing http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/routing      src/gz barrier_breaker_telephony http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/telephony    dest root /data                                                                                                          dest ram /tmp                                                                                                            lists_dir ext /data/var/opkg-lists                                                                                       option overlay_root /data

保存后运行opkg update。发现源是可以链接上了,但是报出类似于如下错误

Package xxx version xxx has no valid architecture, ignoring.

一些朋友也遇到了

http://www.right.com.cn/FORUM/thread-128532-1-1.html


google了一下原因,发现是源指定的architecture和路由上刷好的系统的不一致造成的。一些解决方案可以从如下地址找到

http://wayjam.me/post/two-problems-about-install-package-on-openwrt.md

其实在openWrt官网上已经对opkg进行了详细的说明,上面博主的做法也是和openWrt官网推荐的方法相一致(http://wiki.openwrt.org/doc/techref/opkg),意思就是在/etc/opkg.conf文件中加入对系统支持的architecture的设置,具体方法是添加如下几行

arch all 100arch <arch类型1> 200arch <arch类型2> 300

官网的意思是告诉opkg,arch类型2的包可以兼容的装在arch类型1的系统上。那么问题来了,现在的arch类型是什么呢?折腾了好久,我尝试过查看系统的arch,利用

uname -a


我得到

Linux PandoraBox 3.10.64 #20 Wed Jan 14 00:19:50 CST 2015 mips GNU/Linux


就是说系统的mechine type 是mips的,这个硬件描述我也不是很懂,再看看uname -p,查看一下processor type,好嘛。。。显示是这样的


整个人都不好了有木有!!这unknown算是什么?

再看cat /proc/cpuinfo


也就是说,小米路由mini使用的是联发科的MT7620A型号的芯片,机器类型属于mips类的,这也与官网的源地址相一致,

于是我又尝试了

arch all 100arch mips 200arch mips2 300arch ramips 400arch unkown 500

入此种种甚至是待arch unkown的脑残设置,每次都有opkg update,每次都要看那一大片报错信息。夜已经深了,为了不打扰室友,在客厅里用的笔记本电池,电脑的电也剩一半了。突然灵机一动,想如果能确定系统指定的arch,不就不就不用乱试各种arch了么,虽说最可能的ramips 的architecture都不行,但是总该在什么地方写着正确的arch的配置吧。于是开始翻官网的源目录,发现疑似文件


下载下来,notepad++打开查看,配置项目还是很多的,直接搜索“ARCH”,找到了这样的一行


我只能说,我擦了,为毛要有一个"_24kec"的后缀!?


把脑残的opkg.conf文件改成


再次opkg update,终于没有错误了!!!!yeah


那么整个什么软件安装一下试试看呢,先来python吧!其实我只想装一个python而已。。。。google一下发现貌似要先装libc库,貌似还要手动装(可参考这篇博客中关于安装Transmission的描述,http://blog.sina.com.cn/s/blog_56a70c040102vaay.html),opkg自己装不了。于是在官网的源列表里找libc,很容易找,就在base文件夹里


下载下来。从这个libc名字上也看到,确实系统的arch是ramips_24kec,看来是自己too森破too naive啊


scp到路由器/tmp,然后寻思着,这玩意应该装在挂载的u盘上吧,要不根文件系统的空间不够啊,于是根据那个装Transmission的博主的做法,外加自己google到的其他方法,尝试将库安装到u盘上。openWrt官网上对调整opkg安装位置做了描述,还是改/etc/opkg.conf文件,添加dest设置,用一个别名来代替一个地址位置,在opkg install时用-d参数来控制opkg的安装位置。我就填了两个dest,一个是到U盘的根上,一个是到u盘里新创建的opt目录。这么做有个原因是,openWrt刚刷好的系统里根上是没有opt路径的,可以做一个符号链接从U盘的opt到根上。我的/etc/opkg.conf文件最后变为


然后用opkg安装libc,

opkg -d usb install libc_xxxxx


好嘛,又报错,错误意思是做符号链接时出现了“Operation not permitted”,这个网友遇到了一样的错误

http://www.dd-wrt.com/phpBB2/viewtopic.php?p=766847


完全不知道为什么,关键是,手动做符号链接是可以的,可以将u盘上的文件链接到路由器上。确实没问题。那么问题又来了,这是TM怎么个情况??google了许久,然后在一个德语论坛上找到了一个解决方案,貌似外部挂在的usb存储设备,必须要使用ext格式才能作为opkg安装时符号的链接点。这点在openWrt官网关于扩展根文件系统的描述中都没有找到。

http://forum.nas-portal.org/archive/index.php/t-14384.html

http://wiki.openwrt.org/doc/howto/extroot/extroot.theory


已经是夜里三点了。。。所以我果断选择先睡一觉。。。。主要还是因为手头没有舍得格式化的u盘。。。。。


第二天,找了个不用的microSD卡,加了个读卡器,格式化成了ext4格式,查到小米路由上,再来opkg安装,没问题了!yeah

当然也不忘改一下环境变量,参考这个博主的做法

http://blog.jkey.lu/2013/04/22/openwrt-install-package-on-usb-flash-disk/


一运行python,果然给力,打个hello world,果然可以,来个方向键。。。擦,方向键乱码。。。

好嘛,这又是什么情况。。。

google了一圈,发现貌似是readline的问题,于是opkg了readline的包,还有python-ncurses包,都没用。于是想是不是搞个ipython能好一点。opkg了一下ipython,竟然有!安装,成了运行,报module import错误,擦,这也行!?

查看了一下python的lib,发现确实没有ipython所要import的package,怎么回事,这python安装的不完整???看来要自己编译python了,没想到才第二天就要搞交叉编译,痛苦可能来的太早啊。上openWrt,看看如何develop,从git上搞下来现在trunk代码,按照documentation的方法一步一步的实践,发现,python的编译配置就在feeds/oldpackages/python里,打开makefile看一看,发现openWrt把很多python的package做成独立的ipk文件放到源上了,若是找不到某个package,直接opkg安装就可以了。ipthon说是缺少pydoc,这个对应python-doc,opkg安装,再次运行ipython,起来了。


悲剧的是,方向键还是不能用,看来真的要重新编译python才行了。。。。今天就到这了,搞不动了。

2 0