树莓派安装OpenWrt系统

树莓派升级到4B后,新买了一个,家里原先购买的3B+一直闲置着,近期公司事情比较少,就想着将闲置的3B+试着刷入OpenWrt系统,通过一番周折总算是成功了。现将树莓派安装OpenWrt系统的过程一起分享给大家。

1、先下载固件

到OpenWrt官网下载相应的固件,Paspberry Pi 3B+的固件下载地址为:

https://downloads.openwrt.org/releases/19.07.3/targets/brcm2708/bcm2710/

下载 openwrt-19.07.3-brcm2708-bcm2710-rpi-3-ext4-factory.img.gz 文件到电脑中

树莓派安装OpenWrt系统-1

2、将下载的固件安装到SD卡

以Windows操作系统为例,先将下载文件解压成:openwrt-19.07.3-brcm2708-bcm2710-rpi-3-ext4-factory.img,用常规软件7zip等就可以完成解压任务。

再利用Win32diskimager程序,将解压后的固件写入到SD卡中(过程略)。

注:Linux系统可以采用dd命令完成SD卡的写入工作。

3、系统配置

因为树莓派只有一个网口,在OpenWrt系统中该网口已缺省设置为LAN口,要实现路由功能至少还缺一个WAN口,好在树莓派上还有多个usb口,我们可以将usb口转换成网口。先购买一个usb网线转换器,然后再安装必要的驱动,让OpenWrt系统可以识别出usb网口。

安装usb网口驱动可以通过PC先下载必要的驱动程序,然后通过WinSCP将下载文件上传到树莓派进行安装,也可以将无线接口先设置成wan口直接进行安装,下面以后一种方法进行驱动安装说明:

将SD卡插入树莓派,3B+的唯一网口接PC,接通电源启动树莓派,启动完成后在PC浏览器地址栏输入:192.168.1.1,设置密码:

树莓派安装OpenWrt系统-2

然后进入“Network – Wireless”,点Scan,设置wwan利用无线接入Internet(具体设置方法可参考本网站的另一篇文章:OpenWrt的负载均衡及多线多拨控制应用mwan3),然后进行驱动安装:

opkg update
opkg install kmod-usb-net kmod-usb-net-asix kmod-usb-net-asix-ax88179

当然,不同的usb网线转换器可能会用到不同的驱动程序,需要大家先查资料确认。

驱动成功安装后,usb网口系统就能识别了,物理接口名新增了eth1,利用新增的eth1就可以添加wan口及wan6口,这时可以删除wwan,恢复其无线发射功能了。

同理,你也可以利用其它的usb口,再多出几个物理接口,如eth2、eth3等,将这些接口与eth0桥接,组成LAN口,这时树莓派就更像个功能齐全的路由器了。

一个Frps带多个Frpc

Frp在OpenWrt系统中的应用一文中,我们讲解了Frps服务器端的安装及设置,以及OpenWrt系统下Frpc客户端的安装及设置,是一对一的关系。但如果我们有多个客户端需要进行内网穿透的话,是不是需要设置多个Frps服务器端?如果是的话,那成本就有点高了,因为大家知道Frps服务器端是需要有公网地址的,而一般来说获取公网地址都是要支付费用的,所以多一个Frps通常就会多一份费用。那是否可以一个Frps带多个Frpc呢?回答是肯定的!今天我们就来讲解一下一个Frps带多个Frpc的具体实施方法。

以两个客户端都要设置SSH服务为例(注:客户端设置中与服务器信息相关的部分略去,因为设置是一样的):

路由器1中 /etc/config/frpc 与SSH服务相关的配置如下:

config rule 'ssh_proxy'
    option name 'ssh'
    option type 'tcp'
    option local_ip '127.0.0.1'
    option local_port '22'
    option remote_port '6000'

那路由器2设置SSH服务时,是不是只要将远程服务端口改成与6000端口不一样就可以了呢?例如:改成6001:

config rule 'ssh_proxy'
    option name 'ssh'
    option type 'tcp'
    option local_ip '127.0.0.1'
    option local_port '22'
    option remote_port '6001'

即在Luci界面设置如下:

一个Frps带多个Frpc-1

按以上方式设置之后,你会发现登录远程的6001端口,并不能进入路由器2的SSH服务,即22端口。

