原文地址:https://www.coolapk.com/feed/52195441?shareKey=ZWZiYmYwOTVkZTkwNjcyYWI0Nzk~&shareUid=9253990&shareFrom=com.coolapk.market_14.5.1 已获得原作者转载授权
经常用QFIL的朋友都知道QFIL有一个PartitionManager功能,作用就是在9008模式直接读取本机当前的分区表。下面将介绍此功能在UFS设备上的实现思路。
首先我们需要准备QSaharaServer.exe,fh_loader.exe和设备的firehose.elf。前两个文件是命令行程序,可以在QFIL的文件目录里找到。
读取分区表分为两步:回读分区表文件,和解析分区表文件。
注:下文所有命令中带有[]的内容,请根据实际情况自行填写。
【回读分区表文件】
任何9008读写都需要先发送引导(firehose),使设备能够自由读写。你可以使用
QSaharaServer.exe -p \\.\COM[端口号] -s 13:[firehose文件路径]
命令来发送引导。部分设备需要更复杂的授权流程,总之首先要开启自由读写。
然后读取分区表文件。分区表文件存储在固定的位置,所以我们按照固定的位置来读就行。命令如下:
fh_loader.exe --port=\\.\COM[端口号] --search_path="[保存文件夹路径]" --sendimage="[保存文件名字]" --memoryname=UFS --lun="0" --start_sector="0" --num_sectors="6" --convertprogram2read --zlpawarehost=1 --noprompt
UFS设备有6或7个lun。上面的命令是读lun0分区表的,如果读lun1,则修改为--lun="1"即可。
读出来的分区表文件大小为24KB(24576字节)。
【解析分区表文件】
用16进制编辑器打开分区表文件。我们只关注8192字节到结尾的entries的内容即可。
如图,可以看到从8192字节开始,下面开始出现分区相关的信息。从8192字节开始,每128字节存储一个分区的信息。
下面我们来解析这一个分区。
如图划分。0-15字节(第一行)为分区type,16-31字节(第二行)为分区guid,32-39字节(第三行左)为分区起始扇区,40-47字节(第三行右)为分区终止扇区,下面蓝框部分为分区名。
分区名很好处理,将00除去并以文本形式查看就可以得到了。可以看到分区名为mpt。
起始扇区信息是以1字节为一组,倒序排列的16进制数值,我们要将它正确排列并转换成10进制数值。倒序什么意思呢,假如我在分区表文件中看到的起始扇区信息是AB CD EF GH IJ KL MN OP,那么正确的顺序就应该是:OP MN KL IJ GH EF CD AB。图里的起始扇区信息为0600000000000000,那么正确的顺序就应该是:0000000000000006。这是16进制数值,再转换为10进制数值:
http://kw360.net/hexconvert/
得到mpt分区的起始扇区值为6。
终止扇区同理:0520000000000000→0000000000002005→8197。
另外,扇区数目(分区大小)=终止扇区-起始扇区+1。
type和guid我们平时刷机基本用不到,在此就不赘述了。思路也是类似的,大家感兴趣可以对比官方读出来的研究。
Powered by HadSky 8.4.17
©2015 - 2025 AndroidShell
您的IP:3.141.29.119,2025-05-04 19:17:04,Processed in 0.04231 second(s).