From 610754e5ad84b2e65358d85dd38a4e0c86dc9342 Mon Sep 17 00:00:00 2001 From: Tao Bao Date: Tue, 7 Jul 2015 18:31:47 -0700 Subject: Scan all init.*.rc files for flash_recovery service. Clockwork builds may rename init.rc to init.core.rc. Change the OTA script to scan all init.*.rc files to determine the proper location for install-recovery.sh. Bug: 22128990 Change-Id: If96bd0b81090683ad0bbfddb735d390204849d9f --- tools/releasetools/common.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'tools') diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py index 3c1575b..edacf7f 100644 --- a/tools/releasetools/common.py +++ b/tools/releasetools/common.py @@ -1203,18 +1203,28 @@ fi } # The install script location moved from /system/etc to /system/bin - # in the L release. Parse the init.rc file to find out where the + # in the L release. Parse init.*.rc files to find out where the # target-files expects it to be, and put it there. sh_location = "etc/install-recovery.sh" - try: - with open(os.path.join(input_dir, "BOOT", "RAMDISK", "init.rc")) as f: + found = False + init_rc_dir = os.path.join(input_dir, "BOOT", "RAMDISK") + init_rc_files = os.listdir(init_rc_dir) + for init_rc_file in init_rc_files: + if (not init_rc_file.startswith('init.') or + not init_rc_file.endswith('.rc')): + continue + + with open(os.path.join(init_rc_dir, init_rc_file)) as f: for line in f: - m = re.match("^service flash_recovery /system/(\S+)\s*$", line) + m = re.match(r"^service flash_recovery /system/(\S+)\s*$", line) if m: sh_location = m.group(1) - print "putting script in", sh_location + found = True break - except (OSError, IOError), e: - print "failed to read init.rc: %s" % (e,) + + if found: + break + + print "putting script in", sh_location output_sink(sh_location, sh) -- cgit v1.1 From 7c4c6f589e846d838136de148ae7e7d680c74d91 Mon Sep 17 00:00:00 2001 From: Tao Bao Date: Wed, 19 Aug 2015 17:07:50 -0700 Subject: sparse_img.py: Divide NONZERO blocks into groups. For squashfs, we currently don't have a system.map. So the whole system image will be treated as a single file. But for some unknown bug, the updater will be killed due to OOM when writing back the patched image to flash (observed on lenok-userdebug MEA49). Prior to getting a real fix, we evenly divide the non-zero blocks into smaller groups (currently 1024 blocks or 4MB per group). Bug: 23227672 Change-Id: Ifeddd8d802f01f8cd2a743a1d1217a284fb6e182 --- tools/releasetools/sparse_img.py | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'tools') diff --git a/tools/releasetools/sparse_img.py b/tools/releasetools/sparse_img.py index 07f3c1c..013044f 100644 --- a/tools/releasetools/sparse_img.py +++ b/tools/releasetools/sparse_img.py @@ -210,6 +210,16 @@ class SparseImage(object): nonzero_blocks = [] reference = '\0' * self.blocksize + # Workaround for bug 23227672. For squashfs, we don't have a system.map. So + # the whole system image will be treated as a single file. But for some + # unknown bug, the updater will be killed due to OOM when writing back the + # patched image to flash (observed on lenok-userdebug MEA49). Prior to + # getting a real fix, we evenly divide the non-zero blocks into smaller + # groups (currently 1024 blocks or 4MB per group). + # Bug: 23227672 + MAX_BLOCKS_PER_GROUP = 1024 + nonzero_groups = [] + f = self.simg_f for s, e in remaining: for b in range(s, e): @@ -232,12 +242,22 @@ class SparseImage(object): nonzero_blocks.append(b) nonzero_blocks.append(b+1) - assert zero_blocks or nonzero_blocks or clobbered_blocks + if len(nonzero_blocks) >= MAX_BLOCKS_PER_GROUP: + nonzero_groups.append(nonzero_blocks) + # Clear the list. + nonzero_blocks = [] + + if nonzero_blocks: + nonzero_groups.append(nonzero_blocks) + nonzero_blocks = [] + + assert zero_blocks or nonzero_groups or clobbered_blocks if zero_blocks: out["__ZERO"] = rangelib.RangeSet(data=zero_blocks) - if nonzero_blocks: - out["__NONZERO"] = rangelib.RangeSet(data=nonzero_blocks) + if nonzero_groups: + for i, blocks in enumerate(nonzero_groups): + out["__NONZERO-%d" % i] = rangelib.RangeSet(data=blocks) if clobbered_blocks: out["__COPY"] = clobbered_blocks -- cgit v1.1