我去!路由器!其一

正如看车先看底盘,研究路由器咱得先看板。

这次先认硬件,把基础打下来,后面研究起路由器来才能不烧心。


SoC

SoC(System on Chip)可以理解成路由器的主控核心。

CPU、网络接口、交换机、无线基带等模块,可能集成在同一颗芯片里;具体集成哪些功能,要看型号和平台。

常见厂商和系列包括 Qualcomm/Atheros、MediaTek、Broadcom、Realtek、华为海思等。

看芯片丝印时,先记下完整型号,再查对应 datasheet 或平台资料,别只凭品牌猜功能。

SoC通常是板上较大的芯片之一,周边可能能看到 RAM、Flash、晶振、电源管理芯片和射频电路。

但“最大的芯片就是 SoC”只能当线索,不能当结论。

SoC常见BGA封装,焊球藏在芯片底部,板上通常看不到引脚。


RAM

RAM 是运行时内存,系统启动后会把内核、进程和缓存等数据放在这里。

断电后内容会消失,所以它不是固件的长期存储位置。

路由器里常见 DDR2、DDR3、DDR3L、DDR4 等类型,实际规格以芯片丝印和平台资料为准。

常见存储器厂商有 Samsung、Micron、SK hynix、Nanya 等;不同厂商的产品线和封装都不一样。

RAM可能是独立封装,也可能和 SoC 采用 PoP 等封装方式叠在一起。

封装形式、总线宽度和容量不能只靠外观可靠判断,最好查料号或原理图。

独立 RAM 常见细间距 BGA 封装,表面会印有厂商标识和型号编码;PoP封装则可能叠在 SoC 上方。


当然了,我们不是干路由器开发的,刚学其实上面的并不需要了解那么多,接下来才是重点。


Flash

Flash 是非易失性存储,断电后数据仍然保留。

启动程序、固件、配置和校准数据通常会放在 Flash 中,但具体布局由硬件平台和固件决定。

路由器里最常见的几类是 SPI NOR、NAND 和 eMMC。

名字都带 Flash,访问方式、擦写粒度和系统呈现方式却不一样。

NOR Flash

NOR Flash 常见于小容量启动存储,许多路由器会用 SPI NOR 保存 bootloader、环境变量和固件。

常见厂商有 Winbond、Macronix、GigaDevice、Micron 等,具体型号需要看芯片丝印。

小容量 SPI NOR 常见 8 引脚 SOIC/WSON 封装,也有更大容量或不同接口的封装形式;外观不能直接说明容量。

8 个脚长这样,一号脚靠丝印圆点那边数(你在主板上可以找到一个白色圆圈圈,如果它还在的话…):

对照上面那张图再看一遍:SPI 用的就是其中的 CS#、CLK、DI、DO 四根,其余是电源和写保护 / 保持。

SPI NOR 通常通过少量 SPI 信号线连接,容量相对较小,支持按地址读取,随机读取方便。

NOR可以按较小的扇区或块擦除,写入前仍然需要先擦除对应区域;擦除粒度和写入限制要查芯片手册。

优点是读取简单、启动路径直接,缺点是容量和单位成本通常不适合放很大的数据集。

它经常被系统映射成 MTD 设备,Linux 下可能看到 /dev/mtd* 和 /proc/mtd。

这款 Flash 应用比较广泛,平常可能见的多的就是这种。

NAND Flash

NAND Flash 面向更高密度的存储,常用于容量较大的固件或数据存储。

常见厂商包括 Kioxia、Samsung、Micron、SK hynix 等,也有其他面向嵌入式市场的供应商。

封装可能是 TSOP、BGA 等,具体形态和引脚数取决于器件代际与接口,不能只凭“长方形/方形”判断类型。

TSOP-48 的 8 位 NAND 引脚排布示意:

NAND 没有独立的地址总线,CLE / ALE 两个脚决定 I/O 上这一轮是命令、地址还是数据。

NAND按页读取和编程,按块擦除;坏块是其需要管理的正常现象,不代表芯片一定损坏。

