====== 固件基础 ======
了解固件结构是救砖和刷机的关键。
===== 固件结构 =====
路由器固件通常包含以下几个部分。
== Flash 分区 ==
^ 分区名称 ^ 大小(典型) ^ 内容 ^
| u-boot | 256KB-512KB | 引导程序 |
| kernel | 3MB-5MB | Linux 内核 |
| rootfs | 剩余空间 | 根文件系统 |
| nvram | 64KB-128KB | 配置存储 |
| art | 64KB | 无线参数 |
== 文件系统类型 ==
- SquashFS:只读压缩文件系统,常见于原厂固件
- JFFS2:可读写,常见于 OpenWRT
- UBIFS:大容量 NAND Flash 使用
- YAFFS2:早期嵌入式设备使用
===== 固件格式 =====
== 常见扩展名 ==
- **.bin**:通用二进制格式
- **.trx**:Linksys/华硕固件格式
- **.chk**:Netgear 专用格式
- **.img**:通用镜像格式
== 固件头部 ==
大多数固件以固定头部开头:
00 00 00 00 4D 49 50 53 # MIPS 标识
或
FF FF FF FF # TP-Link 常见
===== 启动流程 =====
== 完整启动序列 ==
- **上电** → CPU 初始化
- **U-Boot** → 读取环境变量
- **内核加载** → 从 Flash 读取内核
- **文件系统** → 挂载根文件系统
- **网络初始化** → 启动网络服务
- **Web 服务** → HTTP 服务就绪
== U-Boot 启动参数 ==
bootcmd=bootm 9f020000
bootargs=console=ttyS0,115200 root=/dev/mtdblock2
== 中断启动 ==
在启动过程中按特定键可进入:
- **回车键**:进入命令模式
- **tftp**:网络启动
- **firmware**:指定固件位置
===== Bootloader 介绍 =====
== U-Boot ==
最通用的开源引导程序。
- 支持多种 CPU 架构(MIPS/ARM/x86)
- 支持网络启动(TFTP)
- 可修改启动参数
- 常见于小米、华为部分机型
setenv ipaddr 192.168.1.1
setenv serverip 192.168.1.100
tftpboot 0x81000000 firmware.bin
erase 0x9f000000 +0x300000
cp.b 0x81000000 0x9f000000 0x300000
== Breed ==
国内路由器常见的闭源引导程序。
- 界面友好(Web 控制台)
- 支持多固件备份
- 内置 TFTP 恢复
- 常见于 PandoraBox、Padavan 固件
== CFE ==
Broadcom 芯片专用引导程序。
- 适用于 Netgear、华硕部分机型
- 串口控制台操作
- 支持 NFS 网络启动
== 原厂 Boot ==
- 功能简单
- 只能刷官方固件
- 部分可解锁刷第三方
===== 固件修改 =====
== 提取固件 ==
# 使用 binwalk 提取
binwalk -e firmware.bin
# 或手动解压
tar -xvf openwrt.bin
== 修改工具 ==
- **firmware-mod-kit**:固件修改工具包
- **binwalk**:固件分析工具
- **squashfs-tools**:SquashFS 文件系统工具
== 刷入固件 ==
- 通过 Web 界面上传
- 通过 TFTP 刷入
- 通过 U-Boot 命令行
- 通过 TTL 串口直接写入 Flash
===== 安全检查 =====
== 固件签名 ==
现代路由器对固件有签名验证:
- **安全启动**:仅允许官方固件
- **Bootloader 锁**:禁止刷写
- **闪存锁**:防止读取
== 绕过方法 ==
- 使用 TTL 串口直接刷写
- 短接 Flash 芯片特定引脚
- 利用漏洞降级到低版本
===== 相关链接 =====
- [[guide:hardware|硬件基础]]
- [[guide:prerequisites|准备工作]]
- [[bootloader:breed|Breed 专题]]
- [[bootloader:uboot|U-Boot 专题]]