LinearTeam
LinearTeam

SPD Dump 使用指南

前言

本篇文章是在老文章 玩机常识:SPD Dump的基础使用教程 的基础上修订的。由于上一篇文章分类较为模糊,且比较基础,还因为一些某某某的原因,导致幸存的文章就这一篇了,故在此修订此文章。此次修订增加了大量专业命令,部分有更简单的替代方案,如果不是必须需要,建议使用其替代方案。

命令标签危险程度
【危险命令】一定要在确认过后运行。这些命令如果操作不当,会完全损坏设备,brom的权限很大,危险也很大!
【进阶命令】虽然不会完全损坏设备,但如果操作不当,可能会导致会话卡死,需要重启或扣电池!
【基础命令】一些基础的命令,它们会在执行其它命令时自动被调用,其功能较为单一。除非需要针对性的获取,否则建议使用替代方案。
无标签无标签的命令是常用命令,建议完全掌握。

本教程不提供以下资源下载,请自行寻找:

  • 串口驱动及 libusb 驱动
  • spd_dump 本体
  • fdl 文件

重要提示:不同设备使用的 fdl 不同,切勿混用!并且不同SOC的fdl地址可能是不一样的(这篇文章是UD710的fdl地址)!刷错 fdl 虽大概率不会变砖(重启重新进入 u2s 即可),但存在极小概率导致芯片死在深刷模式,需拔电池!推送错地址那就是真凉了!做事前请三思!

什么是u2s端口

SpreadTrum u2s diag,是一个类似于 MTK 的深度刷机端口,高通的 9008 端口,麒麟的 COM1.0 端口的深度刷机端口。u2s 端口一般可以干这些事情:

  • 救砖
  • 刷系统
  • 重新分区
  • 备份系统

如何进入u2s端口

通用进入方法

  1. 关闭紫光设备
  2. 长按音量下键
  3. 3秒后插入电脑
  4. 若驱动安装正确且已打开 spd dump,屏幕将显示设备进入 BootROM
https://blog.moyuzj.cn/wp-content/uploads/2025/08/Snipaste_2025-06-17_13-42-09.png

成功进入 BootROM 后,你将获得最高权限,可操作任何分区。

推送FDL

BootROM 本身不具备读写功能,需推送两个 FDL 文件:

1. 推送 FDL1(初始化内存空间)

fdl [你的fdl1.bin路径] 0x5500

推送后自动进入 FDL1 模式

2. 推送 FDL2(初始化分区系统)

fdl [你的fdl2.bin路径] 0x9efffe00

注意:此时不会自动进入 FDL2,仅提示推送成功。

3. 切换到 FDL2 模式

exec

执行后将打印设备分区列表并输出到本地分区表XML文件,就像这样:

https://blog.moyuzj.cn/wp-content/uploads/2025/08/snipaste.png

若使用动态分区安卓系统,systemvendor 等分区不会出现在列表中(它们被打包在 super 分区内)。

此时,我们就进入了FDL2模式。这个步骤在每次重新进入u2s后都需要重新进行,如果不想每次都这么麻烦,你可以创建一个bat批处理文件,然后在复制以下命令:

spd_dump --wait 300 fdl [替换为fdl1.bin的路径] fdl1_addr fdl [替换为fdl2.bin的路径] fdl2_addr exec

然后每次需要刷机时打开这个批处理文件,即可自动推送两个FDL!

读取信息类命令

Print命令

print命令,简写为p命令,可以重新读取分区表和设备信息并输出。输出的格式与刚进入FDL2时相同,如果忘记了分区表或者单纯懒得翻可以使用。

【基础命令】Partition_list命令

partition_list命令是print命令的一部分。执行此命令后只会输出分区表。建议使用print命令作为代替

【基础命令】Size_part命令

size_part命令,亦可写作part_size命令,使用size_part [分区名]可以直接获取单个分区的分区大小。当然了,printpartition_list也会输出分区大小。如果要针对性的获取单一分区大小可以使用此命令。

【基础命令】Check_part命令

check_part命令可以检测指定分区是否存在,使用check_part [分区名]即可获取检测结果。

【进阶命令】Chip_uid命令

chip_uid命令可以直接读取芯片唯一标识。chip_uid与设备序列号不同,无论如何刷机都无法修改此标识。可以用来鉴别不同设备,但一般不会这么做,序列号已经够用了。

读分区类命令

Read_part命令