它还可能需要 ECC(Error-Correcting Code)纠错,具体由 SoC 控制器或软件栈负责。

因此,不能把 NAND 当成“更大颗的 NOR”直接逐字节改写。

原始 NAND 常通过 MTD 暴露,系统可能使用 UBI/UBIFS 管理擦除块和文件系统。

也有带内部控制器的 NAND 产品,系统呈现方式会因器件和平台而异。

eMMC

eMMC可以看作把 NAND Flash、控制器和标准接口封装在一起的嵌入式存储器件。

常见厂商有 Samsung、Micron、SK hynix、Kioxia 等,料号决定容量、速度和具体能力。

eMMC通常是多引脚 BGA 封装,焊盘位于器件底部;封装外观和容量没有简单的一一对应关系。

它对外暴露的信号其实不多,一个个名字都在下面这张图里:

球位(A1、B2 这些坐标)没有“通用版”,各家各代都可能不同,飞线前请翻对应 datasheet。

主控通过 eMMC 接口访问它,器件内部负责一部分 NAND 管理工作,例如坏块处理和磨损均衡。

Linux 下通常表现为块设备,例如 /dev/mmcblk0,而不是原始 NAND 的 MTD 分区接口。

它适合容量较大的系统镜像和数据存储,使用方式更接近一块嵌入式磁盘。

但它不等于“永远不会坏”,也不代表所有 eMMC 的性能和寿命都相同。

类型 常见接口/呈现 读写与擦除特点 常见用途
SPI NOR SPI;常见为 MTD 随机读取方便;擦除按扇区或块 启动代码、小容量固件
原始 NAND NAND总线;常见为 MTD 页编程、块擦除;需考虑坏块和ECC 大容量固件、UBI/UBIFS
eMMC eMMC接口;常见为块设备 内部控制器管理 NAND 介质 系统镜像、用户数据

这张表说的是常见形态,不是所有设备的硬性规则。

具体该看哪种接口,还是以芯片型号、原理图和 Linux 设备节点为准。

SPI 是什么

SPI(Serial Peripheral Interface)是一种同步串行总线,主控提供时钟,外设按时钟边沿收发数据。

如果你要直接在 Flash 上搭线提取固件,你就得先了解这个。

传统 SPI 常见四根信号线:SCLK 提供时钟,MOSI 从主控发往外设,MISO 从外设返回主控,CS/SS 用来选中目标器件。

总线上可以挂多个外设,通常由各自的 CS 片选;时钟极性 CPOL 和时钟相位 CPHA 组合成不同工作模式,主从两端必须匹配。

SPI通常可以同时发送和接收,但具体器件的命令格式、时钟上限和支持模式以 datasheet 为准。

SPI NOR 的一次访问通常由命令、地址和数据阶段组成;读、写、擦除是不同命令,不能把 SPI 理解成“随便读写任意字节”。

有些芯片支持 Dual/Quad SPI 等扩展模式,使用更多数据线提高吞吐量;板上信号名称和控制器支持情况可能不同。

这里说的 SPI 是总线接口,不是 Flash 的存储介质类型;SPI NOR 是 NOR Flash 使用 SPI 类接口的一种常见组合。

原始 NAND 常走专用 NAND 接口,eMMC 则使用 eMMC 接口,并不因为内部用了 NAND 介质就等于 SPI Flash。

拿一颗 NOR 出来对照着看,四根线在片子上分别落在哪个脚:

注意 CS# 是低电平选中,空闲时通常被上拉电阻拉高,所以万用表量到高电平才是正常待机状态。

要提取固件,一般接入 CLK、MOSI、MISO、CS 这四根线再加 GND 接地一共五根线接好就行。


常见 Flash 分区

Flash 芯片是一整片存储空间,固件会按地址范围切成多个用途不同的区域。

分区名称不是行业里完全统一的固定名单,同一厂商不同机型也可能完全不一样。

