TP-LINK WR720N 折腾记!(1)

1.购买: 从天猫花99买回一台TPLINK  WR720N;

 

2.刷机:刷OpenWrt选这个,为了可以通过SSH工具登录:

https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/openwrt-ar71xx-generic-tl-wr720n-v4-squashfs-factory.bin

https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/openwrt-ar71xx-generic-tl-wr720n-v4-squashfs-sysupgrade.bin

或者点击下面下载:

openwrt-ar71xx-generic-tl-wr720n-v4-squashfs

Openwrt针对每种路由器提供两个固件文件,factory.bin用于路由器原厂固件初次改刷为Openwrt使用,sysupgrade.bin用于从旧版本Openwrt升级到新版使用。

TL-WR720N初次刷Openwrt方法:登录Web管理界面,选择系统工具 -> 软件升级,选择Openwrt固件文件,点击升级即可(注意坑:1.要用网线方式连接WR720N LAN和电脑LAN口后操作,不要用WiFi,因为WIFI热点刷机过程中会消失,我还以为刷机后变成砖了。2.升级前看看原始固件版本,如果版本号是V4,则需要用上面的固件,现在网络上最多的是V3版本,那是无法升级进去的)。
刷机后用Putty(百度putty可下载),选择SSH协议登录192.168.1.1,用户名为root 密码为空,(注意坑:网上有的写是telnet 192.168.1.1,我这里一直连不上),登录后更改密码 passwd root  输入新密码即可。
改完密码后打开WinSCP(百度WinSCP可下载),文件协议选择SCP(注意坑:默认协议是登不上的),输入IP地址、用户名、密码登录。上传openwrt-ar71xx-generic-tl-wr720n-v4-squashfs-sysupgrade.bin到tmp目录下,然后在Putty执行下面命令刷升级包,选择 /tmp 目录的原因是:/tmp 目录挂载于内存中,而且容量较大,这样刷写固件时不会跟 Flash 产生冲突:
mtd write /tmp/openwrt-ar71xx-generic-tl-wr720n-v4-squashfs-sysupgrade.bin firmware

 3.配置网络,可以访问外网

OpenWRT烧写完毕了,但没有熟悉的管理界面给你操作。如果你熟悉命令,实际上此时路由器已经可以工作了。

比如我只用网线,网络拓扑如下,LAN接我开发用的电脑,WAN接家庭路由器:

无标题7

 执行ifconfig,eth0(WAN)直接获取到了IP,省却了我配置网络的烦恼:
root@OpenWrt:~# ifconfig
br-lan Link encap:Ethernet HWaddr 3C:46:D8:B3:8B:93
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::3e46:d8ff:feb3:8b93/64 Scope:Link
inet6 addr: fd15:bcc1:2490::1/60 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1023 errors:0 dropped:0 overruns:0 frame:0
TX packets:657 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:163938 (160.0 KiB) TX bytes:132483 (129.3 KiB)

eth0 Link encap:Ethernet HWaddr 3C:46:D8:B3:8B:92
inet addr:192.168.48.57 Bcast:192.168.48.255 Mask:255.255.255.0
inet6 addr: fe80::3e46:d8ff:feb3:8b92/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:585 errors:0 dropped:3 overruns:0 frame:0
TX packets:376 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:116871 (114.1 KiB) TX bytes:82809 (80.8 KiB)
Interrupt:4

eth1 Link encap:Ethernet HWaddr 3C:46:D8:B3:8B:93
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1023 errors:0 dropped:0 overruns:0 frame:0
TX packets:632 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:178260 (174.0 KiB) TX bytes:129873 (126.8 KiB)
Interrupt:5

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:1290 errors:0 dropped:0 overruns:0 frame:0
TX packets:1290 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:88357 (86.2 KiB) TX bytes:88357 (86.2 KiB)

 ping百度,网络是通的:
