小米路由flash备份

来自Jack's Lab
跳转到: 导航, 搜索

1 概述

R1D 使用一片 16MB 大小的 SPI Flash 存放 CFE (bootloader),内核,squashfs 文件系统,board data,nvram 数据等等

Flash 的分区如下:

# cat /proc/mtd 
dev:    size   erasesize  name
mtd0: 00040000 00010000 "boot"
mtd1: 00300000 00010000 "os"
mtd2: 00300000 00010000 "os1"
mtd3: 00890000 00010000 "squashfs"
mtd4: 00010000 00010000 "crash"
mtd5: 00100000 00010000 "overlay"
mtd6: 00010000 00010000 "board_data"
mtd7: 00010000 00010000 "nvram"
mtd8: 00fe0000 00010000 "firmware"


内核里实际映射地址范围为:

0x000000000000-0x000000040000 : "boot"
0x000000040000-0x000000340000 : "os"
0x000000340000-0x000000640000 : "os1"
0x000000640000-0x000000ed0000 : "squashfs"
0x000000ed0000-0x000000ee0000 : "crash"
0x000000ee0000-0x000000fe0000 : "overlay"
0x000000fe0000-0x000000ff0000 : "board_data"
0x000000ff0000-0x000001000000 : "nvram"
0x000000000000-0x000000fe0000 : "firmware"

最后一个分区 mtd8 实际是前 6 个分区的全镜像,他的存在只为在系统升级时提供方便。官方发布的固件,带有 CFE 的版本(如 0.4.85, 0.4.92)内部只有两个文件 brcm4709_nor.bin 和 root.ext4.lzma,brcm4709_nor.bin 这个文件实际是直接写入 /dev/mtd8 这个分区的,这个可以查看路由系统下 /bin/flash.sh 这个脚本:

104 upnor() {
105         if [ -f brcm${surfix_ver}_nor.bin ]; then
106                 klogger -n "Burning Full NOR Flash Image..."
107                 mtd write brcm${surfix_ver}_nor.bin firmware >& /dev/null          <------
108                 if [ $? -eq 0 ]; then
109                         klogger "Done"
110                 else
111                         klogger "Error"
112                         exit 1
113                 fi
114         fi
115 }

${surfix_ver} 变量的值在R1D上为4709



2 SSH 备份

ssh 登录上路由系统,执行如下脚本:

#!/bin/sh

cat /proc/mtd > mtd
cat /dev/mtd0 > mtd0.boot
cat /dev/mtd1 > mtd1.os
cat /dev/mtd2 > mtd2.os1
cat /dev/mtd3 > mtd3.squashfs
cat /dev/mtd4 > mtd4.crash
cat /dev/mtd5 > mtd5.overlay
cat /dev/mtd6 > mtd6.board_data
cat /dev/mtd7 > mtd7.nvram
cat /dev/mtd8 > mtd8.firmware

mtd0 - mtd7 的大小之和为 0x1000000,即 16MB,因此,整个flash的镜像为:

$ cat mtd0.boot mtd1.os mtd2.os1 mtd3.squashfs mtd4.crash mtd5.overlay mtd6.board_data mtd7.nvram > mtd.all

$ md5sum mtd.all 
2b4503988d1d627297c91349c9b6c173  mtd.all



3 编程器备份

量产版路由的SPI Flash 在风扇下面,需要拆开风扇,电路版上白色字标 U153 的长方形器件即是,八个脚,标:"MXIC MX 25L12835F"

风枪温度设为 395,风量中等,选一个和器件大小差不多的风口,对着吹,距离15mm左右,10秒左右就能取下 flash

冷却后,用 SPI Flash 编程读出整个 flash 的内容,存为:xiaomi.r1d.flash.bin

$ md5sum xiaomi.r1d.flash.bin 
2b4503988d1d627297c91349c9b6c173  xiaomi.r1d.flash.bin


可以看到,其内容与用 ssh 备份的是一样



































个人工具
名字空间

变换
操作
导航
工具箱