Home | History | Annotate | Download | only in commands
      1 # Copyright 2017 - The Android Open Source Project
      2 #
      3 # Licensed under the Apache License, Version 2.0 (the "License");
      4 # you may not use this file except in compliance with the License.
      5 # You may obtain a copy of the License at
      6 #
      7 #     http://www.apache.org/licenses/LICENSE-2.0
      8 #
      9 # Unless required by applicable law or agreed to in writing, software
     10 # distributed under the License is distributed on an "AS IS" BASIS,
     11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 # See the License for the specific language governing permissions and
     13 # limitations under the License.
     14 
     15 """Implementation of gsi_util flash_gsi command."""
     16 
     17 from gsi_util.utils import cmd_utils
     18 from gsi_util.utils import fastboot_utils
     19 from gsi_util.utils import file_utils
     20 
     21 
     22 def do_flash_gsi(args):
     23   """Flashes a GSI image (system.img).
     24 
     25   Also erases userdata/metadata partition and disables
     26   Android Verified Boot (AVB).
     27 
     28   Args:
     29     args: flash_gsi command arguments.
     30   """
     31 
     32   fastboot_utils.erase()  # erases userdata/cache partition
     33   # Not every device has metadata partition, so allow_error is True.
     34   fastboot_utils.erase('metadata', allow_error=True)
     35 
     36   # Flashes GSI.
     37   fastboot_utils.flash('system', args.image)
     38 
     39   # Disables AVB.
     40   with file_utils.UnopenedTemporaryFile() as vbmeta_image:
     41     # vbmeta flag 2 means disable entire AVB verification.
     42     cmd_utils.run_command(['avbtool', 'make_vbmeta_image',
     43                            '--flag', '2',
     44                            '--padding_size', '4096',
     45                            '--output', vbmeta_image])
     46     # Not every device uses AVB, so allow_error is True.
     47     fastboot_utils.flash('vbmeta', vbmeta_image, allow_error=True)
     48 
     49   # Reboots the device.
     50   fastboot_utils.reboot()
     51 
     52 
     53 def setup_command_args(subparsers):
     54   """Sets up command args for 'flash_gsi'."""
     55   parser = subparsers.add_parser(
     56       'flash_gsi', help='flash a GSI image',
     57       description=('Flash a GSI image - '
     58                    'including erasing userdata, '
     59                    'disabling AVB (if the device supports AVB) '
     60                    'and erasing metadata partition (if the device has).'))
     61   parser.add_argument('-i', '--image',
     62                       help='the GSI image to flash', type=str)
     63   parser.set_defaults(func=do_flash_gsi)
     64