关于玩路由器tplink-xdr6088差点变砖的心得
起因是某天和工位隔壁组同学一起吃海底捞的时候,想着一起买个路由器,挂点服务在上面。
由于人比较多,而且工位网速较快,需要一个高性能的路由器,又考虑到自带的存储可能不够,可能需要个USB口外接硬盘。所以买了比较小众的TPlink tl-XDR6088路由器。然后就开始了刷机,遇到了很多问题,期间差点变砖,在这里把一些收获和心得写下来。
刷机过程主要参考的是一篇教程 (opens new window),下文所述“教程”如果没有特别说明都是这个教程。
# 什么叫“变砖”
顾名思义,如果你的路由器成了一个没有任何路由功能,且不能恢复的只有硬件的东西,那就叫做变砖了。
# 什么是固件
通俗来说,硬件就是看得见摸得着的东西,例如CPU、显卡、内存等。软件就是我们用编程语言编写出来的具有一定功能的程序。
固件是一种介于两者之间的东西,介于软件和硬件之间的一种程序代码,也被称为固化的软件。举个例子,你发明了一个无人机,你需要为它编写程序让他动起来,尽管你是用代码编写的,但是它与硬件强绑定,即这个代码的功能只能控制这个无人机,不能控制别的,与硬件高度耦合。
我们在日常写软件过程中,需要尽可能解耦,避免把软件写成固件。
# 路由器的启动过程
路由器启动大致可以分成三个阶段:Preloader、bootloader、系统启动。
根据上面的教程,你会发现下载了四个文件,这四个文件的作用分别是:
# preloader.bin:
Preloader 是在 U-Boot 之前运行的一个小型启动程序,它是设备启动的第一个阶段,用于初始化最基本的硬件功能,例如时钟、内存控制器等,以便引导加载 U-Boot。 它的作用是初始化关键的硬件设置,并为 U-Boot 和系统的进一步加载准备好环境。这个文件相当于启动链的第一步。
# xxxuboot.fip
这是 BL31 和 U-Boot 的组合文件,可以认为就是bootloader。
BL31 是 ARM 体系结构中的一个固件阶段,属于,负责在启动过程中进行关键硬件初始化。 U-Boot 是一个通用的引导加载程序,用于初始化硬件设备(如 CPU、RAM、存储设备)并启动操作系统内核。它允许设备在启动时选择从哪里加载固件或启动操作系统。 这个文件的作用是引导加载,并且为路由器提供一个初始化和启动的基础。
# xxx-squashfs-sysupgrade.itb:
Sysupgrade 文件是 OpenWrt/ImmortalWRT 用来升级系统的固件文件,它包含整个路由器的文件系统和内核。 SquashFS 是一种只读文件系统,用于存储路由器的固件内容,因为它的压缩率高,可以节省存储空间。 ITB (Image Tree Blob) 是一种多段固件打包格式,包含内核、设备树和根文件系统,通常用于设备的固件升级。 这个文件是用来通过 Web 界面或命令行方式更新 ImmortalWRT 固件的核心文件。它包含了路由器运行的操作系统的所有内容。
# xxx-initramfs-recovery.itb:
Initramfs 是一种临时的内存文件系统,用于在系统启动时加载并运行。这种文件系统包含一个最小化的 Linux 系统,可以在硬件初始化后作为恢复系统使用。 Recovery 文件是用于路由器的恢复模式,它在设备出现问题或需要重新刷机时非常有用。
装过机的同学应该比较熟悉,这就类似于转机的PE系统。
# uboot是否就是不死系统,可以直接用它更新固件?
一定程度上,uboot就是不死系统。因为只要uboot存在,就能实现一些基础的功能。比如,教程中提到的uboot,启动后会默认使用tftp协议,向一个特定的地址(可能是192.168.1.254),不断请求一个叫做openwrt-mediatek-filogic-tplink_tl-xdr6088-initramfs-recovery.itb
。只要你开启tftp服务,并且存在这个文件,那么就能进入到一个临时系统(类似于PE,就是上文提到的Recovery),你就可以在这个临时系统进行一些操作,拯救你的路由器。
不同的uboot具有不同的功能,教程提到的uboot比较麻烦,你要有tftp服务器,要有恢复用的固件,然后从恢复固件里面用系统升级。如果你不知道这个,在你看来这个路由器就是“变砖了”。
但是,有的uboot打开会看到这样的界面,你可以非常方便的升级固件。
# uboot是否是通用的?
不一定,不同的固件采用不同的布局,不同的uboot能支持的布局也不一样。有的uboot可以支持多种布局,你可以在刷固件的时候选择使用哪种布局,刷入对应的固件。
如果你刷错了uboot不支持的固件,会导致无法进入系统,但通常不会损坏uboot自身,你可以进入uboot重新刷适合的固件。
# openwrt、immportalwrt、qwrt之类的都是什么?
OpenWRT、ImmortalWRT、QWRT等都是基于Linux的开源路由器固件。其中OpenWRT是最基础的,类似于linux系统本身。KWRT、QWRT、ImmportalWRT,像是ubuntu、debian等linux发行版。尤其是ImmportalWRT,是专门针对国内优化过的固件,推荐使用。