高通QFIL 导出所有分区 | 您所在的位置:网站首页 › 6109m刷机找不到升级 › 高通QFIL 导出所有分区 |
目录 导出为一个partition.bin的方案 导出所有分区的方案 导出为一个partition.bin的方案通常QFIL下载的xml,我们使用高通提供的ptool工具(本人之前的文章中有提到)生成的rawprogram0_BLANK_GPT.xml可以派上用场,另外需要普及一个简单的概念 program 在高通的xml配置中表示下载; read 表示读取. 我们想备份dump整个emmc的数据,下面几个点需要关注: emmc的总大小关于flash的总大小,QFIL工具可以很容易的读取出,但是需要注意,机器切换至EDL模式后,先load一个和该设备对应的firmware的版本,然后 比如,当前我这边设备的总block数是0x747c000,16进制换算为10进制数为 122142720此处就代表整个flash的sectors扇区 而根据xml的配置 我们的num_partition_sectors = 122142720 单位 SECTOR_IN_BYTES为512Byte,所以,我们对应的flash总大小size_in_KB (122142720 * 512)/1024 = 122142720/2 = 61071360KB 于是,我们最后得到的dump整个emmc为一个镜像的二进制文件配置 接下来主要是一样选择patch0.xml及漫长的等待读取过程. 2. 高通gpt分区表的格式和算法 SECTOR_SIZE_IN_BYTES="512" 每个扇区的字节数,flash的type为emmc一般是512,之前做过的的UFS项目为4096 filename="partition.bin" 分区的名称 num_partition_sectors="122142720" 分区的总扇区数 size_in_KB="61071360.0" 分区的实际大小,单位为KB sparse="false" 是否以打散的方式read或program start_byte_hex="0x0" 起始地址 start_sector 起始扇区 通常情况下,有分区表前提下,对于dump flash数据而言,基本需要计算的主要是sectors或者是实际的大小即可. 通常 下一分区的start_sector - 上一分区的start_sector = 上一分区的num_partition_sectors 导出所有分区的方案对于所有分区导出,稍微比oneimage麻烦一些, 1. 需要原始的未被打散的rawprogram0.xml 2. 所有分区的filename都必须填充,只要是partition.xml里的分区,都要加上 A/B分区的填写相应的a/b 镜像,非A/B的直接bak镜像,总而言及就是filename 不能空. 3. 最重要的userdata大小的计算 方便说明,我上传了处理项目对应的计算举例, 以sectors的计算如下:读取的sectors数,从上面我们通过QFIL拿到了sector数为122142720 userdata的扇区数 为 122142720-33-21758464 = 100384223 size_in_KB = (100384351 * 512) / 2 = 50192111.5KB 以读取partition方式计算:adb shell ls -al /dev/block/by-name/userdata lrwxrwxrwx 1 root root 21 1970-01-01 08:41 /dev/block/by-name/userdata -> /dev/block/mmcblk0p87 cat /proc/partitions 查看对应blk的大小 cat /proc/partitions | grep mmcblk0p87 259 55 50192111 mmcblk0p87 50192111KB即是userdata对应size的大小. 发现了一个小问题,以sector计算的大小实际是50192111.5,但读取partition的值是50192111,最终填了50192111.5,然后导出的usserdata大小50192112KB. |
CopyRight 2018-2019 实验室设备网 版权所有 |