那问题出在什么地方呢?查frp源码你可以发现frps不是以端口号来区分不同的客户端的,而是以代理服务的名称来区分的。上面的设置中,虽然路由器1的SSH服务远程端口是6000,路由器2的SSH服务远程端口为6001,但是它们的代理名称Proxy Name都是ssh,所以路由器1设置有效,路由器2的设置是无效的。因此我们需要修改一下路由器2的代理名称,例如,就改为“ssh1”:

config rule 'ssh_proxy'
    option name 'ssh1'
    option type 'tcp'
    option local_ip '127.0.0.1'
    option local_port '22'
    option remote_port '6001'

如果采用Luci配置时,在“Rules”子项目的“Proxy Name”栏输入框内点下拉菜单后选“Custom”用户自定义,输入“ssh1”回车即可。

一个Frps带多个Frpc-2

设置完成后,路由器2的SSH服务内网穿透测试完全正常(注:利用WinSCP,设置远程服务器及6001端口号访问)。

其它的像web服务、ftp服务等也都可以同样的方法进行设置,一个Frps带多个Frpc功能实现!!

路由器wan口pppoe拨号模式下如何进入光猫设置界面?

路由器wan口pppoe拨号模式下如何进入光猫设置界面?路由器采用pppoe拨号模式获取IP地址时,光猫端也将由路由模式变更为桥接模式(pppoe协议),这时连接路由器lan端的电脑,在其浏览器地址栏输入192.168.1.1,就无法像路由模式(DHCP Client)时那样进入原光猫设置界面了。

但如果你连接的路由器是刷了OpenWrt系统的,那通过简单设置就可以解决这个问题。

1、在OpenWrt路由器的Luci界面,点”Network – Interfaces”,在设置页中添加一个新wan口,例如:wan1

2、设置协议采用静态地址(static address),IP地址就设置成:192.168.1.2;网关及dns都设置成192.168.1.1;防火墙设置成与wan口一样

路由器wan口pppoe拨号模式下如何进入光猫设置界面?-1

设置完成后,电脑连接路由器任一lan口,在浏览器地址栏输入192.168.1.1就可以进入光猫设置页面了。

路由器wan口pppoe拨号模式下如何进入光猫设置界面?-2

特别建议:

因为很多路由器的缺省lan口IP地址都是192.168.1.1,为避免导致无法连接、无法识别的问题,建议将光猫的IP地址改一下,例如:将192.168.1.1改为192.168.88.1,具体方法可参见IPTV单线复用一文。

光猫超级账号及密码

当我们按光猫上标注的普通账号及密码登录后,设置页面里允许我们对光猫进行修改的权限是非常有限的,所以如果我们需要对光猫进行某些特殊要求的设定时,就必须先想办法获取光猫超级账号及密码,再以超级账户及密码的方式登录。

不同的光猫其获取超级账户及密码的方法有可能是完全不一样,我们今天只讲解HG6201T这款光猫超级账号及密码的获取方法:

电脑与光猫连接,先确认通过电脑能访问光猫的设置页,例如:在浏览器地址栏输入:192.168.1.1,会提示你输入账号及密码。

光猫超级账号及密码-1

然后在浏览器地址输入:http://192.168.1.1:8080/cgi-bin/baseinfoSet.cgi

在浏览器返回的页面里你就会发现很多信息,其中就包含下面两行:

光猫超级账号及密码-2

第一行显示的就是超级账户:telecomadmin

第二行包含了超级密码,但是要做个转换,从120&到114&对应的就是telecomadmin;

后面的部分54&对应的就是6,55&对应7,以此类推。也可以到 https://www.mokuge.com/tool/asciito16/ 网站进行十进制ASCII码与字符串之间的转换。

最终我们得到的超级密码就是:telecomadminXXXXXXXX

 

IPTV包分析

上次我们讲了如何抓取IPTV包,这次我们就来分析一下这些数据包。我们希望可以通过对IPTV包分析来获取下面这些非常有用的信息:1)与DHCP鉴权相关的信息;2)IPTV直播源地址;3)IPTV回看源地址。这次的分析过程我们都将在Windows系统下完成,而且主要会用到WiresharkNotepad++这两个软件工具,如果你的电脑还没有安装这两个软件的话,你需要事先下载并安装好。

注:这次的分析是有一定的局限性的,因为不同的地方、不同的IPTV提供商其“握手”方式、直播源格式等都可能不一样,所以这次分析主要还是提供一种方法,具体实践时你还需要根据自己的实际情况加以灵活应用。

