路由器启动探秘:BL2、FIP 与 U-Boot 各个mtdblock bootloader Config Bdata factory crash ubi kernel 等块

玩机 > Router (247) 2026-04-23 15:12:48

概述

在嵌入式 Linux 系统(尤其是基于 ARM 架构的设备,如路由器、开发板)中,启动流程和固件分区结构是理解设备工作原理和进行刷机、开发的基础。下面我将为你详细介绍这些概念。

启动流程与核心组件

整个启动流程是一个层层递进、环环相扣的过程,可以想象成接力赛,每一棒都将系统初始化推向更高级的阶段。
  1. 上电与 ROM 代码 (BL0)
    设备通电后,CPU 首先执行固化在芯片内部只读存储器(ROM)中的代码,这通常被称为 BL0(Boot Loader Stage 0)。它的主要任务是进行最基础的硬件初始化,并确定从哪个外部介质(如 eMMC、SD 卡、NAND/NOR Flash)加载下一级引导程序。
  2. 初级引导加载程序 (BL1 / Preloader / BL2)
    这是启动链中的第一个可编程阶段,名称因平台而异,常被称为 BL1PreloaderBL2
    • 运行位置: 由于此时外部大容量内存(DDR)尚未初始化,这段代码通常非常小,会加载到 CPU 内部的高速缓存(SRAM)中执行。
    • 核心任务: 它的主要职责是初始化最关键的硬件,特别是 DDR 内存控制器。只有 DDR 初始化成功后,后续更复杂的程序才有足够的空间运行。此外,它还会初始化串口(用于打印调试信息)、时钟等。
  3. ARM Trusted Firmware (ATF) 与 FIP
    在初始化 DDR 后,系统会进入 ARM Trusted Firmware (ATF) 阶段,这是 ARM 架构安全启动的核心。
    • FIP (Firmware Image Package): 这是一个“固件镜像包”,可以理解为一个压缩包,里面包含了后续启动所需的所有关键组件。
    • FIP 的内容:
      • BL31: ATF 的运行时固件,负责管理安全世界(Secure World)和非安全世界(Normal World)之间的切换,处理电源管理等安全请求。
      • BL32 (可选): 可信执行环境(TEE)操作系统,如 OP-TEE。
      • BL33: 非安全世界的入口,通常就是我们的 U-Boot
    • 执行流程: BL2 会解析并加载 FIP 中的各个组件,然后跳转到 BL31BL31 完成安全环境的设置后,最终将控制权交给 BL33,即 U-Boot。
  4. U-Boot (Universal Boot Loader)
    U-Boot 是功能最丰富的引导加载程序,也是开发者最常打交道的部分。
    • 运行位置: 此时 DDR 已完全可用,U-Boot 在内存中运行,可以执行复杂的操作。
    • 核心任务: 初始化更多外设(如网络、存储、显示),提供命令行界面,加载并引导操作系统内核。
  5. 操作系统内核 (Kernel)
    U-Boot 从其指定的存储位置(如 Flash 的 kernel 分区)将 Linux 内核加载到内存中,并传递必要的启动参数,然后启动内核。至此,引导加载程序的任务完成,操作系统接管整个系统。
 

启动流程全景图

 
为了让你一眼看懂,我们先看这张核心流程图。这是一个从通电到系统启动的完整链路:
路由器启动探秘:BL2、FIP 与 U-Boot_图示-d4ce2430bec548289d2107cf02e4fdb6.png

Flash 分区详解

分区对应查询

为了管理上述启动组件和操作系统,存储设备(如 NAND/NOR Flash, eMMC)会被划分为多个逻辑区域,即 MTD (Memory Technology Device) 分区。
分区/组件名称 对应文件/内容 主要用途
bootloader Preloader / BL2 存放初级引导加载程序,负责初始化 DDR。
fip u-boot.fip / bl31-uboot.fip 存放 FIP 包,内含 BL31 (ATF) 和 BL33 (U-Boot)。
factory factory 分区 存放设备的唯一信息,如 MAC 地址、校准数据、序列号等。
Config / Bdata Config / Bdata 分区 存放用户或厂商的配置信息,如默认密码、区域设置等。
crash crash 分区 用于记录系统崩溃时的日志(如 pstore/ramoops),便于调试。
kernel kernel 分区 存放 Linux 内核镜像(如 zImageImage)。
ubi ubirootfs 分区 一个集成了文件系统的分区,通常包含 U-Boot 环境变量、内核和设备树,用于系统升级和恢复。
mtdblock - 这是 Linux 内核为 MTD 设备创建的字符设备接口,用户空间程序通过它来读写 Flash 分区。

 

路由中查看块/分区信息

cat /proc/mtd

输出参考

root@XIAOMI-3G:~# cat /proc/mtd 
dev:    size   erasesize  name
mtd0: 00080000 00020000 "Bootloader"
mtd1: 00040000 00020000 "Config"
mtd2: 00040000 00020000 "Bdata"
mtd3: 00040000 00020000 "factory"
mtd4: 00040000 00020000 "crash"
mtd5: 00040000 00020000 "crash_syslog"
mtd6: 00040000 00020000 "reserved0"
mtd7: 00400000 00020000 "kernel_stock"
mtd8: 00400000 00020000 "kernel"
mtd9: 07580000 00020000 "ubi"

查看块大小

需安装 lsblk插件

lsblk

输出内容参考

root@XIAOMI-3G:~# lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
mtdblock0    31:0    0   512K  1 disk 
mtdblock1    31:1    0   256K  0 disk 
mtdblock2    31:2    0   256K  1 disk 
mtdblock3    31:3    0   256K  1 disk 
mtdblock4    31:4    0   256K  0 disk 
mtdblock5    31:5    0   256K  0 disk 
mtdblock6    31:6    0   256K  1 disk 
mtdblock7    31:7    0     4M  0 disk 
mtdblock8    31:8    0     4M  0 disk 
mtdblock9    31:9    0 117.5M  0 disk 
ubiblock0_0 254:0    0  18.6M  0 disk /rom

 

