releasetools: Add --oem_no_mount option.
We may have devices with OEM-specific properties but without an OEM
partition (e.g. the properties might be set by init based on hardware
SKUs). For such devices, we supply --oem_no_mount to skip mounting the
OEM partition in the updater-script. The option is only meaningful when
-o (--oem_settings) is specified.
Bug: 27359929
Change-Id: Ic08396e478a82be4188e980e704b33b4f704a8d7
(cherry picked from commit 8608cde944
)
This commit is contained in:
parent
e511a07677
commit
df4cb0b2c1
|
@ -77,11 +77,17 @@ class EdifyGenerator(object):
|
||||||
raise ValueError("must specify an OEM property")
|
raise ValueError("must specify an OEM property")
|
||||||
if not value:
|
if not value:
|
||||||
raise ValueError("must specify the OEM value")
|
raise ValueError("must specify the OEM value")
|
||||||
cmd = ('file_getprop("/oem/oem.prop", "{name}") == "{value}" || '
|
if common.OPTIONS.oem_no_mount:
|
||||||
'abort("This package expects the value \\"{value}\\" for '
|
cmd = ('getprop("{name}") == "{value}" || '
|
||||||
'\\"{name}\\" on the OEM partition; this has value \\"" + '
|
'abort("This package expects the value \\"{value}\\" for '
|
||||||
'file_getprop("/oem/oem.prop", "{name}") + "\\".");').format(
|
'\\"{name}\\"; this has value \\"" + '
|
||||||
name=name, value=value)
|
'getprop("{name}") + "\\".");').format(name=name, value=value)
|
||||||
|
else:
|
||||||
|
cmd = ('file_getprop("/oem/oem.prop", "{name}") == "{value}" || '
|
||||||
|
'abort("This package expects the value \\"{value}\\" for '
|
||||||
|
'\\"{name}\\" on the OEM partition; this has value \\"" + '
|
||||||
|
'file_getprop("/oem/oem.prop", "{name}") + "\\".");').format(
|
||||||
|
name=name, value=value)
|
||||||
self.script.append(cmd)
|
self.script.append(cmd)
|
||||||
|
|
||||||
def AssertSomeFingerprint(self, *fp):
|
def AssertSomeFingerprint(self, *fp):
|
||||||
|
|
|
@ -55,6 +55,12 @@ Usage: ota_from_target_files [flags] input_target_files output_ota_package
|
||||||
Use the file to specify the expected OEM-specific properties
|
Use the file to specify the expected OEM-specific properties
|
||||||
on the OEM partition of the intended device.
|
on the OEM partition of the intended device.
|
||||||
|
|
||||||
|
--oem_no_mount
|
||||||
|
For devices with OEM-specific properties but without an OEM partition,
|
||||||
|
do not mount the OEM partition in the updater-script. This should be
|
||||||
|
very rarely used, since it's expected to have a dedicated OEM partition
|
||||||
|
for OEM-specific properties. Only meaningful when -o is specified.
|
||||||
|
|
||||||
-w (--wipe_user_data)
|
-w (--wipe_user_data)
|
||||||
Generate an OTA package that will wipe the user data partition
|
Generate an OTA package that will wipe the user data partition
|
||||||
when installed.
|
when installed.
|
||||||
|
@ -128,6 +134,7 @@ OPTIONS.no_signing = False
|
||||||
OPTIONS.block_based = False
|
OPTIONS.block_based = False
|
||||||
OPTIONS.updater_binary = None
|
OPTIONS.updater_binary = None
|
||||||
OPTIONS.oem_source = None
|
OPTIONS.oem_source = None
|
||||||
|
OPTIONS.oem_no_mount = False
|
||||||
OPTIONS.fallback_to_full = True
|
OPTIONS.fallback_to_full = True
|
||||||
OPTIONS.full_radio = False
|
OPTIONS.full_radio = False
|
||||||
OPTIONS.full_bootloader = False
|
OPTIONS.full_bootloader = False
|
||||||
|
@ -509,7 +516,8 @@ def WriteFullOTAPackage(input_zip, output_zip):
|
||||||
if oem_props is not None and len(oem_props) > 0:
|
if oem_props is not None and len(oem_props) > 0:
|
||||||
if OPTIONS.oem_source is None:
|
if OPTIONS.oem_source is None:
|
||||||
raise common.ExternalError("OEM source required for this build")
|
raise common.ExternalError("OEM source required for this build")
|
||||||
script.Mount("/oem", recovery_mount_options)
|
if not OPTIONS.oem_no_mount:
|
||||||
|
script.Mount("/oem", recovery_mount_options)
|
||||||
oem_dict = common.LoadDictionaryFromLines(
|
oem_dict = common.LoadDictionaryFromLines(
|
||||||
open(OPTIONS.oem_source).readlines())
|
open(OPTIONS.oem_source).readlines())
|
||||||
|
|
||||||
|
@ -744,6 +752,18 @@ def WriteBlockIncrementalOTAPackage(target_zip, source_zip, output_zip):
|
||||||
source_version, OPTIONS.target_info_dict,
|
source_version, OPTIONS.target_info_dict,
|
||||||
fstab=OPTIONS.source_info_dict["fstab"])
|
fstab=OPTIONS.source_info_dict["fstab"])
|
||||||
|
|
||||||
|
oem_props = OPTIONS.info_dict.get("oem_fingerprint_properties")
|
||||||
|
recovery_mount_options = OPTIONS.source_info_dict.get(
|
||||||
|
"recovery_mount_options")
|
||||||
|
oem_dict = None
|
||||||
|
if oem_props is not None and len(oem_props) > 0:
|
||||||
|
if OPTIONS.oem_source is None:
|
||||||
|
raise common.ExternalError("OEM source required for this build")
|
||||||
|
if not OPTIONS.oem_no_mount:
|
||||||
|
script.Mount("/oem", recovery_mount_options)
|
||||||
|
oem_dict = common.LoadDictionaryFromLines(
|
||||||
|
open(OPTIONS.oem_source).readlines())
|
||||||
|
|
||||||
metadata = {
|
metadata = {
|
||||||
"pre-device": GetBuildProp("ro.product.device",
|
"pre-device": GetBuildProp("ro.product.device",
|
||||||
OPTIONS.source_info_dict),
|
OPTIONS.source_info_dict),
|
||||||
|
@ -1519,6 +1539,8 @@ def main(argv):
|
||||||
OPTIONS.omit_prereq = True
|
OPTIONS.omit_prereq = True
|
||||||
elif o in ("-o", "--oem_settings"):
|
elif o in ("-o", "--oem_settings"):
|
||||||
OPTIONS.oem_source = a
|
OPTIONS.oem_source = a
|
||||||
|
elif o == "--oem_no_mount":
|
||||||
|
OPTIONS.oem_no_mount = True
|
||||||
elif o in ("-e", "--extra_script"):
|
elif o in ("-e", "--extra_script"):
|
||||||
OPTIONS.extra_script = a
|
OPTIONS.extra_script = a
|
||||||
elif o in ("-a", "--aslr_mode"):
|
elif o in ("-a", "--aslr_mode"):
|
||||||
|
@ -1572,6 +1594,7 @@ def main(argv):
|
||||||
"block",
|
"block",
|
||||||
"binary=",
|
"binary=",
|
||||||
"oem_settings=",
|
"oem_settings=",
|
||||||
|
"oem_no_mount",
|
||||||
"verify",
|
"verify",
|
||||||
"no_fallback_to_full",
|
"no_fallback_to_full",
|
||||||
"stash_threshold=",
|
"stash_threshold=",
|
||||||
|
|
Loading…
Reference in New Issue