def run_once(self, host): # Find the last cr50 update message already in /var/log/messages last_message = cr50_utils.CheckForFailures(host, '') # Clears the state and reboots the system to get the cr50-update to run cr50_utils.ClearUpdateStateAndReboot(host) cr50_utils.CheckForFailures(host, last_message)
def run_once(self, host, cmdline_args): """Run the cr50 update script and make sure there aren't errors""" # Find the last cr50 update message already in /var/log/messages last_message = cr50_utils.CheckForFailures(host, '') # Clears the state and reboots the system to get the cr50-update to run cr50_utils.ClearUpdateStateAndReboot(host) cr50_utils.CheckForFailures(host, last_message)
def run_once(self, host, cmdline_args): # Disable CCD so it doesn't interfere with the Cr50 AP usb connection. if hasattr(self, "cr50"): self.cr50.ccd_disable() # Find the last cr50 update message already in /var/log/messages last_message = cr50_utils.CheckForFailures(host, '') # Clears the state and reboots the system to get the cr50-update to run cr50_utils.ClearUpdateStateAndReboot(host) cr50_utils.CheckForFailures(host, last_message)
def run_update(self, image_name, use_usb_update=False): """Copy the image to the DUT and upate to it. Normal updates will use the cr50-update script to update. If a rollback is True, use usb_update to flash the image and then use the 'rw' commands to force a rollback. @param image_name: the key in the images dict that can be used to retrieve the image info. @param use_usb_update: True if usb_updater should be used directly instead of running the update script. """ self.cr50.ccd_disable() # Get the current update information image_ver, image_ver_str, image_path = self.images[image_name] dest, ver = cr50_utils.InstallImage(self.host, image_path) assert ver == image_ver, "Install failed" image_rw = image_ver[1] running_ver = cr50_utils.GetRunningVersion(self.host) running_ver_str = cr50_utils.GetVersionString(running_ver) # If the given image is older than the running one, then we will need # to do a rollback to complete the update. rollback = (cr50_utils.GetNewestVersion(running_ver[1], image_rw) != image_rw) logging.info("Attempting %s from %s to %s", "rollback" if rollback else "update", running_ver_str, image_ver_str) # If a rollback is needed, flash the image into the inactive partition, # on or use usb_update to update to the new image if it is requested. if use_usb_update or rollback: self.cr50_update(dest, rollback=rollback, erase_nvmem=self.erase_nvmem) self.check_state((self.checkers.crossystem_checker, {'mainfw_type': 'normal'})) # Running the usb update or rollback will enable ccd. Disable it again. self.cr50.ccd_disable() # Get the last cr50 update related message from /var/log/messages last_message = cr50_utils.CheckForFailures(self.host, '') # Clear the update state and reboot, so cr50-update will run again. cr50_utils.ClearUpdateStateAndReboot(self.host) # Verify the system boots normally after the update self.check_state((self.checkers.crossystem_checker, {'mainfw_type': 'normal'})) # Verify the version has been updated and that there have been no # unexpected usb_updater exit codes. cr50_utils.VerifyUpdate(self.host, image_ver, last_message) logging.info("Successfully updated from %s to %s %s", running_ver_str, image_name, image_ver_str)
def run_update(self, image_name, use_usb_update=False): """Copy the image to the DUT and upate to it. Normal updates will use the cr50-update script to update. If a rollback is True, use usb_update to flash the image and then use the 'rw' commands to force a rollback. @param image_name: the key in the images dict that can be used to retrieve the image info. @param use_usb_update: True if usb_updater should be used directly instead of running the update script. """ self.cr50.ccd_disable() # Get the current update information image_ver, image_ver_str, image_path = self.images[image_name] dest, ver = cr50_utils.InstallImage(self.host, image_path, self.device_update_path) assert ver == image_ver, "Install failed" image_rw = image_ver[1] running_ver = cr50_utils.GetRunningVersion(self.host) running_ver_str = cr50_utils.GetVersionString(running_ver) # If the given image is older than the running one, then we will need # to do a rollback to complete the update. rollback = (cr50_utils.GetNewestVersion(running_ver[1], image_rw) != image_rw) logging.info("Attempting %s from %s to %s", "rollback" if rollback else "update", running_ver_str, image_ver_str) # If a rollback is needed, flash the image into the inactive partition, # on or use usb_update to update to the new image if it is requested. if use_usb_update or rollback: self.cr50_update(image_path, rollback=rollback, chip_bid=self.chip_bid, chip_flags=self.chip_flags) self.check_state((self.checkers.crossystem_checker, { 'mainfw_type': 'normal' })) # Cr50 is going to reject an update if it hasn't been up for more than # 60 seconds. Wait until that passes before trying to run the update. self.cr50.wait_until_update_is_allowed() # Running the usb update or rollback will enable ccd. Disable it again. self.cr50.ccd_disable() # Get the last cr50 update related message from /var/log/messages last_message = cr50_utils.CheckForFailures(self.host, '') if self.test_post_install: self.post_install() else: self.startup_install() # The cr50 updates happen over /dev/tpm0. It takes a while. After # cr50-update has finished, cr50 should reboot. Wait until this happens # before sending anymore commands. self.cr50.wait_for_reboot() # Verify the system boots normally after the update self.check_state((self.checkers.crossystem_checker, { 'mainfw_type': 'normal' })) # Verify the version has been updated and that there have been no # unexpected usb_updater exit codes. cr50_utils.VerifyUpdate(self.host, image_ver, last_message) logging.info("Successfully updated from %s to %s %s", running_ver_str, image_name, image_ver_str)