Add a tool to generate OTA from images
During build, we will need to generate an OTA for boot partition using a 16K boot image. Typically, OTA is generated from target_files.zip . To avoid relying on target_files.zip as a dependency for 16K OTA, add a tool to generate OTA directly from a raw image. Test: th, ota_from_raw_img --partition_name boot --output ota.zip $OUT/boot_16k.img Bug: 293313353 Change-Id: I2076332faf2a8dc573450597efd481e285a49545
This commit is contained in:
@@ -14,7 +14,6 @@
|
||||
|
||||
import argparse
|
||||
import logging
|
||||
import shlex
|
||||
import struct
|
||||
import sys
|
||||
import update_payload
|
||||
@@ -31,6 +30,7 @@ from update_payload import Payload
|
||||
|
||||
from payload_signer import PayloadSigner
|
||||
from ota_utils import PayloadGenerator, METADATA_PROTO_NAME, FinalizeMetadata
|
||||
from ota_signing_utils import AddSigningArgumentParse
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -126,7 +126,7 @@ def MergeManifests(payloads: List[Payload]) -> DeltaArchiveManifest:
|
||||
ExtendPartitionUpdates(output_manifest.partitions, manifest.partitions)
|
||||
try:
|
||||
MergeDynamicPartitionMetadata(
|
||||
output_manifest.dynamic_partition_metadata, manifest.dynamic_partition_metadata)
|
||||
output_manifest.dynamic_partition_metadata, manifest.dynamic_partition_metadata)
|
||||
except DuplicatePartitionError:
|
||||
logger.error(
|
||||
"OTA %s has duplicate partition with some of the previous OTAs", payload.name)
|
||||
@@ -190,6 +190,7 @@ def CheckDuplicatePartitions(payloads: List[Payload]):
|
||||
f"OTA {partition_to_ota[part].name} and {payload.name} have duplicating partition {part}")
|
||||
partition_to_ota[part] = payload
|
||||
|
||||
|
||||
def ApexInfo(file_paths):
|
||||
if len(file_paths) > 1:
|
||||
logger.info("More than one target file specified, will ignore "
|
||||
@@ -201,33 +202,19 @@ def ApexInfo(file_paths):
|
||||
return apex_info_bytes
|
||||
return None
|
||||
|
||||
def ParseSignerArgs(args):
|
||||
if args is None:
|
||||
return None
|
||||
return shlex.split(args)
|
||||
|
||||
def main(argv):
|
||||
parser = argparse.ArgumentParser(description='Merge multiple partial OTAs')
|
||||
parser.add_argument('packages', type=str, nargs='+',
|
||||
help='Paths to OTA packages to merge')
|
||||
parser.add_argument('--package_key', type=str,
|
||||
help='Paths to private key for signing payload')
|
||||
parser.add_argument('--search_path', type=str,
|
||||
help='Search path for framework/signapk.jar')
|
||||
parser.add_argument('--payload_signer', type=str,
|
||||
help='Path to custom payload signer')
|
||||
parser.add_argument('--payload_signer_args', type=ParseSignerArgs,
|
||||
help='Arguments for payload signer if necessary')
|
||||
parser.add_argument('--payload_signer_maximum_signature_size', type=str,
|
||||
help='Maximum signature size (in bytes) that would be '
|
||||
'generated by the given payload signer')
|
||||
parser.add_argument('--output', type=str,
|
||||
help='Paths to output merged ota', required=True)
|
||||
parser.add_argument('--metadata_ota', type=str,
|
||||
help='Output zip will use build metadata from this OTA package, if unspecified, use the last OTA package in merge list')
|
||||
parser.add_argument('--private_key_suffix', type=str,
|
||||
help='Suffix to be appended to package_key path', default=".pk8")
|
||||
parser.add_argument('-v', action="store_true", help="Enable verbose logging", dest="verbose")
|
||||
parser.add_argument('-v', action="store_true",
|
||||
help="Enable verbose logging", dest="verbose")
|
||||
AddSigningArgumentParse(parser)
|
||||
|
||||
parser.epilog = ('This tool can also be used to resign a regular OTA. For a single regular OTA, '
|
||||
'apex_info.pb will be written to output. When merging multiple OTAs, '
|
||||
'apex_info.pb will not be written.')
|
||||
@@ -301,8 +288,6 @@ def main(argv):
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
logging.basicConfig()
|
||||
sys.exit(main(sys.argv))
|
||||
|
Reference in New Issue
Block a user