Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3918)

Unified Diff: build/android/devil/android/fastboot_utils.py

Issue 1770943003: [Android] Remove chromium version of devil. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: build/android/devil/android/fastboot_utils.py
diff --git a/build/android/devil/android/fastboot_utils.py b/build/android/devil/android/fastboot_utils.py
deleted file mode 100644
index 587f42fd02ce0bec28a2521c5afa9c65d30c0bbc..0000000000000000000000000000000000000000
--- a/build/android/devil/android/fastboot_utils.py
+++ /dev/null
@@ -1,245 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Provides a variety of device interactions based on fastboot."""
-# pylint: disable=unused-argument
-
-import contextlib
-import fnmatch
-import logging
-import os
-import re
-
-from devil.android import decorators
-from devil.android import device_errors
-from devil.android.sdk import fastboot
-from devil.utils import timeout_retry
-
-_DEFAULT_TIMEOUT = 30
-_DEFAULT_RETRIES = 3
-_FASTBOOT_REBOOT_TIMEOUT = 10 * _DEFAULT_TIMEOUT
-ALL_PARTITIONS = [
- 'bootloader',
- 'radio',
- 'boot',
- 'recovery',
- 'system',
- 'userdata',
- 'cache',
-]
-
-class FastbootUtils(object):
-
- _FASTBOOT_WAIT_TIME = 1
- _RESTART_WHEN_FLASHING = ['bootloader', 'radio']
- _BOARD_VERIFICATION_FILE = 'android-info.txt'
- _FLASH_IMAGE_FILES = {
- 'bootloader': 'bootloader*.img',
- 'radio': 'radio*.img',
- 'boot': 'boot.img',
- 'recovery': 'recovery.img',
- 'system': 'system.img',
- 'userdata': 'userdata.img',
- 'cache': 'cache.img',
- }
-
- def __init__(self, device, fastbooter=None, default_timeout=_DEFAULT_TIMEOUT,
- default_retries=_DEFAULT_RETRIES):
- """FastbootUtils constructor.
-
- Example Usage to flash a device:
- fastboot = fastboot_utils.FastbootUtils(device)
- fastboot.FlashDevice('/path/to/build/directory')
-
- Args:
- device: A DeviceUtils instance.
- fastbooter: Optional fastboot object. If none is passed, one will
- be created.
- default_timeout: An integer containing the default number of seconds to
- wait for an operation to complete if no explicit value is provided.
- default_retries: An integer containing the default number or times an
- operation should be retried on failure if no explicit value is provided.
- """
- self._device = device
- self._board = device.product_board
- self._serial = str(device)
- self._default_timeout = default_timeout
- self._default_retries = default_retries
- if fastbooter:
- self.fastboot = fastbooter
- else:
- self.fastboot = fastboot.Fastboot(self._serial)
-
- @decorators.WithTimeoutAndRetriesFromInstance()
- def WaitForFastbootMode(self, timeout=None, retries=None):
- """Wait for device to boot into fastboot mode.
-
- This waits for the device serial to show up in fastboot devices output.
- """
- def fastboot_mode():
- return self._serial in self.fastboot.Devices()
-
- timeout_retry.WaitFor(fastboot_mode, wait_period=self._FASTBOOT_WAIT_TIME)
-
- @decorators.WithTimeoutAndRetriesFromInstance(
- min_default_timeout=_FASTBOOT_REBOOT_TIMEOUT)
- def EnableFastbootMode(self, timeout=None, retries=None):
- """Reboots phone into fastboot mode.
-
- Roots phone if needed, then reboots phone into fastboot mode and waits.
- """
- self._device.EnableRoot()
- self._device.adb.Reboot(to_bootloader=True)
- self.WaitForFastbootMode()
-
- @decorators.WithTimeoutAndRetriesFromInstance(
- min_default_timeout=_FASTBOOT_REBOOT_TIMEOUT)
- def Reboot(self, bootloader=False, timeout=None, retries=None):
- """Reboots out of fastboot mode.
-
- It reboots the phone either back into fastboot, or to a regular boot. It
- then blocks until the device is ready.
-
- Args:
- bootloader: If set to True, reboots back into bootloader.
- """
- if bootloader:
- self.fastboot.RebootBootloader()
- self.WaitForFastbootMode()
- else:
- self.fastboot.Reboot()
- self._device.WaitUntilFullyBooted(timeout=_FASTBOOT_REBOOT_TIMEOUT)
-
- def _VerifyBoard(self, directory):
- """Validate as best as possible that the android build matches the device.
-
- Goes through build files and checks if the board name is mentioned in the
- |self._BOARD_VERIFICATION_FILE| or in the build archive.
-
- Args:
- directory: directory where build files are located.
- """
- files = os.listdir(directory)
- board_regex = re.compile(r'require board=(\w+)')
- if self._BOARD_VERIFICATION_FILE in files:
- with open(os.path.join(directory, self._BOARD_VERIFICATION_FILE)) as f:
- for line in f:
- m = board_regex.match(line)
- if m:
- board_name = m.group(1)
- if board_name == self._board:
- return True
- elif board_name:
- return False
- else:
- logging.warning('No board type found in %s.',
- self._BOARD_VERIFICATION_FILE)
- else:
- logging.warning('%s not found. Unable to use it to verify device.',
- self._BOARD_VERIFICATION_FILE)
-
- zip_regex = re.compile(r'.*%s.*\.zip' % re.escape(self._board))
- for f in files:
- if zip_regex.match(f):
- return True
-
- return False
-
- def _FindAndVerifyPartitionsAndImages(self, partitions, directory):
- """Validate partitions and images.
-
- Validate all partition names and partition directories. Cannot stop mid
- flash so its important to validate everything first.
-
- Args:
- Partitions: partitions to be tested.
- directory: directory containing the images.
-
- Returns:
- Dictionary with exact partition, image name mapping.
- """
- files = os.listdir(directory)
-
- def find_file(pattern):
- for filename in files:
- if fnmatch.fnmatch(filename, pattern):
- return os.path.join(directory, filename)
- raise device_errors.FastbootCommandFailedError(
- 'Failed to flash device. Counld not find image for %s.', pattern)
-
- return {name: find_file(self._FLASH_IMAGE_FILES[name])
- for name in partitions}
-
- def _FlashPartitions(self, partitions, directory, wipe=False, force=False):
- """Flashes all given partiitons with all given images.
-
- Args:
- partitions: List of partitions to flash.
- directory: Directory where all partitions can be found.
- wipe: If set to true, will automatically detect if cache and userdata
- partitions are sent, and if so ignore them.
- force: boolean to decide to ignore board name safety checks.
-
- Raises:
- device_errors.CommandFailedError(): If image cannot be found or if bad
- partition name is give.
- """
- if not self._VerifyBoard(directory):
- if force:
- logging.warning('Could not verify build is meant to be installed on '
- 'the current device type, but force flag is set. '
- 'Flashing device. Possibly dangerous operation.')
- else:
- raise device_errors.CommandFailedError(
- 'Could not verify build is meant to be installed on the current '
- 'device type. Run again with force=True to force flashing with an '
- 'unverified board.')
-
- flash_image_files = self._FindAndVerifyPartitionsAndImages(partitions,
- directory)
- for partition in partitions:
- if partition in ['cache', 'userdata'] and not wipe:
- logging.info(
- 'Not flashing in wipe mode. Skipping partition %s.', partition)
- else:
- logging.info(
- 'Flashing %s with %s', partition, flash_image_files[partition])
- self.fastboot.Flash(partition, flash_image_files[partition])
- if partition in self._RESTART_WHEN_FLASHING:
- self.Reboot(bootloader=True)
-
- @contextlib.contextmanager
- def FastbootMode(self, timeout=None, retries=None):
- """Context manager that enables fastboot mode, and reboots after.
-
- Example usage:
- with FastbootMode():
- Flash Device
- # Anything that runs after flashing.
- """
- self.EnableFastbootMode()
- self.fastboot.SetOemOffModeCharge(False)
- try:
- yield self
- finally:
- self.fastboot.SetOemOffModeCharge(True)
- self.Reboot()
-
- def FlashDevice(self, directory, partitions=None, wipe=False):
- """Flash device with build in |directory|.
-
- Directory must contain bootloader, radio, boot, recovery, system, userdata,
- and cache .img files from an android build. This is a dangerous operation so
- use with care.
-
- Args:
- fastboot: A FastbootUtils instance.
- directory: Directory with build files.
- wipe: Wipes cache and userdata if set to true.
- partitions: List of partitions to flash. Defaults to all.
- """
- if partitions is None:
- partitions = ALL_PARTITIONS
- with self.FastbootMode():
- self._FlashPartitions(partitions, directory, wipe=wipe)
« no previous file with comments | « build/android/devil/android/device_utils_test.py ('k') | build/android/devil/android/fastboot_utils_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698