diff options
author | Sylvain Chouleur <sylvain.chouleur@intel.com> | 2014-08-19 01:45:28 +0200 |
---|---|---|
committer | Ed Tam <etam@google.com> | 2014-08-20 16:27:12 -0700 |
commit | 9eac47a4bc970eb819502b299a3846f0773cb6c1 (patch) | |
tree | 18cc9087ac8b3aab7fcf54f47b4e2baa08cb164d | |
parent | 838d53c304ff966d4170776681d2ac733940ecbc (diff) | |
download | fugu-9eac47a4bc970eb819502b299a3846f0773cb6c1.tar.gz |
Fugu OTA: support new bootloader.img format
Bootloader image format as been changed to support future versions.
It also add support for splashscreen component.
Bug:17115080
Change-Id: I88f7efbac4ab63c602a3270a479012aeb83892c7
Signed-off-by: Sylvain Chouleur <sylvain.chouleur@intel.com>
-rw-r--r-- | recovery.fstab | 1 | ||||
-rw-r--r-- | releasetools.py | 51 |
2 files changed, 43 insertions, 9 deletions
diff --git a/recovery.fstab b/recovery.fstab index 10809ed..394c9e0 100644 --- a/recovery.fstab +++ b/recovery.fstab @@ -1,5 +1,6 @@ /dev/block/by-name/boot /boot emmc defaults defaults /dev/block/by-name/recovery /recovery emmc defaults defaults +/dev/block/by-name/splashscreen /splashscreen emmc defaults defaults /dev/block/by-name/fastboot /fastboot emmc defaults defaults /dev/block/by-name/misc /misc emmc defaults defaults /dev/block/by-name/system /system ext4 ro,noatime wait diff --git a/releasetools.py b/releasetools.py index a702fee..7a40edd 100644 --- a/releasetools.py +++ b/releasetools.py @@ -23,25 +23,58 @@ def WriteIfwi(info): info.script.AppendExtra('package_extract_file("ifwi.bin", "/tmp/ifwi.bin");') info.script.AppendExtra("""fugu.flash_ifwi("/tmp/ifwi.bin");""") -def WriteDroitboot(info): +def WriteDroidboot(info): info.script.WriteRawImage("/fastboot", "droidboot.img") +def WriteSplashscreen(info): + info.script.WriteRawImage("/splashscreen", "splashscreen.img") + def WriteBootloader(info, bootloader): - header_fmt = "<8sHHII" + header_fmt = "<8sHH" header_size = struct.calcsize(header_fmt) - magic, revision, reserved, ifwi_size, droidboot_size = struct.unpack( + magic, revision, reserved = struct.unpack( header_fmt, bootloader[:header_size]) assert magic == "BOOTLDR!", "bootloader.img bad magic value" - ifwi = bootloader[header_size:header_size+ifwi_size] - droidboot = bootloader[header_size+ifwi_size:] + if revision == 1: + offset = header_size; + header_v1_fmt = "II" + header_v1_size = struct.calcsize(header_v1_fmt) + ifwi_size, droidboot_size = struct.unpack(header_v1_fmt, bootloader[offset:offset + header_v1_size]) + offset += header_v1_size + ifwi = bootloader[offset:offset + ifwi_size] + offset += ifwi_size + droidboot = bootloader[offset:] + common.ZipWriteStr(info.output_zip, "droidboot.img", droidboot) + common.ZipWriteStr(info.output_zip, "ifwi.bin", ifwi) + WriteIfwi(info) + WriteDroidboot(info) + return + + offset = header_size; + while offset < len(bootloader): + c_header_fmt = "<8sIBBBB" + c_header_size = struct.calcsize(c_header_fmt) + c_magic, size, flags, _, _ , _ = struct.unpack(c_header_fmt, bootloader[offset:offset + c_header_size]) + buf = bootloader[offset + c_header_size: offset + c_header_size + size] + offset += c_header_size + size - common.ZipWriteStr(info.output_zip, "droidboot.img", droidboot) - common.ZipWriteStr(info.output_zip, "ifwi.bin", ifwi) + if not flags & 1: + continue - WriteIfwi(info) - WriteDroitboot(info) + if c_magic == "IFWI!!!!": + common.ZipWriteStr(info.output_zip, "ifwi.bin", buf) + WriteIfwi(info); + continue + if c_magic == "DROIDBT!": + common.ZipWriteStr(info.output_zip, "droidboot.img", buf) + WriteDroidboot(info); + continue + if c_magic == "SPLASHS!": + common.ZipWriteStr(info.output_zip, "splashscreen.img", buf) + WriteSplashscreen(info); + continue def FullOTA_InstallEnd(info): try: |