root@OpenWrt:~# ping www.baidu.com
PING www.baidu.com (14.215.177.37): 56 data bytes
64 bytes from 14.215.177.37: seq=0 ttl=55 time=7.268 ms
64 bytes from 14.215.177.37: seq=1 ttl=55 time=15.530 ms
64 bytes from 14.215.177.37: seq=2 ttl=55 time=7.785 ms
64 bytes from 14.215.177.37: seq=3 ttl=55 time=7.943 ms
64 bytes from 14.215.177.37: seq=4 ttl=55 time=8.673 ms
64 bytes from 14.215.177.37: seq=5 ttl=55 time=7.617 ms
64 bytes from 14.215.177.37: seq=6 ttl=55 time=6.980 ms
64 bytes from 14.215.177.37: seq=8 ttl=55 time=7.480 ms
64 bytes from 14.215.177.37: seq=10 ttl=55 time=7.478 ms
64 bytes from 14.215.177.37: seq=11 ttl=55 time=7.426 ms

 未修改,默认OpenWRT网络配置:
vi /etc/config/network

config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'

config globals 'globals'
option ula_prefix 'fd15:bcc1:2490::/48'

config interface 'lan'
option type 'bridge'
option ifname 'eth1'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
option ip6assign '60'

config interface 'wan'
option ifname 'eth0'
option proto 'dhcp'

config interface 'wan6'
option ifname 'eth0'
option proto 'dhcpv6'

为了让手机用能通过其上网,配置无线网络部分:
//打开无线
uci set wireless.@wifi-device[0].disabled=0

//设置功率为17dbm 太高会烧无线模块
uci set wireless.@wifi-device[0].txpower=17

//设置无线信道为8
uci set wireless.@wifi-device[0].channel=8

//开启40M频宽
uci set wireless.@wifi-device[0].htmode=HT40-
uci set wireless.@wifi-device[0].noscan=1

//设置无线模式为ap
uci set wireless.@wifi-iface[0].mode=ap

//设置无线SSID
uci set wireless.@wifi-iface[0].ssid=xxxxxx

//无线链接到lan上,不加这行貌似也没问题
uci set wireless.@wifi-iface[0].network=lan

//设置加密为WPA2-PSK
uci set wireless.@wifi-iface[0].encryption=psk2

//设置无线密码
uci set wireless.@wifi-iface[0].key=xxxxx

//应用
uci commit

//重新启动网络
/etc/init.d/network restart

WLAN0为WIFI AP的interface:

root@OpenWrt:/# ifconfig
br-lan Link encap:Ethernet HWaddr 3C:46:D8:B3:8B:93
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::3e46:d8ff:feb3:8b93/64 Scope:Link
inet6 addr: fd15:bcc1:2490::1/60 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:9578 errors:0 dropped:0 overruns:0 frame:0
TX packets:11658 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:920341 (898.7 KiB) TX bytes:11597606 (11.0 MiB)

eth0 Link encap:Ethernet HWaddr 3C:46:D8:B3:8B:92
inet addr:192.168.48.57 Bcast:192.168.48.255 Mask:255.255.255.0
inet6 addr: fe80::3e46:d8ff:feb3:8b92/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:129571 errors:0 dropped:1531 overruns:0 frame:0
TX packets:45615 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:53443565 (50.9 MiB) TX bytes:6102567 (5.8 MiB)
Interrupt:4

eth1 Link encap:Ethernet HWaddr 3C:46:D8:B3:8B:93
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:39880 errors:0 dropped:0 overruns:0 frame:0
TX packets:49504 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5628871 (5.3 MiB) TX bytes:34677757 (33.0 MiB)
Interrupt:5

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:1586 errors:0 dropped:0 overruns:0 frame:0
TX packets:1586 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:113722 (111.0 KiB) TX bytes:113722 (111.0 KiB)

wlan0 Link encap:Ethernet HWaddr 3C:46:D8:B3:8B:91
inet6 addr: fe80::3e46:d8ff:feb3:8b91/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:9080 errors:0 dropped:0 overruns:0 frame:0
TX packets:11117 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:911226 (889.8 KiB) TX bytes:11742141 (11.1 MiB)