一、获取与DHCP鉴权相关的信息

1、先用Wireshark程序打开前面抓取的IPTV包:

IPTV包分析-1

2、筛选DHCP协议,找出IPTV机顶盒与光猫第一次“握手”时的信息:

IPTV包分析-2

3、选中“DHCP Request”这一行,即“握手”时两条红行之间的这一行,然后点开”Dynamic Host Configuration Protocol (Request)”这一行的下拉箭头,就会发现DHCP鉴权时的所有信息都在里面了:

IPTV包分析-3

4、新建一个空的文本文档,然后将下面的一些信息复制后保存起来,以备后用。

1)Client MAC Address,即机顶盒的MAC地址;

2)DHCP Server Identifier,即Option 54,例如:10.242.96.1;

3)Host Name,即Option 12,是一串很长的字符串,通常是明文传输,所以直接记录就行;

4)Vendor class identifier,即Option 60,是以密码形式传输的一长数据串。选中“Vendor class identifier: ”这一行,点击鼠标右键,点“复制”,再点“…as Hex Stream”复制内容后在文档中保存。

注:有些地方的DHCP”握手“的方式可能更复杂,还会涉及Option 59、Option 61等等,如有必要也一并把它们都记录下来。

5、用IPTV单播地址播放时,我们还必须获取其它需要DHCP鉴权的IP地址。

通常来说,拿到以上DHCP鉴权信息后,我们只要在路由器上做好相应设置,就可以抛开IPTV机顶盒设备,在其它像电脑、手机、网络机顶盒上播放IPTV的组播信号了。但是播放IPTV单播地址时,仅仅以上信息还是不够的,我们还必须获取其它需要DHCP鉴权的IP地址,否则会因为交互过程无法完成,导致单播信号无法传输。

IPTV包分析-4

如何提取其它的IP地址?如上图所示,筛选http协议,然后在列表中选择记录那些与IPTV机顶盒有信息交互的服务端IP地址,例如:122.229.17.132;220.191.136.23;115.233.41.139;115.233.200.101等,统统记录下来,在后续的实际应用中我们设置时要用到这些地址。

二、获取IPTV直播源地址

1、先利用Wireshark程序提取出IPTV直播源列表信息

Wireshark打开IPTV数据包后,按http协议先进行筛选,然后点”查找“按钮,即像放大镜一样的一个图标,在新出现的查找栏中选择”分组列表“、”宽窄“、”字符串“,再输入”getchannellist“进行查找:

IPTV包分析-5

我们再选中从服务器返回机顶盒信息的那一行,即定位行的下一行,然后选中程序中间显示界面栏中的”Line-based text data: text/html (915 lines)“这一行,点击鼠标右键,点击”显示分组字节…“,我们就可以看到完整的直播源列表信息了(注:需要将显示码从“ACSII”变更为”UTF-8“,否则中文字符无法正常显示):

IPTV包分析-6

将所有与直播源列表相关的信息选中后复制备用。

2、通过Notepad++程序整理出IPTV直播源地址

打开Notepad++程序,新建一个文档窗口,然后将上面复制的内容粘贴到新文档中:

IPTV包分析-7

我们可以仔细来看一下里面的直播源信息,它还是非常规整的,有频道名称,有频道地址。频道地址里面igmp://后面显示的是组播地址,rtsp://后面显示的是单播地址,有很长一段,但我们只需要前面到.smil为止的信息即可:

IPTV包分析-8

因为信息都非常规整,所以我们可以采用正则表达式的方法非常方便的提取到所需要的内容。目前直播源地址文件通常采用m3u和txt两种格式,所以我们在提取时也会分别生成这两种文件。

1)提取IPTV组播地址

在Notepad++程序界面点击”替换(R)…”按钮,采用如下正则表达式

^\s+<script>.+?ChannelName=”(.+?)”,.+?ChannelURL=”igmp://(.+?)\|rtsp://.+?”.+?</script>\s+$

>> 需要生成m3u格式直播源文件,则替换成:

#EXTINF:-1,\1\nrtp://\2

IPTV包分析-9

>> 需要生成txt格式直播源文件,则替换成:

\1,rtp://\2

