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
diff --git a/tools/releasetools/merge_ota.py b/tools/releasetools/merge_ota.py
index 441312c..24d9ea9 100644
--- a/tools/releasetools/merge_ota.py
+++ b/tools/releasetools/merge_ota.py
@@ -14,7 +14,6 @@
import argparse
import logging
-import shlex
import struct
import sys
import update_payload
@@ -31,6 +30,7 @@
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 @@
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 @@
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 @@
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 @@
return 0
-
-
if __name__ == '__main__':
logging.basicConfig()
sys.exit(main(sys.argv))