MTD 分区管理核心操作命令

方案一:mtd 命令管理

适用场景:OpenWrt 系统、 Breed 等高级 Bootloader。
特点:这是 OpenWrt 的原生工具,最安全。它会自动处理 Flash 的擦除、写入和坏块跳过,且支持直接通过分区名称(如 FIP、kernel)操作,无需记忆设备号。

成员内容

稀缺资源,此处内容需登录后查阅(刷新)

登录/注册

 

方案二:dd 命令管理 (底层通用)

适用场景:标准 Linux 系统、精简版 Rescue 模式、或 mtd工具缺失的环境。
特点:这是 Linux 底层的“数据复制”工具,功能强大但风险较高。它直接对设备节点(如 /dev/mtdblock1)进行操作,不会自动擦除 Flash,且需要用户准确知道分区对应的设备号。

成员内容

稀缺资源,此处内容需登录后查阅(刷新)

登录/注册

管理方案对比总结

特性 方案一 (mtd 工具)  方案二 (dd 命令)
操作对象 分区名称 (如 FIP, kernel) 设备号 (如 /dev/mtdblock1)
安全性 高 (自动擦除,处理坏块) 中 (需手动擦除,容易出错)
校验方式 内置 verify 命令,一键完成 需配合 md5sum 手动计算对比
推荐指数 ⭐⭐⭐⭐⭐ (首选) ⭐⭐⭐ (备选/救砖用)

 

刷机原理与方式

刷机的本质就是用新的文件替换掉 Flash 中旧分区的内容。根据系统状态的不同,主要有以下几种方式:
  1. 在 U-Boot 下刷机
    这是最常用的刷机方式之一。当设备启动到 U-Boot 阶段时,可以通过 U-Boot 命令行或特定的菜单选项进行刷机。
    • 原理: U-Boot 初始化了网络和存储驱动,因此可以通过 TFTP 协议从电脑下载新的固件文件(如 fipkernel 等),然后使用 mtd write 等命令将文件写入到对应的 Flash 分区中。
    • 适用场景: 系统无法正常启动,但 U-Boot 未损坏。
  2. 在系统内刷机 (Sysupgrade)
    当设备已经成功进入 OpenWrt 或其他 Linux 系统后,可以使用系统自带的工具进行升级。
    • 原理: 使用 sysupgrade 命令,它会自动处理内核和文件系统的更新,并保留用户配置。这种方式通常会刷写 kernelubi/rootfs 分区。
    • 适用场景: 常规的系统版本升级。
  3. 救砖模式 (如 NOR Flash 启动)
    一些设备设计了双重启动机制,例如同时拥有 NAND 和 NOR Flash。当 NAND Flash 中的系统被刷坏(变砖)后,可以通过物理开关切换到 NOR Flash 启动一个精简的救援系统。
    • 原理: 在救援系统中,可以访问并修复 NAND Flash 的各个分区,重新写入正确的 bootloaderfip 和系统镜像,从而恢复设备。
总而言之,理解从 BL2FIP 再到 U-Boot 的启动链条,以及各个 Flash 分区的功能,是进行嵌入式开发和故障排除的关键。刷机操作就是针对这些分区的精确替换和修复。
 
 

评论
User Image
提示:请评论与当前内容相关的回复,广告、推广或无关内容将被删除。

相关文章
如果把路由器比作一台电脑,那么操作系统(如 OpenWrt 或 Linux)就是 Windows,而 BL2、FIP 和 U-Boot 就是底层的 BIOS。它
1 刷入官方给的过度固件官方过度固件存放路径: tr3000\CUDY官方\TR3000刷OpenWRT固件教程\1_中间固件\cudy_tr3000-v1-s
开始刷机路由器官方系统的后台管理地址是 192.168.10.1,初次进入会要求你设置密码,然后就是一路随便点,完成初始化,随后就进入到主页。我手上这台的 FW
Newifi3 D2 硬件参数信息 Newifi3 D2 硬件配置信息 SOCMT7621A2.4G无线芯片MT7603EN5G 无线芯片MT7612EN5G 功放芯片SKY85717-21RA...
一、Newifi 3(新路由3) D2刷Breed资源准备​硬件准备:Newifi 3(新路由3) D2 原厂固件路由器一台;电脑一台;网线一根; 软件准备:winscp( 文件复制工具)put...
打开GitHub下载最新版本nacos ,例如 2.2.3 提示,在nacos 2.2.2版本之后取消了默认的基础认证,如果需要则需要进行下面配置下载完成后打开压缩包,到/conf/目录,...
环境说明 dockerdocker-composemysql 5.7nacos 2.2.3 docker-compose 配置
HTTP协议2.0,HTTP 2.0如何升级_HTTP2.0新特性_HTTP2.0详解。
前言本文主要对新路由3 D2和小米路由3G做一个实际的使用测评
备份备份现有配置和数据库以便回滚备份配置sudo mkdir -p /opt/fail2ban-baksudo cp -R /etc/fail2ban /opt
Spring Boot 2.0 Redis整合,通过spring boot 2.0整合Redis作为spring缓存框架的实现。
If not configured manually, Fail2ban will load configuration files from the dire
pve fail2ban 软件安装apt update -yapt install fail2ban -y 安装SSHD 日志模块apt-get install
RFC 6749OAuth 2.0 的标准是 RFC 6749 文件
版本v1硬件参数ModelTR3000版本v1CPUMediaTek MT7981BACPU MHz1300CPU Cores_numcores2Flash M