root@OpenWrt:/# cat /etc/config/network

config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'

config globals 'globals'
option ula_prefix 'fd15:bcc1:2490::/48'

config interface 'lan'
option type 'bridge'
option ifname 'eth1'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
option ip6assign '60'

config interface 'wan'
option ifname 'eth0'
option proto 'dhcp'

config interface 'wan6'
option ifname 'eth0'
option proto 'dhcpv6'

查看WiFi的配置:

root@OpenWrt:/# cat /etc/config/wireless

config wifi-device 'radio0'
option type 'mac80211'
option hwmode '11g'
option path 'platform/ar933x_wmac'
option disabled '0'
option txpower '17'
option channel '8'
option htmode 'HT40-'
option noscan '1'

config wifi-iface
option device 'radio0'
option network 'lan'
option mode 'ap'
option ssid 'DennyAP'
option encryption 'psk2'
option key '12345678'

编辑/etc/sysupgrade.conf文件,添加要保护文件目录,避免固件升级覆盖!
root@OpenWrt:~# vi /etc/sysupgrade.conf
修改后如下图

## This file contains files and directories that should
## be preserved during an upgrade.
# /etc/example.conf
# /etc/openvpn/
/etc/config/
 到此为止,如果你不想继续折腾,此时已经安装完原版的OpenWRT固件并且可以正常使用了。
如果想继续折腾,继续往下走,先把uboot刷成不死uboot,以免硬件变砖!

4.什么是OpenWRT不死 uboot?如何烧写不死uboot

意思是 Flash 引导启动的uboot 程序是不可修改的所以不死 , openwrt 系统的分区可以随便你怎么折腾 。
可以把 "不死uBoot " 理解成 电脑的 BIOS , 只有通过特定途径才可以修改的uboot 的程序,bios 就是uboot , openwrt系统的分区就是硬盘.

网上传的不死uboot是在https://github.com/pepe2k/u-boot_mod上面做些汉化和修改。
根据GPL,修改者应该提供源码。但作者拒绝提供。
以下是他原话:
hackpascal:我不会公布源代码的,我自己开发的bootloader很快就会完成了,到时候就会停止更新uboot了。

地址:http://www.right.com.cn/forum/thread-136444-1-1.html

 

1.打开https://github.com/pepe2k/u-boot_mod/releases/tag/2014-11-19,下载U-Boot_1.1.4_modification_for_routers_2014-11-19.tar.gz,解压出来是U-Boot_1.1.4_modification_for_routers_2014-11-19.tar.gz,继续解压,然后把U-Boot_1.1.4_modification_for_routers_2014-11-19\OpenWrt Barrier Breaker 14.07 images for easy U-Boot upgrade\TP-Link TL-WR720N v3 CH下面的两个bin文件,U-Boot_1.1.4_modification_for_routers_2014-11-19\U-Boot images\TP-Link TL-WR720N v3 CH\uboot_for_tp-link_tl-wr720n_v3_CH.bin用WinSCP上传到/tmp目录下,

 

2.在putty下分别执行:

mtd write /tmp/openwrt-ar71xx-generic-tl-wr720n-v3-squashfs-factory.bin  firmware

mtd write /tmp/openwrt-ar71xx-generic-tl-wr720n-v3-squashfs-sysupgrade.bin firmware

 

3.reboot

 

4.重启后putty和winscp都无法登陆,这是由于openWRT默认开启telnet但是没开启ssh,当配置了用户名和密码后就默认开启ssh关闭了telnet。
先设置密码:

 === IMPORTANT ============================
Use 'passwd' to set your login password
this will disable telnet and enable SSH
------------------------------------------

BusyBox v1.22.1 (2014-11-19 15:40:56 CET) built-in shell (ash)
Enter 'help' for a list of built-in commands.