注:细心的朋友可能已经发现,我把原直播源信息中的组播地址从“igmp://”换成了“rtp://”,原因很简单因为在实际测试发现直接用igmp://无法播放,用rtp://则可以,而不同的地方需要换的协议可能还不一样,大家可以多试试就会发现正确的了。

2)提取IPTV单播地址

在Notepad++程序界面点击”替换(R)…”按钮,采用如下正则表达式

^\s+<script>.+?ChannelName=”(.+?)”,.+?ChannelURL=”.+?\|(.+?)\?rrsip=.+?”.+?</script>\s+$

>> 需要生成m3u格式直播源文件,则替换成:

#EXTINF:-1,\1\n\2

>> 需要生成txt格式直播源文件,则替换成:

\1,\2

IPTV包分析-10

提取完成后,分别按不同格式进行保存即可使用。

三、获取IPTV回看源地址

目前的IPTV机顶盒除了看直播节目外,大多也提供了回看功能,像电信和移动,都提供一星期的节目回看功能,那我们怎么来获取IPTV的回看地址呢?首先你需要在抓取IPTV包时,在机顶盒上操作一下你想提取回看源地址的节目的回看功能,例如你想提取CCTV1的回看源地址,你可以在抓取时回看一下CCTV1的节目。如果你想提取多个节目的回看源地址,那你就需要操作多个节目的回看功能。

抓取包完成后,我们还是用Wireshark程序先把包文件打开。按http协议先筛选,然后在查找栏中选择”分组列表“、”宽窄“、”字符串“,再输入”get_tvod_info“进行查找:

IPTV包分析-11

在定位信息的下一行,即服务器返回的信息中就包含回看源的地址。选中返回信息行,然后在程序中间界面里选择“Line-based text data: text/html (20 lines)”这一行,然后鼠标点击右键,点“显示分组字节…”就可以看到具体的信息了:

IPTV包分析-12

稍微看一下我们就会明白,抓取时我们曾经回看了CCTV1的新闻30分节目,其回看源地址mediaUrl后面是很长一串字符,但其实我们只需要取前面的部分就可以了,例如:“rtsp://115.233.41.137/TVOD/88888913/224/3221228078/10000100000000060000000002460690_0.smil?playseek=20201205120000-20201205123600”。而且在实际应用中,你可以将playseek后面的时间端随意设置,当然要符合在一星期之内,例如你想回看2020年12月13日CCTV1的早上6:15到6:30的节目,你只需要将回看源地址修改为:“rtsp://115.233.41.137/TVOD/88888913/224/3221228078/10000100000000060000000002460690_0.smil?playseek=20201213061500-20201213063000“。在Potplayer播放器中输入以上地址(不含双引号),测试回看节目完全正常!!

IPTV包分析-13

再点“查找”可以到下一个回看源,同样的方法可以提取其回看源地址(回看节目是CCTV2的第一时间):

IPTV包分析-14

继续点“查找”又可以到下一个回看源,重复上面的操作,一直到所有的回看源地址提取完成。

如果想在电脑端方便回看或录制节目,建议可以编写一个小程序,通过选择回看的电台,回看的时间段,就可以直接实施播放及录制节目的功能。

20201226补充:经过多个回看源的提取,再与单播地址对照,发现还是有规律可循的,不需要一个一个回看源提取,当然有些电台只有直播源没有回看源,到时直接删除或跳过即可。现在就以CCTV1HD为例,来说明一下回看源地址与单播地址之间的关系:

单播地址:rtsp://115.233.41.137/PLTV/88888913/224/3221228078/10000100000000060000000002460690_0.smil

回看源地址(20201226早上6点-7点):

rtsp://115.233.41.137/TVOD/88888913/224/3221228078/10000100000000060000000002460690_0.smil?playseek=20201226060000-20201226070000

回看地址只需将单播地址中PLTV目录修改为TVOD,再加上回播的时间端,其它数据与单播地址是完全一致的。

如何修改OpenWrt系统中的路由器型号?

在路由器刷入OpenWrt系统的过程中,部分路由器因为暂时没有官方的路由器固件可以下载,所以要刷其它型号的路由器固件来代替,但是会存在一个小问题,就是在输入密码进入OpenWrt系统首页”Status – Overview“时,在”Model“一栏显示的是其它路由器的型号,例如本网站刷机时曾涉及到的:WR886N-V5显示的是WR940N-V4;WR720N-V3显示的是WR710N-V1。这对于完美主义者或者有强迫症的人来说,实在时没法接受的。所以本文就来讲解一下如何修改OpenWrt系统中的路由器型号,让其与路由器本体一致。

