前言
目前 MediaTek Filogic(MT7981、MT7986、MT7988 等)平台存在多种不同的固件格式,许多用户对此感到困惑。
本文以不太严谨的方式简单描述一下目前常见的固件格式以及区别。
需要注意的是,这些后缀仅作用作区分,并不能严格代表其使用的格式。
想要通过修改文件名后缀的方式在不支持的设备或软件上刷入更是无稽之谈,这并不会更改文件内容。
固件名称
stock layout
使用原厂分区表的固件,通常可以直接在原厂固件和/或其定制 U-Boot 中刷入。
custom U-Boot layout
适用于 hanwckf/bl-mt798x U-Boot 的固件,也被称为“大分区”固件。
Note除少数例外,官方 OpenWrt 不支持此固件类型,也在 ImmortalWrt 24.10 版本中被弃用。
OpenWrt U-Boot layout
适用于 OpenWrt U-Boot 的固件,一般也会修改分区表以最大化利用空间。
在固件下载页面中,会同时提供对应的 U-Boot,需要刷写 U-Boot 后才能刷入此固件。
刷入方法可以参考对应设备的 commit 说明或 OpenWrt Wiki。Warning默认情况下,此固件与 hanwckf/bl-mt798x U-Boot 不兼容,不能混用。
固件格式
*-sysupgrade.bin
这是目前整个 OpenWrt 中最常见的固件文件,大多为 tar 的形式,即 将
kernel
和rootfs
等数据打成一个 tar 压缩包。主要在 OpenWrt 中用于系统升级。对于 MTK Filogic 平台来说,2022 年之后的 MTK U-Boot 已经支持了 sysupgrade tar 这种格式,因此也可以直接使用
mtkupgrade fw
命令或 webUI 进行刷入。除此之外,也有部分固件为自定义格式,并在其中添加了额外的校验信息,以便在原厂固件和/或其定制 U-Boot 中刷入。
*-factory.bin
通常情况下,此固件内直接包含原始的
kernel
、rootfs
数据以及ubi
头信息(对于 NAND 设备)。
因为是原始数据,因此可以直接按原样写入闪存。一般用于在 U-Boot 刷写,或者通过编程器等刷写。除此之外,也有部分是为原厂固件而设计,即可以直接在原厂固件和/或其定制 U-Boot 中刷入,但不能直接写入闪存中(等同于上面的自定义 sysupgrade 固件)。
Tip对于大多数 MTK Filogic 设备来说,无论是
*-sysupgrade.bin
或*-factory.bin
,都可以直接在 MTK U-Boot 中刷入。如果是首次通过 MTK U-Boot 刷入,建议优先选择使用
*-factory.bin
,刷写时会先格式化,可以清除掉原厂留下的一些不必要的数据,最大化利用空间。*-sysupgrade.itb
这是通过 FIT (Flat Image Tree) 格式打包的固件,其中集成了
fdt (dtb)
、dtbo (dtb overlay)
、kernel
、rootfs
等数据。itb
的全称为Image Tree Blob
,通过its (Image Tree Source)
生成,其语法和结构与dts (Device Tree Source)
/dtb (Device Tree Blob)
相似。如同
DT
出现的意义,FIT
可以更好地集成、描述和使用各种数据,且结构统一。通过FIT
,可以轻松实现多个不同的设备或硬件使用同一固件,只需要通过configurations
进行配置。它也原生支持 hash 和签名校验,无需再通过其他方式校验完整性。FIT
是一个很早就已经出现并使用的标准,包括 MTK Filogic 在内的许多设备的内核都是通过FIT
打包,只是rootfs
还是单独分区存放的。FIT
的固件可以直接写入,无需额外处理。在早期的 MTK U-Boot 中,没有这部分的判断逻辑,所以使用mtkupgrade
会刷入失败,也无法启动。目前 MTK U-Boot 2025 年之后的版本已经官方支持FIT
固件。Info可以参考我的另外一篇文章使用 MTK U-Boot 进行刷写和引导
FIT
固件。*-initramfs-kernel.bin
/*-initramfs-recovery.itb
initramfs
有许多用途,对于上面提到的这种固件,主要用于故障恢复(当作中间件刷入新的固件)。
在 MTK Filogic 下,这两个文件都是通过FIT
打包,属于同一种格式(itb
)。它类似于 Windows PE 或者 Linux LiveCD,默认集成了必要的驱动和工具,所有的内容和改动都保存在内存中。当系统重启时,所有改动都会丢失。