_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
BARRIER BREAKER (Barrier Breaker, r43286)
-----------------------------------------------------
* 1/2 oz Galliano Pour all ingredients into
* 4 oz cold Coffee an irish coffee mug filled
* 1 1/2 oz Dark Rum with crushed ice. Stir.
* 2 tsp. Creme de Cacao
-----------------------------------------------------
root@OpenWrt:/# passwd
Changing password for root
New password:
Bad password: too weak
Retype password:
Password for root changed by root

然后执行

u-boot-upgrade //解锁uboot分区(即烧写不死uboot)
 

root@OpenWrt:/# u-boot-upgrade

=================================================================
DISCLAIMER: you are using this script at your own risk!

The author of U-Boot modification and this script takes
no responsibility for any of the results of using them.

Updating U-Boot is a very dangerous operation
and may damage your device! You have been warned!
=================================================================
Are you sure you want to continue (type 'yes' or 'no')? yes
=================================================================

[ ok ] Found U-Boot image file: uboot_for_tp-link_tl-wr720n_v3_CH.bin
Do you want to use this file (type 'yes' or 'no')? yes
[ ok ] MD5 checksum of new U-Boot image file is correct
[ ok ] Backup of /dev/mtd0 successfully created
Do you want to store backup in /etc/u-boot_mod/backup/ (recommended, type
'yes' or 'no')? yes
[ ok ] Backup of /dev/mtd0 successfully copied to /etc/u-boot_mod/backup/
[ ok ] New U-Boot image successfully combined with backup file
[info] New U-Boot image is ready to be written into FLASH
Are you sure you want to continue (type 'yes' or 'no')? yes
[ ok ] New U-Boot image successfully witten info FLASH
[ ok ] MD5 checksum of mtd0 and new U-Boot image are equal
[info] Done!

 

5.如何进入不死uboot的web界面升级:

  PC用网线连路由器LAN,设置PC IP为192.168.1.2,子网掩码为255.255.255.0 ,默认网关和DNS服务器不用设置;
     
  路由器断电,按住reset 上电(不松开reset),路由器灯闪三下后松开手;
     
  浏览器访问http://192.168.1.1

 

 

5.挂载优盘

这里有两个地雷,一定要注意,我在这里浪费太多时间!

一个是WR720N挂载优盘前,一定要把拨动开关从AP档拨动到3G档;

一个是网上查询的资料很老了,会误导人,比如:

 

opkg update
opkg install kmod-usb-storage kmod-usb-ohci kmod-usb2 kmod-usb-uhci
opkg update
opkg install block-mount block-hotplug block-extroot
opkg install kmod-fs-ext3
opkg install e2fsprogs //分区工具
mkfs.ext3 /dev/sda1 //格式化

说明:
kmod-usb-ohci对应usb1.1
kmod-usb2对应USB2.0
kmod-usb-uhci对应部分intel和VIA的usb控制器

结果一直提示:
Unknown package 'block-hotplug'.
Collected errors:
* opkg_install_cmd: Cannot install package block-hotplug.

反复重新烧写固件也不行!
最后从官网WiKi查询到:https://wiki.openwrt.org/doc/howto/usb.storage

the three opkg packages block-mount, block-extroot and block-hotplug have been merged into a single package block-mount. 

真坑爹!

实际最新版本的OpenWRT只要安装下面三个即可识别优盘:

opkg update
opkg install kmod-usb-storage block-mount kmod-fs-ext4

如果空间不够,执行如下操作重新安装清除空间:

wget http://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/openwrt-ar71xx-generic-tl-wr720n-v4-squashfs-sysupgrade.bin
sysupgrade -v openwrt-ar71xx-generic-tl-wr720n-v4-squashfs-sysupgrade.bin

优盘先格式化成ext4格式,否则mount不上来,推荐下载绿色版的MiniTool Partition Wizard在windows系统上直接格式化。

MiniToolPartitionWizardHome_xdowns