特别申明:本文所讲解的方法只对本文所引用的版本有效,其它版本有可能需要修改的文件及所在的目录都有所不同,大家可以慢慢去摸索,本文只是做一下“抛砖引玉”的作用。

以WR886N-V5刷WR940N-V4的自编译固件为例,固件的版本号为OpenWrt18.06.8,最初的Luci界面如下:

WR886N-V5刷WR940N-V4的自编译固件后原始界面

“Model”一栏显示的时“TP-Link TL-WR940N v4″,现在我们要想办法给它改过来。

通过WinSCP连接路由器后,打开 /usr/lib/lua/luci/view/admin_status/index.htm 文件,然后找到下图红线划的那一行。

WR886N-V5刷WR940N-V4的自编译固件后型号修改文件

将这行中的Model取值语句直接变更为输入实际的路由器型号,见下图:

WR886N-V5刷WR940N-V4的自编译固件后型号修改成正确值

保存后退出,然后在浏览器里刷新原Luci界面,你就会发现Model值已变成到你想要看到的样子的。

WR886N-V5刷WR940N-V4的自编译固件后型号修改

当然这是一种临时的应变之道,最好的方法还是在自编译固件的时候,就把路由器型号也一起改好了,这在后续我们讲解自编译固件时会涉及到。

 

 

为OpenWrt的Snapshot版本安装上Luci界面

在掌握了SSH服务的应用之后,我们现在可以来讲解如何利用SSH服务来为OpenWrt的Snapshot版本安装上Luci界面了。OpenWrt系统分”Stable Release builds“,即”稳定发布版“和”Development Snapshot builds”,即“开发版”。Snapshot版是尚处于开发期的版本,它合成了最新的、最前沿的应用来供大家测试,与发布版不同的是,它提供给最终使用者的环境是不太完善的,因为它并不包含luci界面。但是对于新潮的DIY爱好者来说,他们渴望尝试一切新鲜的、最新出炉的东西,所以这时就需要利用SSH服务来为snapshot版本自行安装Luci界面了。

下面以TL-WR710N_V1安装OpenWRT的Snapshot版本为例进行说明:

1、先下载与路由器相对应的OpenWrt的最新Snapshot版本固件,如:openwrt-ath79-generic-tplink_tl-wr710n-v1-squashfs-factory.bin。

2、进入路由器的刷机界面,刷入最新版的Snapshot版本固件(其硬改及刷机过程与WR886N_V5类似,此处略过)。

3、路由器重启后,将路由器的任一Lan端口与电脑的网口连接,在电脑上打开WinSCP程序(root用户,密码为空),通过SSH连接到路由器192.168.1.1。

4、再进入PuTTY程序界面,先设置root密码,命令行输入:

root@OpenWrt:~# passwd root

按提示输入密码,然后再次输入确认密码。

5、路由器Wan口接上Internet服务,注意Wan端与Lan端的DHCP要处在不同区间,若Wan端为192.168.1.X,则将Lan端须从192.168.1.1修改为192.168.X.1,采用如下Shell命令:

root@OpenWrt:~# vi /etc/config/network

6、安装uhttpd服务

root@OpenWrt:~# opkg update && opkg install uhttpd

7、安装Web-UI,即Luci界面

root@OpenWrt:~# opkg install luci

注意:在执行安装Luci服务时,可能会出现cgi-io依赖件无法安装,而导致Luci服务安装失败。这时需要先将相应型号及版本的cgi-io依赖件下载到电脑,如:cgi-io_12_mips_24kc.ipk,再将该依赖件通过WinSCP上传到路由器的/tmp目录下,然后安装该依赖件

root@OpenWrt:~# opkg install /tmp/cgi-io_12_mips_24kc.ipk

8、安装好uhttpd、luci服务后,就可以与Release版本一样,在浏览器上输入:192.168.1.1,然后进入熟悉的Luci界面了。如需使用中文界面,则继续安装中文语言程序包:

root@OpenWrt:~# opkg install luci-i18n-base-zh-cn

 

SSH服务的应用