read_part命令,可以简写为r命令,使用read_part/r [分区名称],可以实现对指定分区的提取操作。比如说,如果要提取boot分区,我们可以使用r boot。输入这条命令后,spd dump会自动提取镜像,等待进度条跑满后,你就可以在与spd dump同级的目录下找到刚刚提取的boot.bin。如果要备份全部分区,可以使用下方所述的特殊参数命令。

与MTK刷机工具差不多,spd dump提取的.bin文件其实就是安卓raw镜像,直接将后缀改为.img即可正常导入各大软件。注意这个.bin并不是payload.bin!不要尝试使用payload.bin解包工具,除非…你想看到满屏红字和错误消息。

以下为一个示例:

FDL2> r boot
[                                        ]0.0%  
[=                                       ]2.5%  
[==                                      ]5.0%  
[===                                     ]7.5%  
[====                                    ]10.0%  
[=====                                   ]12.5%  
[======                                  ]15.0%  
[=======                                 ]17.5%  
[========                                ]20.0%  
[=========                               ]22.5%  
[==========                              ]25.0%  
[===========                             ]27.5%  
[============                            ]30.0%  
[=============                           ]32.5%  
[==============                          ]35.0%  
[===============                         ]37.5%  
[================                        ]40.0%  
[=================                       ]42.5%  
[==================                      ]45.0%  
[===================                     ]47.5%  
[====================                    ]50.0%  
[=====================                   ]52.5%  
[======================                  ]55.0%  
[=======================                 ]57.5%  
[========================                ]60.0%  
[=========================               ]62.5%  
[==========================              ]65.0%  
[===========================             ]67.5%  
[============================            ]70.0%  
[=============================           ]72.5%  
[==============================          ]75.0%  
[===============================         ]77.5%  
[================================        ]80.0%  
[=================================       ]82.5%  
[==================================      ]85.0%  
[===================================     ]87.5%  
[====================================    ]90.0%  
[=====================================   ]92.5%  
[======================================  ]95.0%  
[======================================= ]97.5%  
[========================================]100.0%  
Write Part Done: system+0x0 , target: 0x114514, read: 0x114514

与write_part不同的是,如果设备在读取过程中断开,提取到一半的镜像会直接损坏。切记不要直接使用,会导致刷入后设备变砖(这是常识吧)!再重新运行一遍提取分区命令,spd dump会自动覆盖它。

此外,在执行此命令时,可以不指定分区,使用一些特殊的参数,工具会自动按照预定义的分区集提取对应分区。

特殊参数:all参数

传入all参数时,spd dump会自动备份除userdata以外的所有分区,并全部保存到当前目录下。除了提取分区,spd dump还会自动提取分区表XML文件并保存到当前目录下。XML文件将以partition_[时间戳].xml的形式存在,下文所有提及的[分区表XML]均指该文件。

点击展示分区表XML的示例
<Partitions>
    <Partition id="miscdata" size="5"/>
    <Partition id="misc" size="1"/>
    <Partition id="nr_fixnv1" size="8"/>
    <Partition id="nr_fixnv2" size="8"/>
    <Partition id="prodnv" size="10"/>
    <Partition id="nr_runtimenv1" size="10"/>
    <Partition id="nr_runtimenv2" size="10"/>
    <Partition id="recovery" size="40"/>
    <Partition id="trustos" size="6"/>
    <Partition id="trustos_bak" size="6"/>
    <Partition id="sml" size="1"/>
    <Partition id="sml_bak" size="1"/>
    <Partition id="uboot" size="1"/>
    <Partition id="uboot_bak" size="1"/>
    <Partition id="uboot_log" size="4"/>
    <Partition id="logo" size="7"/>
    <Partition id="fbootlogo" size="7"/>
    <Partition id="lowbatterylogo" size="7"/>
    <Partition id="l_pmsys" size="1"/>
    <Partition id="l_agdsp" size="6"/>
    <Partition id="gnssmodem" size="1"/>
    <Partition id="wcnmodem" size="10"/>
    <Partition id="persist" size="2"/>
    <Partition id="nr_spl" size="1"/>
    <Partition id="nr_sml" size="1"/>
    <Partition id="nr_uboot" size="1"/>
    <Partition id="nr_boot" size="35"/>
    <Partition id="nr_pmsys" size="1"/>
    <Partition id="nr_agdsp" size="6"/>
    <Partition id="nr_modem" size="40"/>
    <Partition id="nr_v3phy" size="8"/>
    <Partition id="nr_nrphy" size="8"/>
    <Partition id="nr_nrdsp1" size="5"/>
    <Partition id="nr_nrdsp2" size="5"/>
    <Partition id="nr_deltanv" size="2"/>
    <Partition id="boot" size="35"/>
    <Partition id="dtb" size="8"/>
    <Partition id="dtbo" size="8"/>
    <Partition id="system" size="3072"/>
    <Partition id="cache" size="3072"/>
    <Partition id="vendor" size="550"/>
    <Partition id="product" size="100"/>
    <Partition id="vbmeta" size="1"/>
    <Partition id="vbmeta_bak" size="1"/>
    <Partition id="sysdumpdb" size="10"/>
    <Partition id="userdata" size="0xffffffff"/>
