ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Qualcomm checksparse和ptool工具的使用小结

2021-06-01 21:34:00  阅读:558  来源: 互联网

标签:xml checksparse temp Qualcomm zeros BackupGPTNumLBAs print ptool


前言
本文记录的目的,一方面是对相关问题的记录,另一方面介绍下在调试过程中,通过checksparse和ptool生成相关镜像解决的实际问题。虽然主题是生成Qualcomm Rom包的过程,就结果而言,通过工具将程序刷写进终端设备才是最终的目的.

下载工具之QFIL(Qualcomm Flash Image Loader)
本篇文章只是简单提到涉及和本文主题相关的QFIL的使用方面,更多的内容,鉴于QFIL工具的强大,后续可以考虑单独成篇.
1.meta_build 下载方式:
实话说,这种下载方式除了文档上列出,本人也只是停留与了解,主要是此种方式。需要整套的AP+BP的代码,代码下载及编译方式就要求工程师也要对BP也有一定的了解. 考虑到大部分公司开发,BP侧都是编译好的镜像直接在编译AP代码时做固定的拷贝动作,所以总体来说meta build的下载方式,开发效率可能需要打折扣。
镜像编译目录分布太散,编译生成image不直观,个人感觉容易出错,QFIL下载时,是按照content.xml的内容对应下载。

2.flat_build下载
flat build还是比较推荐的,我们后面提到的check_sparse和ptool都是基于flat build下载而匹配的工具,下载方式此处不展开,基本高通平台都类似,
主要是针对以下文件做文章
prog_firehose_ddr.elf ------ firehose下载协议
partition.xml ------ 分区表
rawprogram0.xml ------ QFIL下载image的指向表
patch0.xml ------
rawprogram0_WIPE_PARTITIONS.xml

ptool工具及打散checksparse工具的基本使用命令如下:

python ${IMAGE_RELSE_PATH}/ptool/ptool.py -x partition.xml
python ${IMAGE_RELSE_PATH}/ptool/checksparse.py -i rawprogram0.xml
cp rawprogram0.xml rawprogram_unsparse.xml

checksparse 和ptool工具的源码路径位于BP,由于和不同的芯片平台有关,下述仅供参考
Agatti.LA.1.0.1/common/config/storage/

因为遇到一个需要擦除分区的问题,此处提一下创建分区擦除镜像zeros_33sectors.bin函数

def CreateErasingRawProgramFiles():

    CreateFileOfZeros("zeros_1sector.bin",1)
    CreateFileOfZeros("zeros_%dsectors.bin" % BackupGPTNumLBAs,BackupGPTNumLBAs)

    ##import pdb; pdb.set_trace()
    for i in range(8):  # PHY partitions 0 to 7 exist (with 4,5,6,7 as GPPs)
        if i==3:
            continue    # no such PHY partition as of Feb 23, 2012
        temp = Element('data')
        temp.append(Comment('NOTE: This is an ** Autogenerated file **'))
        temp.append(Comment('NOTE: Sector size is %ibytes'%SECTOR_SIZE_IN_BYTES))

        UpdateRawProgram(temp,0, 0.5, i, 0, 1, "zeros_33sectors.bin", "false", "Overwrite MBR sector")
        UpdateRawProgram(temp,1, BackupGPTNumLBAs*SECTOR_SIZE_IN_BYTES/1024.0, i, 0, BackupGPTNumLBAs, "zeros_%dsectors.bin" % BackupGPTNumLBAs, "false", "Overwrite Primary GPT Sectors")
        UpdateRawProgram(temp,-BackupGPTNumLBAs, BackupGPTNumLBAs*SECTOR_SIZE_IN_BYTES/1024.0, i, 0, BackupGPTNumLBAs, "zeros_%dsectors.bin" % BackupGPTNumLBAs, "false", "Overwrite Backup GPT Sectors")

        RAW_PROGRAM = '%swipe_rawprogram_PHY%d.xml' % (OutputFolder,i)

        opfile = open(RAW_PROGRAM, "w")
        opfile.write( prettify(temp) )
        opfile.close()
        print "Created \"%s\"\t<-- Used to *wipe/erase* partition information" % RAW_PROGRAM

    
NumPartitions       = 0
SizeOfPartitionArray= 0

CreateErasingRawProgramFiles调用的CreateFileOfZeros函数

def CreateFileOfZeros(filename,num_sectors):

    try:
        opfile = open(filename, "w+b")
    except Exception, x:
        print "ERROR: Could not create '%s', cwd=%s" % (filename,os.getcwd() )
        print "REASON: %s" % (x)
        sys.exit(1)
        
    temp = [0]*(SECTOR_SIZE_IN_BYTES*num_sectors)
    zeros = struct.pack("%iB"%(SECTOR_SIZE_IN_BYTES*num_sectors),*temp)
    try:
        opfile.write(zeros)
    except Exception, x:
        print "ERROR: Could not write zeros to '%s'\nREASON: %s" % (filename,x)
        sys.exit(1)
    
    try:
        opfile.close()
    except Exception, x:
        print "\tWARNING: Could not close %s" % filename
        print "REASON: %s" % (x)

    print "Created \"%s\"\t\t<-- full of binary zeros - used by \"wipe\" rawprogram files" % filename

open(filename,mode):打开文件,mode可以为:w,r,a,若想同时读写,则加上+,若想以二进制读写,则加上b.

解决实际问题
问题点:采用metadata加密userdata之后,出现刷机完成重启之后,拔电池重启会因metadata分区加密Key损坏或者与keymaster不匹配而导致无法正常进入主Launcer,一直停在动画界面.

生成的擦除镜像的配置rawprogram0_WIPE_PARTITIONS.xml
在这里插入图片描述

标签:xml,checksparse,temp,Qualcomm,zeros,BackupGPTNumLBAs,print,ptool
来源: https://blog.csdn.net/jeephao/article/details/117428789

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有