本文主要讲解Windows系统下访问Linux系统下SSH服务的应用场景。因为大部分的第三方路由器固件系统都采用Linux内核,OpenWrt系统也不例外,所以掌握了Windows系统下访问Linux系统下SSH服务的方法,对路由器DIY爱好者来说非常重要。像OpenWrt系统下应用程序(Aria2FTPFrp等)的安装及设置都可以通过SSH服务来高效完成。

一、先在Windows电脑系统中安装相应的程序

1、到PuTTY官网下载putty最新版程序,32位系统下载:putty-0.74-installer.msi;64位系统下载:putty-64bit-0.74-installer.msi。下载完成后,点击文件直接安装。

2、到WinSCP官网下载最新版的WinSCP应用程序:WinSCP-5.17.8-Setup.exe,下载后点击文件直接安装。

Ps:以上两个程序你也可以通过点击本网站的“DIY专栏 – 下载中心”直接下载(百度网盘提取码:lyzj)。

二、运行WinSCP

1、双击桌面上的WinSCP图标运行程序,进入“登录”对话框,点左框中的“新建站点”或直接在右框输入。

SSH服务的应用-WinSCP新建站点界面

2、“文件协议”的选择取决于你的系统,像OpenWrt系统,你就选择“SCP”;Ubuntu系统,你就选择“SFTP”,要是最终电脑无法访问到SSH服务,那多半是“文件协议”选择不正确所致。

3、“主机名”一般就是输入路由器的内网地址,如:192.168.1.1,但如果你的电脑是通过远程访问路由器的,这里就填路由器的域名,如:www.xxxxx.com。

4、“端口号”如果在系统设定时没更改过的话,就保留缺省的“22”端口号不变。如果是远程访问,一般会采用端口映射(将远程端口号映射到内网的22端口号),那这里就填远程端口号就行。

5、填上用户名:可以是“root”,也可以是自己设定的其它用户名;再输入密码,就可以点”登录“进入WinSCP程序界面了。

SSH服务的应用-WinSCP程序界面

6、左右两个框,一个显示的是Windows电脑段的文件,另一个显示的是Linux系统(上图中显示的是OpenWrt系统的根目录)的文件,你可以像Windows系统的资源管理器一样管理两端的文件,也可以相互操作,例如将电脑端的文件拷贝到Linux系统端,或者反之。

三、运行PuTTY

1、在WinSCP程序界面中,点击上图红圈中的图标,就可以进入与Linux系统实时”会话“的PuTTY程序界面,这里需要再重新输一下密码(注:因为输密码的时候密码不可见的,所以有时须考虑是否是输入法的设置原因而导致密码错误)。SSH服务的应用-PuTTY程序界面

2、PuTTY程序界面,与Linux系统的”终端“相似,这里你可以输入Shell命令来实时操控Linux系统,建立各种”会话“。

这样,利用系统提供的SSH服务,再加上WinSCP及PuTTY两个程序工具,我们就可以在文件层面及实时操作层面与Linux系统建立起联系,实现Windows系统与Linux系统或Linux内核系统进行良好”沟通“的目的。

 

WR886N_V6刷SuperWRT固件

手头有一个TP-LINK公司出品的TL-WR886N路由器,版本号是Ver:6.0。就原路由器程序实现的功能来看,与v5.0没啥大的区别,都支持远程APP控制,但是内部电路却有很大差别。最主要是v6.0没有了内存芯片,其16M RAM是集成在主控芯片里,即主控芯片由v5.0的TP9343变成了TP9345。因为刷不了OpenWrt(建议最低配置8M/64M),一直放在家里也没有用,头几天看到SuperWRT的介绍文章,说可以刷这款路由器,就手痒试了试,现把整个过程记录下来了与大家共享。

1、拆机先,将闪存芯片周围电路做适当保护;

 

2、焊下闪存芯片,然后用编程器将闪存芯片内的所有数据读出,并保存,例如:wr886n_v6(原固件).bin,再将闪存芯片内的所有数据擦除,等待写入新的固件;

3、到SuperWRT网站下载最新版的、适合wr886n_v6的bootloader及firmware。我下载的两个文件分别是:superwrt_boot_tl_wr886n_v6_20191023.img 和 superwrt-qca-qca9k-tiny_v0.7.11_20190315.spkg,因为不想改变闪存的容量(2M),所以还是下载1.8M版的固件(如果你想换成更大的Flash,可以下载3.4M或5.1M的firmware,版本也会更新一些);

