日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

高通QFIL 导出所有分区

發(fā)布時(shí)間:2023/12/10 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高通QFIL 导出所有分区 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

導(dǎo)出為一個(gè)partition.bin的方案

導(dǎo)出所有分區(qū)的方案


導(dǎo)出為一個(gè)partition.bin的方案

通常QFIL下載的xml,我們使用高通提供的ptool工具(本人之前的文章中有提到)生成的rawprogram0_BLANK_GPT.xml可以派上用場,另外需要普及一個(gè)簡單的概念

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整個(gè)emmc的數(shù)據(jù),下面幾個(gè)點(diǎn)需要關(guān)注:

  • emmc的總大小
  • 關(guān)于flash的總大小,QFIL工具可以很容易的讀取出,但是需要注意,機(jī)器切換至EDL模式后,先load一個(gè)和該設(shè)備對(duì)應(yīng)的firmware的版本,然后

    比如,當(dāng)前我這邊設(shè)備的總block數(shù)是0x747c000,16進(jìn)制換算為10進(jìn)制數(shù)為?122142720此處就代表整個(gè)flash的sectors扇區(qū)

    而根據(jù)xml的配置

    我們的num_partition_sectors =?122142720

    ?單位 SECTOR_IN_BYTES為512Byte,所以,我們對(duì)應(yīng)的flash總大小size_in_KB?

    (122142720 *?512)/1024 =?122142720/2 =?61071360KB

    于是,我們最后得到的dump整個(gè)emmc為一個(gè)鏡像的二進(jìn)制文件配置

    <?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分區(qū)表的格式和算法

    SECTOR_SIZE_IN_BYTES="512"? 每個(gè)扇區(qū)的字節(jié)數(shù),flash的type為emmc一般是512,之前做過的的UFS項(xiàng)目為4096

    filename="partition.bin" 分區(qū)的名稱

    num_partition_sectors="122142720"? 分區(qū)的總扇區(qū)數(shù)

    size_in_KB="61071360.0" 分區(qū)的實(shí)際大小,單位為KB

    sparse="false" 是否以打散的方式read或program

    start_byte_hex="0x0" 起始地址

    start_sector 起始扇區(qū)

    通常情況下,有分區(qū)表前提下,對(duì)于dump flash數(shù)據(jù)而言,基本需要計(jì)算的主要是sectors或者是實(shí)際的大小即可.

    通常 下一分區(qū)的start_sector - 上一分區(qū)的start_sector = 上一分區(qū)的num_partition_sectors

    導(dǎo)出所有分區(qū)的方案

    對(duì)于所有分區(qū)導(dǎo)出,稍微比oneimage麻煩一些,

    1. 需要原始的未被打散的rawprogram0.xml

    2. 所有分區(qū)的filename都必須填充,只要是partition.xml里的分區(qū),都要加上

    A/B分區(qū)的填寫相應(yīng)的a/b?鏡像,非A/B的直接bak鏡像,總而言及就是filename?不能空.

    3. 最重要的userdata大小的計(jì)算

    方便說明,我上傳了處理項(xiàng)目對(duì)應(yīng)的計(jì)算舉例,

    • 以sectors的計(jì)算如下:

    讀取的sectors數(shù),從上面我們通過QFIL拿到了sector數(shù)為122142720

    userdata的扇區(qū)數(shù)?為 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方式計(jì)算:

    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?查看對(duì)應(yīng)blk的大小

    cat /proc/partitions | grep mmcblk0p87

    259 ? ? ? 55 ? 50192111 mmcblk0p87

    50192111KB即是userdata對(duì)應(yīng)size的大小.

    發(fā)現(xiàn)了一個(gè)小問題,以sector計(jì)算的大小實(shí)際是50192111.5,但讀取partition的值是50192111,最終填了50192111.5,然后導(dǎo)出的usserdata大小50192112KB.

    總結(jié)

    以上是生活随笔為你收集整理的高通QFIL 导出所有分区的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。