目前只提供Z9X的救砖教程
作者本人并没有Z9X,这个教程是在帮助坛友救Z9X砖过程中形成的
有问题请到github反馈
术语解释
术语 | 释义 |
---|---|
目标机 | 需要被刷机的设备,这里是指你的盒子 |
宿主机 | 执行交互的设备,也就是你在用的PC机 |
TTL/UART救砖
首先需要连接UART。 这是坛友 Markswift2003 提供的照片:
恢复FWTABLE签名
如果强刷过程卡死,很可能只是破坏了fwtable(功能类似分区表)签名,导致无法再刷机,这时只要恢复fwtable签名就行了。
-
目标机关机
-
UART连接好以后,在终端按住ESC键并开机,直到终端显示
*** ESC Pressed ***
(可能不是最后显示)或者终端不再滚动时再松开ESC键,这时按几次回车键应该会显示Realtek>
-
终端执行
help
会显示所有支持的命令,确认下其中是否包含rtkemmc
,dw
和mw
这几个命令,如果没有说明版本不一样,不要继续了 -
终端执行
rtkemmc read 0x03000000 20744 512
,这一步把fwtable的头读到内存里,成功的话没什么输出 -
终端执行
dw 0x03000000 8
。如果显示43534552 5f5f4555
,那么继续下一步;如果显示4f524556 5f5f414e
,则说明fwtable签名未损坏,不需要继续了,尝试UART+U盘刷机;如果两者都不是,那就不知道咋回事了,也不要再继续后面的步骤了。 -
终端执行
mw 0x03000000 0x4f524556
-
终端执行
mw 0x03000004 0x5f5f414e
-
终端执行
dw 0x03000000 8
。这时应该要显示4f524556 5f5f414e
才对 -
终端执行
rtkemmc write 0x03000000 20744 512
,这一步是把fwtable的头写回到emmc中,成功的话没什么输出 -
关机
fwtable签名已经恢复了,现在可以按照官方的强刷教程刷机,如果还是无法进入刷机那就尝试UART+U盘刷机吧
UART+U盘刷机
通常可以用这个方法恢复固件,除非uBoot坏了。
准备一个2GB以上的U盘,如果不是FAT32格式则格式化成FAT32。
如果你能走到这一步,肯定已经尝试过官方的强刷教程了( Z9X ),相信你已经有install.img
。
将install.img
放到U盘根目录。
下载 z9x_flash_rescue.zip,并解压到U盘根目录。
确认下U盘根目录现在至少应该有这些文件:
- z9x_flash_rescue.bin
- install.img
这样U盘就准备好了。
刷机过程:
-
目标机关机,把U盘插上目标机
-
UART连接好以后,在终端按住ESC键并开机,直到终端显示
*** ESC Pressed ***
(可能不是最后显示)或者终端不再滚动时再松开ESC键,这时按几次回车键应该会显示Realtek>
,这表示进入了uBoot控制台 -
终端执行
help
会显示所有支持的命令,确认下其中是否包含usb
,fatload
和boot
这几个命令,如果没有说明uBoot版本不一样,不要继续了,请尝试下一个方案 -
终端执行
usb start
,这一步启用USB并扫描设备,需要几秒钟,完成后会显示Realtek>
。看看前面的输出中有没有出现Storage Device(s) found
字眼,如果没有,那就换个USB插槽,重新执行这一步 -
终端执行
fatload usb 0:1 0x20000000 z9x_flash_rescue.bin
,如果有报错,把0:1
分别改成0:2
,0:3
,0:4
等再试试,取决于U盘的分区 -
终端执行
rtkemmc write 0x20000000 20744 172032000
,这一步是把刷机环境写到emmc中,可能需要一点时间 -
终端执行
rtkemmc erase 7704968 7737736
,这一步清除开机LOGO的数据,以免校验失败 -
终端执行
boot r
,不出意外的话,很快就开始刷机了。如果刷机失败,可以按官方的教程再试一次
UART+TFTP+U盘刷机
通常可以用这个方法恢复固件,除非uBoot坏了。
请先尝试 “UART+U盘刷机” 方案,如果不行再尝试这个方案。
这个方案需要:
- U盘
- 网线(用于目标机访问TFTP)
如果 “UART+U盘刷机” 方案中uBoot不支持usb
或者fatload
命令,但是支持net
命令,并且执行net
命令有出现tftp
,这时可以采用tftp加载刷机环境。
准备一个2GB以上的U盘,如果不是FAT32格式则格式化成FAT32。
将前面提到的install.img
复制U盘根目录,这样U盘就准备好了。
准备一个TFTP服务器,也可以在宿主机上部署TFTP服务,Windows用户参考这个,Mac用户参考这个。
下载 z9x_flash_rescue.zip,并解压到TFTP根目录。确认TFTP根目录有z9x_flash_rescue.bin
。
这样TFTP服务也准备好了。
刷机过程:
-
目标机关机,把U盘插上目标机,用网线将目标机连接到能访问TFTP服务器的网络中(如果TFTP服务器在内网则跟TFTP服务器同一个交换机或者同一个路由器的LAN网络)
-
UART连接好以后,在终端按住ESC键并开机,直到终端显示
*** ESC Pressed ***
(可能不是最后显示)或者终端不再滚动时再松开ESC键,这时按几次回车键应该会显示Realtek>
,这表示进入了uBoot控制台 -
终端执行
help
会显示所有支持的命令,确认下其中是否包含net
和boot
这两个命令,如果没有说明uBoot版本不一样,看下本节后面的PS -
配置目标机网络。首先尝试DHCP自动配置,终端执行
net dhcp_client
,应该会输出DHCP client start
,等待几秒钟,如果有输出netif en ip ...
,那就进入下一步;如果没有任何输出,那么手动配置网络,执行net ifconfig <IP地址> <掩码> 0.0.0.0
,注意把<IP地址>
和<掩码>
换成合适的值(如果TFTP服务器在内网则只要跟TFTP服务器同一个网段就行)(如果你的TFTP服务在外网,则需要把0.0.0.0
换成真正的网关地址,通常是路由器的IP) -
终端执行
net ping <TFTP服务器IP>
(把<TFTP服务器IP>
换成TFTP服务器的IP),如果网络配置没问题的话,会输出多个ping: send ...
和ping: recv ...
,当不再输出时按一下回车回到控制台。如果没有输出ping: recv ...
,应该是网络配置有问题,请自行解决。 -
终端执行
env set tftpblocksize 1468; net tftp 0x20000000 <TFTP服务器IP> z9x_flash_rescue.bin
(把<TFTP服务器IP>
换成TFTP服务器的IP)。如果出现卡死的现象,可能是TFTP服务有问题,或者防火墙拦截了TFTP通讯,排除这些问题以后需要从第一步重新开始。 -
终端执行
rtkemmc write 0x20000000 20744 172032000
,这一步是把刷机环境写到flash中 -
终端执行
rtkemmc erase 7704968 7737736
,这一步清除开机LOGO的数据,以免校验失败 -
终端执行
boot r
,不出意外的话,很快就开始刷机了。如果刷机失败,可以按官方的教程再试一次
PS: 某些版本的uBoot没有net
命令,但是有tftp
命令,第3到6步可以换成执行:
env set ipaddr <IP地址>
env set serverip <TFTP服务器IP>
env set tftpblocksize 1468
tftp 0x20000000 z9x_flash_rescue.bin
PPS: 某些版本的uBoot没有boot
命令,但是有go
命令,则boot all
可以换成go all