4、回到编程器程序,打开superwrt_boot_tl_wr886n_v6_20191023.img文件,点“自动烧录”将bootloader程序写入闪存中,然后将闪存焊回原电路板;

5、电脑通过网线连接路由器,然后按住路由器的reset键、通电、大约10秒后再松开reset键;

6、电脑浏览器地址栏输入:192.168.17.1,正常的话会进入如下设置页面(注:有一点类似Breed);

7、这时先不着急写入固件文件,在上传固件之前,我们还需要先把原路由器的ART数据及MAC数据写入闪存,所以接下来我们先点“Debug”,进入如下页面;

8、根据debug页面下部的设备信息“Device Info”栏提示,在0x20000地址开始写入MAC地址值(路由器背面都印有MAC值,直接写入即可)。在0x20800地址开始写入ART数据,而ART数据需要从原先保存的闪存数据文件中提取:用文本及代码编辑器Notepad++打开wr886n_v6(原固件).bin,找到00020800地址栏处,从该行字节数据一直到地址00020C30行选中所有数据,然后右键点复制;

 

9、再回到Debug页面,将复制的ART数据粘贴到相应栏中,写入闪存芯片中。现在就可以回到最初的设置界面,选择文件将下载的固件文件:superwrt-qca-qca9k-tiny_v0.7.11_20190315.spkg,点“upload”后系统会自动重启,一般原浏览器页面也会自动刷新(不行的话,等重启完成后,在浏览器地址栏再输入:192.168.17.1);

10、密码输入”admin“,就可以进入SuperWRT的系统了。因为只有2M闪存/16M内存,系统的可玩性其实并不高,但是这个DIY过程可以说是其它复杂刷机过程的一个缩影,就当是练练手吧!

从原始Flash中提取ART文件

ART是指路由器的无线校准文件,路由器通过ART文件来使无线功能得到最好状态的发挥。它是由厂家在出厂时就设定好的,通常来说每个路由器的都会有不一样的ART文件。在我们刷写第三方固件,如OpenWrt固件时,为了发挥原无线的最佳功能,需要将原路由器的ART文件也一并刷入,具体过程可参见“WR886N_V5刷OpenWrt固件”一文。本文将详细讲述如何将ART文件从原闪存Flash上提取出来。

准备素材:

1、从原路由器上焊下的闪存芯片;

2、编程器:我这里采用的是XTW100Pro,你也可以用常规的CH341A;

3、文本及代码编辑器:我习惯采用Notepad++,你也可以采用WinHex等其它编辑器。

ART文件提取过程:

1、由于不同的CPU对应的ART起始地址可能是不一样,个人很难去一一记住或者查询的话也很费时间,不过好在有人已经将常见的路由器的ART文件放在网络上共享,我们可以将相应的ART文件下载下来作为范本,再将从原闪存中提取的数据直接覆盖掉范本数据,就会生成你自己手头上路由器的ART文件;以TL-WR886N-V5路由器为例,其主控芯片为TP9343,那我们就到网络上去下载art-tp9343.bin文件,你也可以点击本网站的”DIY专栏-下载中心“下载到相应的范本文件(百度网盘提取码:lyzj)。

2、通过编程器将闪存内的所有数据读出,保存为:wr886n原固件.bin;具体过程略

3、将以上两个文件同时在Notepad++中打开,先点开art-tp9343.bin文件,前面都是FF空数据区,一直往下拉,到00001000地址行处才出现真正的数据区,一直到00001430行为止。回到00001000地址行,将前面的几个字节”02 02 00 03 7F”选中后,点”复制“;

4、再点开wr886n原固件.bin文件,点“搜索search”,点”查找find“,在选”字节值hex-values”,在输入框粘贴刚才复制的字节值;

5、点“确认OK”后,地址栏自动会跳转到00020800行处,从这个地址一直往下到00020C30行处,就是这个路由器出厂时的ART数据,将这些数据全部选中,然后复制;

6、再回到art-tp9343.bin文件,光标停在00001000行字节区起始处,点击鼠标右键,再点“粘贴覆盖paste write”,原ART文件的范本数据就被该路由器的真实数据替换了;

7、再将art-tp9343.bin文件重命名保存即可,整个提取过程到此结束。后续就可以将新命名的ART文件用于该路由器的第三方固件刷写过程中了。