</Partitions>

特殊参数:all_lite参数

传入all_lite参数时,spd dump会在all的基础上筛选掉非活动分区,blackbox分区,cache分区和userdata分区。与all同样,这条命令保存分区时也会保存分区表,命名格式和位置同上。

特殊参数:preset_modem参数

此参数专门用来备份基带相关分区。每个设备的基带都是唯一的,它存储着你的设备的各种唯一ID。若此类分区丢失,电话,移动数据,Wifi,蓝牙等功能均会受到影响。所以,这一般是那些傻逼格机脚本的主要目标,一旦被破坏就无法恢复。

特殊参数:preset_resign参数

此参数专门提取需要额外签名的分区。即在“解BL”后仍然会被avb验证的分区,这些分区一般包含:

  • boot
  • recovery
  • uboot
  • splloader
  • sml
  • trustos
  • teecfg

【进阶命令】一个小拓展:使用read_part时,不仅可以只指定分区名,还可以以read_part [分区名] [偏移量] [大小]的方式读取分区的一部分。不过这个功能一般也不会用到,毕竟除了底层分区这类很小的分区,你也猜不到你读取的这部分数据里有什么。

【进阶命令】Read_parts命令

注意!这部分讲述的是 read_parts 命令,而不是 read_part 命令。如果你正在找提取单个分区的命令,请前往上方查看。

read_parts命令后需要跟上一个分区表XML,即read_parts [分区表XML],工具会按照传入的分区表读取指定的所有分区。除此之外,还会根据其中分区的大小读取对应大小的分区数据。

写分区类命令

Write_part命令

write_part命令,可以简写为w命令,使用write_part [分区名称] [镜像路径],可以实现对指定分区的刷写操作。比如说,如果要刷入system.img到system分区,我们可以使用w system system.img。输入这条命令后,spd dump会自动发送镜像到对应分区,等待进度条跑满后即为成功刷入。以下为一个示例:

FDL2> w system system.img
[                                        ]0.0%  
[=                                       ]2.5%  
[==                                      ]5.0%  
[===                                     ]7.5%  
[====                                    ]10.0%  
[=====                                   ]12.5%  
[======                                  ]15.0%  
[=======                                 ]17.5%  
[========                                ]20.0%  
[=========                               ]22.5%  
[==========                              ]25.0%  
[===========                             ]27.5%  
[============                            ]30.0%  
[=============                           ]32.5%  
[==============                          ]35.0%  
[===============                         ]37.5%  
[================                        ]40.0%  
[=================                       ]42.5%  
[==================                      ]45.0%  
[===================                     ]47.5%  
[====================                    ]50.0%  
[=====================                   ]52.5%  
[======================                  ]55.0%  
[=======================                 ]57.5%  
[========================                ]60.0%  
[=========================               ]62.5%  
[==========================              ]65.0%  
[===========================             ]67.5%  
[============================            ]70.0%  
[=============================           ]72.5%  
[==============================          ]75.0%  
[===============================         ]77.5%  
[================================        ]80.0%  
[=================================       ]82.5%  
[==================================      ]85.0%  
[===================================     ]87.5%  
[====================================    ]90.0%  
[=====================================   ]92.5%  
[======================================  ]95.0%  
[======================================= ]97.5%  
[========================================]100.0%  
Write Part Done: system+0x0 , target: 0x114514, write: 0x114514.

当然了,如果你在刷入系统的时候不小心拔掉了数据线,或者电脑抽风断开连接了,也不用担心,未完成写入的分区更改不会被应用,你的分区还是原来的分区,此时只需要开机,关机,重新进入u2s刷写即可。当然,我不建议这么放松,万一砖了呢?对吧

【进阶命令】Write_parts命令

注意!这部分写的是 write_parts 命令,而不是 write_part 命令。如果你要查找的是写入单个分区的命令,请阅读上方内容。

此命令可以通过 write_parts [备份目录] 来读取其中的分区表XML并一次性进行全分区还原。

