高通QFIL 导出所有分区
目錄
導出為一個partition.bin的方案
導出所有分區的方案
導出為一個partition.bin的方案
通常QFIL下載的xml,我們使用高通提供的ptool工具(本人之前的文章中有提到)生成的rawprogram0_BLANK_GPT.xml可以派上用場,另外需要普及一個簡單的概念
program?在高通的xml配置中表示下載;
read?表示讀取.
<?xml version="1.0" ?> <data><!--NOTE: This is an ** Autogenerated file **--><!--NOTE: This file writes a VALID but EMPTY partition table to sector 0 **--><!--NOTE: Sector size is 512bytes--><program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="gpt_empty0.bin" label="PrimaryGPT" num_partition_sectors="33" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="16.5" sparse="false" start_byte_hex="0x0" start_sector="0"/> </data>我們想備份dump整個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為一個鏡像的二進制文件配置
<?xml version="1.0" ?> <data><!--NOTE: This is an ** Autogenerated file **--><!--NOTE: Sector size is 512bytes--><read SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="partition.bin" label="PrimaryGPT" num_partition_sectors="122142720" physical_partition_number="0" size_in_KB="61071360.0" sparse="false" start_byte_hex="0x0" start_sector="0"/> </data>接下來主要是一樣選擇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
<program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="userdata.img" label="userdata" num_partition_sectors="100384223" partofsingleimage="false" physical_partition_number="0" programbackverify="false" size_in_KB="50192112.0" sparse="false" start_byte_hex="0x298040000" start_sector="21758464"/><program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="gpt_main0.bin" label="PrimaryGPT" num_partition_sectors="34" partofsingleimage="true" physical_partition_number="0" programbackverify="false" size_in_KB="17.0" sparse="false" start_byte_hex="0x0" start_sector="0"/><program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="gpt_backup0.bin" label="BackupGPT" num_partition_sectors="33" partofsingleimage="true" physical_partition_number="0" programbackverify="false" size_in_KB="16.5" sparse="false" start_byte_hex="(512*NUM_DISK_SECTORS)-16896." start_sector="NUM_DISK_SECTORS-33."/>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.
總結
以上是生活随笔為你收集整理的高通QFIL 导出所有分区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows中VS卸载opencv配置
- 下一篇: 安卓——launchMode