常见布局大致会包含下面这些部分:

  • bootloader:引导程序,负责早期初始化并启动后续系统。
  • env / u-boot-env:bootloader 环境变量,例如启动参数;也可能没有单独分区。
  • factory / art / caldata:设备校准数据、无线参数或板级信息,名称随平台变化。
  • kernel:Linux 内核镜像,有些布局会把它和 root filesystem 合并。
  • rootfs:根文件系统,可能是 SquashFS、UBIFS 或其他格式。
  • firmware:打包的固件区域,内部可能再包含 kernel 和 rootfs。
  • rootfs_data:可写数据区域;有些设备在首次启动时从固件剩余空间生成它。
  • config / overlay:配置或可写覆盖层,是否独立分区取决于系统设计。

在 MTD 设备上,分区可能从设备树、bootloader 参数或平台代码中定义,并显示在 /proc/mtd。

在 eMMC 上,常见的是 GPT 或 MBR 分区表,Linux 下可以用 lsblk 查看块设备和分区。

一个简化的布局示意:

1
2
3
4
5
SPI NOR / NAND:
[bootloader][env][factory/caldata][kernel + rootfs][可写数据]

带 eMMC 的设备:
[eMMC: boot 区域][GPT/MBR 分区:boot][rootfs][data]

这里只是示意,不代表某个具体路由器的真实布局。

不要因为分区名叫 factory 就认为内容可以随便擦,也不要把别的机型分区表直接套过来。

无线校准数据、MAC 地址和设备配置可能就在这些区域里,误擦之后恢复起来很折磨。


UART

UART是常见的串行调试接口,通常能看到 GND、TXD、RXD,有时还有 VCC 引脚。

板上常见形态是未焊接的排针、焊盘或测试点,通常没有标准接口外壳。(长得可能会像四个连续的孔洞或四个连续的针脚)

UART不是USB串口接口;连接电脑一般要用 USB-TTL 转接器,而且必须确认逻辑电平兼容。

常见逻辑电平可能是 3.3V 或 1.8V,不能想当然地按 5V 接。

用万用表找 GND、VCC、RXD、TXD

先断开路由器电源和网线,拍照记录焊盘位置,确认万用表表笔和档位正常。

  1. 找 GND 时:万用表切到通断或低电阻档,一支表笔接已确认的屏蔽罩、金属接口外壳或电源负极,另一支逐个测焊盘。稳定导通的焊盘可能是 GND,但不要把任何金属外壳都默认当作地,先确认参考点与电路连接关系。

  2. 找 VCC 时:先断电检查,不要用通断档测带电电路。确认 GND 后再给设备正常供电,万用表切到直流电压档,黑表笔接 GND,红表笔测候选焊盘。稳定出现某个正电压的焊盘可能是供电引脚;读数只能说明它相对 GND 的电压,不能仅凭读数断定它是 UART 的 VCC。一般来说该位置开机电压稳定,关机后电压缓慢下降因为有电容的存在。

  3. 找 TXD 时:TXD在空闲时通常保持高电平,设备启动时发送数据会出现电平变化。万用表可能只显示跳动或平均后的读数,所以可以用它找线索,一般来说该位置开机时需要发送数据,电压会一段时间内快速变化。

  4. 找 RXD 时:RXD通常是输入脚,空闲时可能为高电平也可能是零电平,不过你找出其他位置,这个位置自然就知道在哪。

串口连接通常是:GND 对 GND、路由器 TXD 接转接器 RXD、路由器 RXD 接转接器 TXD,板子能正常开机就不用接 VCC。首次连接只接 GND、TXD、RXD,不接 VCC。如果表笔滑一下短接旁边引脚,或者把 5V TTL 接到 1.8V UART 上,都可能直接让板子寄。

波特率等串口参数需要根据设备资料或实际输出确认。(或者直接猜 9600 或 115200)


路由器主板实物

这我随便找的一张路由器图片,当然有的部件长得和书上的可能不太一样【狗头】。


我去!路由器!其一
https://zlsf-zl.github.io/2026/07/10/我去-路由器-其一/
作者
ZLSF
发布于
2026年7月10日
许可协议