除此之外,这个命令在支持A/B分区的设备上有两个变种。它们分别是 write_parts_awrite_parts_b 。这两个命令的使用格式和上方的命令完全相同,但是spd dump会选择性的刷入对应槽位的备份。使用_a时,所有分区将会被刷入到a槽位,_b同理。如果文件夹下同时包含a b两个槽位的备份,则非指定槽位的备份不会被刷入。且一些不分槽位的底层分区始终会被刷入。

【危险命令】Repartition命令

repartition命令可以根据你提供的[分区表XML]重新分区,通常用于我们手动调整分区大小,也可以在特殊情况下还原你的分区表,使用方法为repartition [分区表XML],这里我们就讲一下如何调整system分区的大小

首先更改 <Partition id=”system” size=”3072″/> 这里的size数值为我们想要的,注意,这个size是以MB为单位来的,要注意换算哦!保存后在spd dump输入repartition [分区表XML],重要的来了,如果[分区表XML]中你调整大小的分区后面还有其他分区,那么后面的分区你需要全部重新刷一遍(userdata这样的不用),也就是说你要注意你调整大小的分区后面有没有偏底层的分区!小心不要玩脱了呦~

擦除类命令

【危险命令】Erase_part命令

erase_part命令,可以简写为e命令,可以擦除设备分区表中的指定分区。比如,如果我要擦除设备上的system分区(system频频受灾),那么我可以使用e system

【危险命令】Erase_all命令

注意!接下来的这条命令是一个携带特殊参数的erase命令,会将所有分区全部擦除,包括你的分区表,是比格机脚本还要底层的命令。

请一定要注意,整个设备的最高权限现在掌握在你手中,多一分权力多一分危险!

做这件事之前务必三思,否则你的设备轻则卡开机(这么干了基本不会轻),重则直接不开机!

类似于r all命令,我们也可以直接擦除全部分区。擦除全部分区的指令是erase_all,但是像上面说的那样,除非你想要完全重新烧录,否则万万不要这么干!

注:关于双清(wipe data/factory reset)

老版本的spd dump不能使用e userdata来进行低级格式化。如果这么做,会导致你的设备卡开机第二屏。请使用w misc misc_wipe.bin,misc_wipe.bin位于你下载的spd dump文件夹下,在重启或退出深刷的第一次启动时recovery会自动进行双清。

在新版本spd dump中,使用e userdata时程序会自动执行w misc misc_wipe.bin代替传统erase命令,所以不会有问题。

A/B分区特殊命令

Slot命令

slot命令是A/B分区的设备独有的命令,执行后会输出当前使用的槽位。

Set_active命令

set_active命令可以设置当前使用的槽位,使用方法为set_active [a|b]。设置槽位后,所有未指定槽位的双槽位分区镜像都会默认写入到对应槽位。

重启类命令

Reset命令

reset 可以直接让设备重启回安卓系统,刷机完成后可以使用这条命令来快速退出u2s端口。

Poweroff命令

poweroff命令可以直接让设备关机,刷机完成但不想要直接重启或设备变砖反复重启时可以进入FDL2输入这条命令强制关机。

reboot-recovery和reboot-fastboot

reboot-recovery命令可以直接重启到recovery手动双清(如果你misc-wipe没了的话);reboot-fastboot命令可以直接重启到fastboot。但注意,对于动态分区的需要使用fastbootd的机型,重启到fastboot并没有什么用。不仅刷不了super分区内的子分区而且还慢,老老实实重启到安卓系统再用ADB命令重启到fastbootd吧。

其它命令

Path命令

path命令,通过使用path [路径]的方式设置保存文件路径。提取的分区、分区表和内存的dump都会保存到设定的路径,在批量备份时十分有用。

Verity命令

在Android10-,该命令不可用。无论是否解锁BL,设备AVB仍然会校验boot, uboot, trustos等分区,若要刷入必须使用紫光公钥签名。但在Android10+,在解锁BL的情况下,可以在深刷模式下使用verity [1|0]设置启用/关闭对这些分区的校验。设置为1则开启,设置为2则关闭。

一些问题的FAQ

目前没有什么问题,如果遇到了奇奇怪怪的问题可以直接发条评论,我会在解答后将解决过程放在这里。

没有标签
首页      未分类      SPD Dump 使用指南
Avatar photo

摸鱼真君不摸鱼

文章作者

发表回复

textsms
account_circle
email

LinearTeam

SPD Dump 使用指南
前言 本篇文章是在老文章 玩机常识:SPD Dump的基础使用教程 的基础上修订的。由于上一篇文章分类较为模糊,且比较基础,还因为一些某某某的原因,导致幸存的文章就这一篇了,故在此修…
扫描二维码继续阅读
2025-12-13