sda1/sda5/sda6/sda7就是mount上来的四个优盘分区

root@OpenWrt:~# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 2.0M 2.0M 0 100% /rom
tmpfs 13.7M 72.0K 13.6M 1% /tmp
/dev/mtdblock3 704.0K 592.0K 112.0K 84% /overlay
overlayfs:/overlay 704.0K 592.0K 112.0K 84% /
tmpfs 512.0K 0 512.0K 0% /dev
/dev/sda1 6.3M 2.0K 5.8M 0% /mnt/usb1
/dev/sda5 226.9M 2.0K 210.7M 0% /mnt/usb5
/dev/sda6 226.9M 2.0K 210.7M 0% /mnt/usb6
/dev/sda7 475.8M 2.0K 446.3M 0% /mnt/usb7

接下来讲讲如何实现在优盘上启动,用来跳出4M SNOR Flash的限制

6.添加U盘启动

这里又踩到了地雷!按照下面红色字体的做法(参考网上的方法),根本行不通,最后还是参考官方WiKi搞定!

官方WiKi的方法https://wiki.openwrt.org/doc/howto/extroot

安装依赖库

opkg update ; opkg install kmod-usb-core block-mount kmod-fs-ext4 kmod-usb-storage-extras

复制系统文件到优盘分区下:

mount /dev/sda5 /mnt/usb5 ; tar -C /overlay -cvf - . | tar -C /mnt/usb5 -xf - ; umount /mnt/usb5
解释:
-C /overlay:跳转到overlay目录下;
tar -cvf - . : 将当前目录打包到stdout(-)
| :管道,即前一命令的输出为后一命令输入
-C /mnt/usb5:跳转目录
tar -xf -: 从stdin(-)解包

创建fstab模板:block detect > /etc/config/fstab ; vi /etc/config/fstab

创建swap分区:

mkswap /dev/sda1
swapon /dev/sda1
修改 /etc/config/fstab,主要修改:enabled '0' → enabled '1' /option targe
例如我的修改后内容如下:

root@OpenWrt:~# cat /etc/config/fstab
config 'global'
option anon_swap '0'
option anon_mount '0'
option auto_swap '1'
option auto_mount '1'
option delay_root '5'
option check_fs '0'

config 'mount'
option target '/overlay'
option uuid '7fdff333-c5a7-d101-20de-f133c5a7d101'
option fstype 'ext4'
option enabled '1'

config 'swap'
option device '/dev/sda1'
option enabled '1'

config 'mount'
option target '/mnt/usb6'
option uuid 'f8efdb40-c5a7-d101-b005-d840c5a7d101'
option enabled '1'

config 'mount'
option target '/mnt/usb7'
option uuid 'fc6d464a-c5a7-d101-f04c-424ac5a7d101'
option enabled '1'

重启后观察系统分区大小是否改变:

root@OpenWrt:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 2048 2048 0 100% /rom
tmpfs 14028 644 13384 5% /tmp
/dev/sda5 232311 1006 214761 0% /overlay
overlayfs:/overlay 232311 1006 214761 0% /
tmpfs 512 0 512 0% /dev
/dev/sda6 232311 2 215765 0% /mnt/usb6
/dev/sda7 487237 2 457035 0% /mnt/usb7
root@OpenWrt:~# mount
/dev/root on /rom type squashfs (ro,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,noatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime)
/dev/sda5 on /overlay type ext4 (rw,relatime,data=ordered)
overlayfs:/overlay on / type overlay (rw,noatime,lowerdir=/,upperdir=/overlay/upper,workdir=/overlay/work)
tmpfs on /dev type tmpfs (rw,nosuid,relatime,size=512k,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,mode=600)
/dev/sda6 on /mnt/usb6 type ext4 (rw,relatime,data=ordered)
/dev/sda7 on /mnt/usb7 type ext4 (rw,relatime,data=ordered)
debugfs on /sys/kernel/debug type debugfs (rw,noatime)