前言: 在前一篇博文中,笔者实现了openwrt连接电信宽带的目标,这次决定对一款mini路由器进行修改,使其也能支持电信宽带。
一、设备介绍
1、硬件部分
配置是:RT5350的芯片mipserl架构; 16M RAM; 4M Flash
可以看到,这个路由器在除去电源部分之后的体积的确的相当地小,支持USB供电。
拆机很困难,只有四个卡扣,卡的很死,当时是抱着拆坏拉倒的心理拆的(因为我先刷了uboot,进不去rom,以为变砖了,然后拆的时候胆子就特别大)
(第三张图来自他人博客,地址在最后给出)
二、刷机固件
1.固件准备
下面的固件也来源于网络上某位大神,其博客地址在最后给出。
原版uboot: uboot_lenovo_r2100_16m_wan.img.tar
原版固件: Lenovo_R2100_V1.55.tar
ralink uboot:uboot_ralink_sdk3600_32m_all.img.tar
openwrt固件:rt5350_r2100_v1_full.tar
2.正式刷机
我的经历:
原版固件 --> web管理页面-固件升级 --> 刷ralink uboot --> uboot成功刷入,无法加载原有系统 --> 连TTL,进uboot,通过TFTP刷入openwrt固件 --> 完毕
1)连接TTL线,只要连接TX、RX两根针脚即可。线序什么的不知道,就两种情况,都试一下就知道了,反正不会弄坏板子的。
因为笔者没什么焊接技术,也没有焊接设备,所以只能一切从简。。。⊙﹏⊙b汗 (上图中,红色为RX,接TTL转接器的TX针脚;蓝色为TX,接TTL的RX针脚;最左边那个被切割成一半的是GND,这个还是要接的。。。)
2)PC上运行screen连接串口,频率为57600。我这里使用的是USB-TTL设备。
$ sudo screen /dev/ttyUSB0 57600
然后就可以根据ralink的uboot提示进行操作了,选择2,通过TFTP刷写固件。
3)通过网线连接路由器和PC,PC端ip设为192.168.1.100,并运行tftp服务器,准备好要刷写的固件。
路由器端,进入uboot的第二个选项之后,首先输入设备ip:192.168.1.1,然后tftp服务器ip:192.168.1.100,最后输入固件名称,回车即可。
推荐刷机顺序(仅个人猜测,待证实):
原版固件 -> web管理页面-固件升级 -> 刷写openwrt固件
之所以推荐这样刷机,完全是因为笔者今天傻比地直接刷了uboot,然后不得不拆机连TTL,花了很大功夫才弄好。
(2015/07/09更新)
再次实验证明,原版uboot固件即是ralink uboot sdk3600。
如果从原版固件的web升级页面直接刷写uboot,原系统会无法引导,只能通过tftp重新刷写固件。
另外,通过原版固件web升级页面直接刷openwrt会失败,初步认定为内存溢出。(实验发现,通过web上传过大的固件,提供web服务的Goahead程序会挂掉,导致无法刷机,同时web管理页面无法访问,但是路由器其他组件还在正常运行,重启即可)
所以目前易操作的简单刷机方案如下:
拆机,连接TTL --> 进入 uboot(已自带ralink sdk3600),选择第2个选项 --> 通过tftp刷openwrt
Ps:刷完之后会自动加载系统,你会发现系统运行出奇地卡。实验发现,在断开TTL转接器的情况下启动系统就OK了,原因不明。
三、交叉编译工具链的编译
因为这次这个RT5350芯片没有在openwrt.org找到编译好的toolchain,所以只能自己编译工具链。
rt5350的架构是mipsel,或者说mips dsp,有什么区别我也不清楚。反正之前那个用于brcm63xx的mips工具链编译出来的程序在这个上面无法运行。
下面我使用了buildroot来生成工具链
1.下载buildroot
1 2 |
$ wget "http://www.buildroot.org/downloads/buildroot-2015.05.tar.gz" $ tar zvxf buildroot-2015.05.tar.gz |
2.配置make选项
1 2 |
$ cd buildroot-2015.05 $ make menuconfig |
这里我们只需要修改两个地方即可:
1 2 |
1)Target Architecture,选择 MIPS(little endian) 2)Target Architecture Variant,选择 mips 32 |
然后保存,退出。
3.开始编译
1 2 |
$ make # 该过程会根据需要下载一些东西 |
4.将toolchain独立复制出来,添加path
1 2 3 |
$ cp -r ~/buildroot-2015.05/output/host/usr/* ~/toolchain-mipsel $ export PATH=$PATH: ~/toolchain-mipsel/bin # 也可以写进 ~/.profile、/etc/profile、~/.bashrc之类的配置文件中 |
5.开始编译ppp
1 2 3 |
$ cd ~/openwrt/ppp-2.4.7 $ make clean $ make CC=mipsel-linux-gcc LD=mipsel-linux-ld |
6.将相应文件复制到路由器上
可以参考Linux下突破校园天翼宽带客户端限制(已移植OpenWRT)。
这里其实遇到一个新问题,就是/root分区过小。即使删除旧的pppd,仍然塞不下新的pppd.
1) strip
1 2 |
$ mipsel-linux-strip ppp-2.4.7/pppd/pppd $ mipsel-linux-strip ppp-2.4.7/pppd/plugins/rp-pppoe/rp-pppoe.so |
然后发现还是不够。。。于是我机智地想到了upx!
2)upx
1 |
$ upx -9 ppp-2.4.7/pppd/pppd |
OK, Done! 最后复制到路由器上,一次拨号成功!
四、tftp服务器配置
下面的方法适用于debian系的发行版
1 2 3 |
$ sudo apt-get update $ sudo apt-get install tftpd tftp xinetd # 先安装相应的软件 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ vim /etc/xinetd.d/tftp # 编辑配置文件,写入以下内容 service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /home/king/tmp #这里是你的tftp服务目录 disable = no per_source = 11 cps = 100 2 flags = IPv4 } |
1 2 3 4 5 6 |
$ sudo service xinetd restart # 重启xinetd服务 $ tftp 127.0.0.1 tftp> get test.file # 测试是否可用 |
五、其他说明
1、其实这个路由器的官方原版固件也是一个linux,虽然被阉割地厉害,但是理论上还是可以手动替换pppd程序实现电信拨号。
以后再有这个设备时,可以尝试一下。如果成功了,那么又减少了刷机的步骤。但是这样看不到系统日志,也不是很好。
2、这次发现一个问题,实际上buildroot给我编译了一个完整的基于mipsel的Linux内核。。。所以花了很长时间以及硬盘空间。
我其实只想要一个可运行的toolchain,其他的对我来说都没有用,但是并没有深入了解buildroot的用法,下次再用到的时候再说吧。
六、参考资料
1、详细拆机以及刷机记录:号称最小的路由器:联想 R2100
2、buildroot官方文档:buildroot文档
《Lenovo R2100刷机以及编译pppd实现连接天翼宽带》有1个想法