小米路由器mini是一款性价比相当不错的机器,官方系统是基于Openwrt系统修改优化,可用性及稳定性都很高。但是毕竟系统并不如原版Openwrt那么开放,自由度那么高。拾肆使用小米路由mini已经一年多了,一直用的官方固件,最近在收集第三方固件留作折腾备用之时,没忍住诱惑直接刷入了三方固件。
下面拾肆就将过程中的一些注意事项和心得介绍一下,包括小米路由mini获取SSH权限、刷入第三方固件、以及丢失SN后的恢复等情况,方便更多爱折腾人士。
一、获取SSH权限
SSH是Secure Shell的缩写,最初是UNIX系统上的一个程序,几乎所有类UNIX平台,都可以运行SSH,常接触Linux的朋友应该不会陌生。它是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。可以理解为windows下的3389远程登陆,只不过它默认是22端口,且不是图形界面。
小米路由器mini的系统是基于OpenWrt系统开发的,而OpenWrt本身就是一个嵌入式的 Linux 发行版,所以小米路由mini可以用Linux系统通用的SSH登陆方式进行管理。
小米路由mini默认并不开放SSH权限,需要依照以下步骤手动获取。
1.路由器绑定小米账号,方法:手机安装小米路由APP,在小米路由的WIFI下登陆小米账号按照提示绑定;或者电脑安装小米路由器客户端,按照提示登陆、绑定。
2.登陆小米官网页面http://d.miwifi.com/rom/ssh,登入与路由器绑定的小米账号,即可看到你路由器系统root用户的密码,记录下来,然后点击下载工具包。(开启SSH功能意味着放弃保修资格,所以请慎重,工具包使用方法:小米路由器mini需升级到开发版0.3.84及以上。稳定版不支持。)
3.下载到一个名为
miwifi_ssh.bin
的文件,按照以下步骤即可刷入SSH。a.将下载的工具包bin文件复制到U盘(FAT/FAT32格式)的根目录下,保证文件名为
miwifi_ssh.bin
;b.断开小米路由器的电源,将U盘插入USB接口;
c.按住reset按钮之后重新接入电源,指示灯变为黄色闪烁状态即可松开reset键;
d.等待3-5秒后安装完成之后,小米路由器会自动重启,然后就开启了SSH功能。
4.有网友说这个方法只适合旧版的固件,新版固件因为更换了密钥,所以刷入会失败,经拾肆实验,至少当前官网最新开发版2.15.78版本是可以的。如果你刷失败了那就先通过网页后台管理界面刷入一个旧版本开发版固件吧,有网友实验0.8.39版本可用。
小米路由mini中SSH的使用方法:
Windows中下载putty软件(或者其他的SSH管理软件),填入IP地址192.168.31.1
,端口22
,连接类型SSH
。第一次登录会弹出Putty警告,点是即可。登陆,用户名root
,密码为刚才网页上记录下的密码
,输入密码时无回显。看到root@XiaoQiang:~#的时候,说明登陆成功了。
下面是一些Linux系统常用命令,可以先简单了解一下,以后的操作可能会用到。
安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last;
文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln;
系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab;
网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、 nslookup;
系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who;
其它命令:passwd、tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode等等。
如果觉得刚才获得的root密码太复杂难记,可以输入命令passwd
或passwd root
来为root用户更改密码,回车后提示输入新的密码,输入时同样无回显,回车后二次确认输入密码进行确认即可。
二、备份原生系统
因为小米路由mini内保存着路由器的SN信息(SN就是产品序列号,每个机器有一个唯一的SN码,小米路由mini反面的标签上,条形码的下面就可以看到本台路由器的SN码了)。在使用官方固件的时候通过APP绑定账号绑定路由器就是通过这个SN码来的,所以如果以后还想要刷回官方系统,那么有必要备份下原有的信息。如果你没有备份,并且刷回原生系统时丢失了sn码,可以按照《小米路由mini恢复sn及ssh权限》方法来恢复。
强烈建议,在刷第三方固件前,有编程器的先用编程器备份整个16M的FLASH到bin文件,以备不时之需。
若手头没有编程器,可以进入SSH用以下方法备份Bootloader、Config、Factory、Bdata等各分区数据到文件。
输入命令cat /proc/mtd
显示:
dev: size erasesize name mtd0: 01000000 00010000 "ALL" mtd1: 00030000 00010000 "Bootloader" mtd2: 00010000 00010000 "Config" mtd3: 00010000 00010000 "Factory" mtd4: 00c80000 00010000 "OS1" mtd5: 00b1xxxx 00010000 "rootfs" mtd6: 00200000 00010000 "OS2" mtd7: 00100000 00010000 "overlay" mtd8: 00010000 00010000 "crash" mtd9: 00010000 00010000 "reserved" mtd10: 00010000 00010000 "Bdata"
运行df -h
命令查看U盘挂载点,比如U盘挂载于/extdisks/sda1,那么用以下命令备份Bootloader分区到U盘
dd if=/dev/mtd1 of=/extdisks/sda1/bootloader.bin
或者直接用以下命令将分区备份到路由器内部tmp目录,然后用WinSCP等工具拖回电脑。
dd if=/dev/mtd1 of=/tmp/bootloader.bin
用上面类似的命令将各分区全部备份为文件。
如果以后发现问题需要恢复备份的文件,用以下命令恢复,其中的路径及分区对应修改。
mtd -r write /extdisks/sda1/Bootloader.bin Bootloader
三、刷第三方固件
小米原生系统可折腾性不大,但有个优点就是,可以绑定手机APP,远程管理方便。
如果没有这方面的要求,那么完全可以刷入第三方固件,比如同样为OpenWrt的PandoraBox固件。
下载地址http://downloads.openwrt.org.cn/PandoraBox/Xiaomi-Mini-R1CM/
stable
目录是稳定版,testing
目录是开发版。下载下来的*.bin
文件可以改名为pandora.bin等简单的名字。
还需要一个工具WinSCP,它是一款在Windows环境下使用SSH的开源图形化SFTP客户端,支持SCP协议(scp就是secure copy,是通过ssh传输数据进行远程文件拷贝的,与ssh使用相同的认证方式)。
打开WinSCP,在右侧点击新建,主机名192.168.31.1
,端口22
,用户名root
,密码填你的root密码
,文件协议SCP
,点击保存然后登录,第一次登录也会弹出安全警告,点更新
即可。
登录后,左侧是本地资源管理器,右侧是路由器端资源管理器。可以看到右侧文件结构其实就是linux系统的文件结构。右侧双击tmp
目录进入,/tmp
目录是系统默认的公共临时文件存储点,一般被分配大一点的磁盘空间,这个目录的文件在路由器重启后会清空。在左侧找到刚才下载的第三方固件,拖进右侧/tmp
目录里。
接着需要继续用到ssh终端命令,可以继续打开Putty登录,也可以点击WinSCP的工具栏的控制台进入命令界面,不过这个界面会有诸多限制。
SSH登录后输入cd /tmp
命令,将当前路径切换到tmp目录,下面有两种方法刷入固件。
1.使用mtd程序,输入命令mtd write /tmp/xxxx.bin OS1 -r
(这种方法是常用的)(-r命令是指完成后自动重启)
2.使用Sysupgrade命令,输入命令sysupgrade -v /tmp/xxxx.bin
下载固件+WinSCP上传到路由器的步骤,可以直接登录SSH用以下命令代替:
wget -O /tmp/pandorabox.bin http://downloads.openwrt.org.cn/PandoraBox/Xiaomi-Mini-R1CM/stable/你所选择的固件.bin mtd -r write /tmp/pandorabox.bin OS1
这两种方法刷完自动重启,固件就刷入成功了!如果是潘多拉固件的话,默认ip是192.168.1.1,用户名root密码admin
四、刷回小米官方固件
首先进入小米路由官网下载页面http://www1.miwifi.com/miwifi_download.html,点击右边的ROM后往下拉,找到小米路由mini的开发版或稳定版固件,下载下来按照官方刷机方法刷入即可。
将固件改名为miwifi.bin,放入U盘根目录下,拔掉路由电源,U盘插入路由USB口,顶住路由reset键不放的同时插上电源开机,等到路由的指示灯连续闪烁的时候,松开reset键,等待5-10分钟即可恢复原版固件完成。刷机过程中切勿拔掉电源和U盘或做其他操作,耐心等待即可。刷完后路由的IP地址又变成了192.168.31.1,而且刷回官方固件后ssh就消失了,想要再获得ssh权限就需要到官网重新获取。
理论上还有另一种方法,但未试验,即按照刷第三方固件时提到的mtd程序刷入,应该也可成功。
五、刷入u-boot或Breed
1.uboot
u-boot是一种普遍用于嵌入式系统中的Bootloader,Bootloader是在操作系统(即刷入的固件)运行之前运行的一小段程序,相当于PC电脑的BIOS或者UEFI,用来引导操作系统。
刷入u-boot即替换了小米路由原生的Bootloader,之后可以说路由器基本就刷不死了,因为通过uboot刷固件的话,会在刷入时自动去掉固件自带的Bootloader,保证uboot本身不变不死。如果通过固件系统内的升级固件等方式进行升级的话,还是可能冲掉uboot的。
但刷入uboot后刷第三方固件有可能会覆盖掉flash中原厂的SN码信息区域,导致再刷回官方固件后绑定不了官方的APP及小米账号,也就无法再获取ssh权限。如果确实已经丢了SN信息,请按照《小米路由mini恢复sn及ssh权限》方法来操作试着恢复SN信息。
确定要刷入u-boot,那么按照以下步骤操作。
到OpenWrt官网http://downloads.openwrt.org.cn/PandoraBox/Xiaomi-Mini-R1CM/u-boot/下载小米路由mini对应的第三方uboot文件,据说uboot-xiaomi-mini-115200.bin
可能会导致路由进入恢复模式,请慎重。
刷第三方uboot之前最好先备份原有的uboot,以备以后无法刷回官方固件时有解决方案。使用Putty软件登录ssh,命令行输入以下命令:
dd if=/dev/mtd1 of=/tmp/xiaomi_uboot.bin
系统回显:
384+0 records in 384+0 records out
已经在tmp
目录下生成了一个叫xiaomi_uboot.bin
的原厂Bootloader备份。然后就可以登录WinSCP把该文件拷贝回电脑上作为备份。
然后把刚才下载的潘多拉uboot.bin传入/tmp
目录,准备刷入。按照刷入第三方固件的mtd方法稍微修改下,命令为
mtd -r write /tmp/uboot.bin Bootloader
输入后系统会自动重启,第三方uboot就刷入成功了。这时小米原生的Bootloader已经被uboot覆盖了,也就无法再用小米官方U盘方式刷入小米固件了。刷完uboot后小米路由mini的IP地址会变成192.168.1.1。
如果想进入uboot界面,拔掉路由电源,将电脑的IP地址改为192.168.1.x网段,然后顶住小米路由mini的reset键插上电源开机,等到mini指示灯连续闪烁的时候松开reset键,电脑打开浏览器进入192.168.1.1就可以进入uboot的web界面了。
2.breed
breed是另一个Bootloader程序,是用于取代uboot的选择,由恩山论坛的hackpascal开发,号称是全新的、独立的、跟u-boot平级的Bootloader,拥有以下新特性:实时刷机进度,进度条能准确反映刷机进度;Web 页面快速响应;最大固件备份速度,依 Flash 而定,一般能达到 1MB/s;免按复位键进入 Web 刷机模式;telnet 功能,免 TTL 进入 Breed 命令控制台;复位键定义测试功能;固件启动失败自动进入 Web 刷机模式;可自定义位置和大小的环境变量块。
从介绍界面来看,与u-boot大同小异,所以就当做是另一个版本的u-boot来用即可。刷入及启用过程参照u-boot过程,一模一样。
六、用Breed或u-boot刷入系统固件
刷入uboot或breed后刷入第三方固件有可能会损坏flash内原厂系统的SN记录,导致再刷入小米原生固件后绑定不了app,不能再次获得ssh权限。这时只能再通过breed或uboot刷入其他支持ssh的固件了。这种情况下千万不要使用小米固件内的系统更新来更新固件,否则可能会连breed(uboot)都破坏掉,就再无法获取ssh了。
下面是用breed刷入固件方法(uboot方法大同小异,参照即可),包括小米固件和第三方固件。
1.进入Breed Web恢复控制台,左侧菜单栏点“固件启动设置”,如果刷小米固件选择“小米mini启动”,刷其他固件默认选择“常规固件”即可。
2.选择“固件更新”,右侧根据需求选择相应固件。然后点击上传,系统读取固件信息,确认无误后点击下方的“更新”进行刷机。
当然还是可以继续使用ssh命令行方式来刷入第三方固件的,但如果已刷回了官方固件就失去了ssh权限,无法使用命令行了。
如果出现breed无法正常刷入刷回固件,那最终办法就是刷回小米原生的Bootloader,即在固件更新界面选择Bootloader更新,把之前备份的xiaomi_uboot.bin刷回去,就可以回到官方刷固件方法了。但这样官方的Bootloader不支持刷入第三方固件,而且丢失了sn信息,也无法再获取ssh权限,无法再折腾小米路由mini了。
关于丢失了sn及ssh权限的解决办法,请参见另一篇文章《小米路由mini恢复sn及ssh权限》。
[贱人就是矫情][也真是醉了]
Excellent tips. With thanks!
Truly a lot of great info.