blob: 48f6c2fe3b418036e9f50f4541557fee1b574326 [file] [log] [blame]
Yusuf Mohsinallyf4664222013-08-14 12:59:16 -07001# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -07002# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
Yusuf Mohsinallyf4664222013-08-14 12:59:16 -07005"""Code to provide functions for FAFT tests.
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -07006
Yusuf Mohsinallyf4664222013-08-14 12:59:16 -07007These can be exposed via a xmlrpci server running on the DUT.
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -07008"""
9
Tom Wai-Hong Tam9434b142015-08-05 02:35:49 +080010import functools, os, tempfile
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -070011
Yusuf Mohsinallycd108da2013-08-12 14:06:12 -070012import common
Tom Wai-Hong Tam533eed72015-07-31 07:37:27 +080013from autotest_lib.client.cros.faft.utils import (cgpt_handler,
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +080014 os_interface,
David Sodman3ad51642015-01-22 11:15:33 -080015 firmware_check_keys,
Yusuf Mohsinallycd108da2013-08-12 14:06:12 -070016 firmware_updater,
17 flashrom_handler,
18 kernel_handler,
Vic (Chun-Ju) Yang4edbc072014-02-11 14:40:57 +080019 rootfs_handler,
Yusuf Mohsinallycd108da2013-08-12 14:06:12 -070020 saft_flashrom_util,
21 tpm_handler,
22 )
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -070023
24
Tom Wai-Hong Tam0e680af2011-10-26 14:32:55 +080025def allow_multiple_section_input(image_operator):
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +080026 """Decorate a method to support multiple sections.
27
28 @param image_operator: Method accepting one section as its argument.
29 """
Tom Wai-Hong Tam0e680af2011-10-26 14:32:55 +080030 @functools.wraps(image_operator)
31 def wrapper(self, section):
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +080032 """Wrapper method to support multiple sections.
33
34 @param section: A list of sections of just a section.
35 """
Tom Wai-Hong Tam0e680af2011-10-26 14:32:55 +080036 if type(section) in (tuple, list):
37 for sec in section:
38 image_operator(self, sec)
39 else:
40 image_operator(self, section)
41 return wrapper
42
43
Vic Yang13d22ec2012-06-18 15:12:47 +080044class LazyFlashromHandlerProxy:
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +080045 """Proxy of FlashromHandler for lazy initialization."""
Vic Yang13d22ec2012-06-18 15:12:47 +080046 _loaded = False
47 _obj = None
48
49 def __init__(self, *args, **kargs):
50 self._args = args
51 self._kargs = kargs
52
53 def _load(self):
54 self._obj = flashrom_handler.FlashromHandler()
55 self._obj.init(*self._args, **self._kargs)
56 self._obj.new_image()
57 self._loaded = True
58
59 def __getattr__(self, name):
60 if not self._loaded:
61 self._load()
62 return getattr(self._obj, name)
63
Tom Wai-Hong Tamc1c4deb2012-07-26 14:28:11 +080064 def reload(self):
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +080065 """Reload the FlashromHandler class."""
Tom Wai-Hong Tamc1c4deb2012-07-26 14:28:11 +080066 self._loaded = False
67
Vic Yang13d22ec2012-06-18 15:12:47 +080068
Yusuf Mohsinallyf4664222013-08-14 12:59:16 -070069class RPCFunctions(object):
70 """A class which aggregates some useful functions for firmware testing.
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -070071
72 This class can be exposed via a XMLRPC server such that its functions can
Chun-ting Changd43aa9b2012-11-16 10:12:05 +080073 be accessed remotely. Method naming should fit the naming rule
74 '_[categories]_[method_name]' where categories contains system, ec, bios,
75 kernel, cgpt, tpm, updater, etc. Methods should be called by
76 'FAFTClient.[categories].[method_name]', because _dispatch will rename
77 this name to '_[categories]_[method_name]'.
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -070078
79 Attributes:
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +080080 _os_if: An object to encapsulate OS services functions.
Vic Yang59cac9c2012-05-21 15:28:42 +080081 _bios_handler: An object to automate BIOS flashrom testing.
82 _ec_handler: An object to automate EC flashrom testing.
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -070083 _kernel_handler: An object to provide kernel related actions.
Tom Wai-Hong Tam48ae2212013-06-26 10:37:40 +080084 _log_file: Path of the log file.
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -070085 _tpm_handler: An object to control TPM device.
Chun-ting Changcf924e92012-10-29 13:49:01 +080086 _updater: An object to update firmware.
ctchangc7e55ea2012-08-09 16:19:14 +080087 _temp_path: Path of a temp directory.
88 _keys_path: Path of a directory, keys/, in temp directory.
89 _work_path: Path of a directory, work/, in temp directory.
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -070090 """
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -070091 def __init__(self):
92 """Initialize the data attributes of this class."""
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -070093 # TODO(waihong): Move the explicit object.init() methods to the
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +080094 # objects' constructors (OSInterface, FlashromHandler,
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -070095 # KernelHandler, and TpmHandler).
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +080096 self._os_if = os_interface.OSInterface()
Tom Wai-Hong Tam48958832011-12-30 10:16:57 +080097 # We keep the state of FAFT test in a permanent directory over reboots.
Tom Wai-Hong Tam07278c22012-02-08 16:53:00 +080098 state_dir = '/var/tmp/faft'
Tom Wai-Hong Tam6db59cb2015-07-21 08:11:23 +080099 self._log_file = os.path.join(state_dir, 'faft_client.log')
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800100 self._os_if.init(state_dir, log_file=self._log_file)
danny chan6dc580a2015-08-08 00:14:02 +0000101 os.chdir(state_dir)
Tom Wai-Hong Tam6db59cb2015-07-21 08:11:23 +0800102
Vic Yang13d22ec2012-06-18 15:12:47 +0800103 self._bios_handler = LazyFlashromHandlerProxy(
104 saft_flashrom_util,
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800105 self._os_if,
Vic Yang59cac9c2012-05-21 15:28:42 +0800106 None,
107 '/usr/share/vboot/devkeys',
108 'bios')
Vic Yang59cac9c2012-05-21 15:28:42 +0800109
Todd Brochf2b1d012012-06-14 12:55:21 -0700110 self._ec_handler = None
Tom Wai-Hong Tam38aa5482015-08-01 05:31:07 +0800111 if self._os_if.run_shell_command_get_status('mosys ec info') == 0:
Vic Yang13d22ec2012-06-18 15:12:47 +0800112 self._ec_handler = LazyFlashromHandlerProxy(
113 saft_flashrom_util,
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800114 self._os_if,
Vic Yang13d22ec2012-06-18 15:12:47 +0800115 'ec_root_key.vpubk',
Todd Brochf2b1d012012-06-14 12:55:21 -0700116 '/usr/share/vboot/devkeys',
117 'ec')
Tom Wai-Hong Tam38aa5482015-08-01 05:31:07 +0800118 else:
119 self._os_if.log('No EC is reported by mosys.')
Todd Brochf2b1d012012-06-14 12:55:21 -0700120
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700121 self._kernel_handler = kernel_handler.KernelHandler()
Tom Wai-Hong Tam9434b142015-08-05 02:35:49 +0800122 self._kernel_handler.init(self._os_if,
123 dev_key_path='/usr/share/vboot/devkeys',
124 internal_disk=True)
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700125
Tom Wai-Hong Tama0265e32015-08-06 01:50:47 +0800126 # FIXME(waihong): Add back the TPM support.
127 if not self._os_if.is_android:
128 self._tpm_handler = tpm_handler.TpmHandler()
129 self._tpm_handler.init(self._os_if)
130 else:
131 self._tpm_handler = None
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700132
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800133 self._cgpt_handler = cgpt_handler.CgptHandler(self._os_if)
Tom Wai-Hong Tam48958832011-12-30 10:16:57 +0800134
Vic (Chun-Ju) Yang4edbc072014-02-11 14:40:57 +0800135 self._rootfs_handler = rootfs_handler.RootfsHandler()
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800136 self._rootfs_handler.init(self._os_if)
Vic (Chun-Ju) Yang4edbc072014-02-11 14:40:57 +0800137
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800138 self._updater = firmware_updater.FirmwareUpdater(self._os_if)
David Sodman3ad51642015-01-22 11:15:33 -0800139 self._check_keys = firmware_check_keys.firmwareCheckKeys()
Chun-ting Changcf924e92012-10-29 13:49:01 +0800140
ctchangc7e55ea2012-08-09 16:19:14 +0800141 # Initialize temporary directory path
142 self._temp_path = '/var/tmp/faft/autest'
143 self._keys_path = os.path.join(self._temp_path, 'keys')
144 self._work_path = os.path.join(self._temp_path, 'work')
145
Tom Wai-Hong Tame8f291a2011-12-08 22:03:53 +0800146 def _dispatch(self, method, params):
147 """This _dispatch method handles string conversion especially.
148
149 Since we turn off allow_dotted_names option. So any string conversion,
150 like str(FAFTClient.method), i.e. FAFTClient.method.__str__, failed
151 via XML RPC call.
152 """
153 is_str = method.endswith('.__str__')
154 if is_str:
155 method = method.rsplit('.', 1)[0]
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800156
Tom Wai-Hong Tam4a1911e2015-09-01 06:49:06 +0800157 categories = ('system', 'host', 'bios', 'ec', 'kernel',
Vic (Chun-Ju) Yang4edbc072014-02-11 14:40:57 +0800158 'tpm', 'cgpt', 'updater', 'rootfs')
Tom Wai-Hong Tame8f291a2011-12-08 22:03:53 +0800159 try:
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800160 if method.split('.', 1)[0] in categories:
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800161 func = getattr(self, '_%s_%s' % (method.split('.', 1)[0],
162 method.split('.', 1)[1]))
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800163 else:
164 func = getattr(self, method)
Tom Wai-Hong Tame8f291a2011-12-08 22:03:53 +0800165 except AttributeError:
166 raise Exception('method "%s" is not supported' % method)
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800167
168 if is_str:
169 return str(func)
Tom Wai-Hong Tame8f291a2011-12-08 22:03:53 +0800170 else:
Tom Wai-Hong Tam38aa5482015-08-01 05:31:07 +0800171 self._os_if.log('Dispatching method %s with args %r' %
172 (func.__name__, params))
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800173 return func(*params)
Tom Wai-Hong Tame8f291a2011-12-08 22:03:53 +0800174
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800175 def _system_is_available(self):
Tom Wai-Hong Tambea57b32011-09-02 18:27:47 +0800176 """Function for polling the RPC server availability.
177
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800178 @return: Always True.
Tom Wai-Hong Tambea57b32011-09-02 18:27:47 +0800179 """
180 return True
181
Tom Wai-Hong Tamc7bdb752015-08-26 05:30:39 +0800182 def _system_has_host(self):
183 """Return True if a host is connected to DUT."""
184 return self._os_if.has_host()
185
Tom Wai-Hong Tam3dbc70a2015-08-20 06:39:08 +0800186 def _system_wait_for_client(self, timeout):
187 """Wait for the client to come back online.
188
189 @param timeout: Time in seconds to wait for the client SSH daemon to
190 come up.
191 @return: True if succeed; otherwise False.
192 """
193 return self._os_if.wait_for_device(timeout)
194
195 def _system_wait_for_client_offline(self, timeout):
196 """Wait for the client to come offline.
197
198 @param timeout: Time in seconds to wait the client to come offline.
199 @return: True if succeed; otherwise False.
200 """
201 return self._os_if.wait_for_no_device(timeout)
202
Tom Wai-Hong Tam48ae2212013-06-26 10:37:40 +0800203 def _system_dump_log(self, remove_log=False):
204 """Dump the log file.
205
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800206 @param remove_log: Remove the log file after dump.
207 @return: String of the log file content.
Tom Wai-Hong Tam48ae2212013-06-26 10:37:40 +0800208 """
209 log = open(self._log_file).read()
210 if remove_log:
211 os.remove(self._log_file)
212 return log
213
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800214 def _system_run_shell_command(self, command):
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700215 """Run shell command.
216
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800217 @param command: A shell command to be run.
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700218 """
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800219 self._os_if.run_shell_command(command)
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700220
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800221 def _system_run_shell_command_get_output(self, command):
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700222 """Run shell command and get its console output.
223
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800224 @param command: A shell command to be run.
225 @return: A list of strings stripped of the newline characters.
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700226 """
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800227 return self._os_if.run_shell_command_get_output(command)
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700228
Tom Wai-Hong Tam4a1911e2015-09-01 06:49:06 +0800229 def _host_run_shell_command(self, command):
230 """Run shell command on the host.
231
232 @param command: A shell command to be run.
233 """
234 self._os_if.run_host_shell_command(command)
235
236 def _host_run_shell_command_get_output(self, command):
237 """Run shell command and get its console output on the host.
238
239 @param command: A shell command to be run.
240 @return: A list of strings stripped of the newline characters.
241 """
242 return self._os_if.run_host_shell_command_get_output(command)
243
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800244 def _system_software_reboot(self):
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700245 """Request software reboot."""
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800246 self._os_if.run_shell_command('reboot')
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700247
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800248 def _system_get_platform_name(self):
Tom Wai-Hong Tam678ab152011-12-14 15:27:24 +0800249 """Get the platform name of the current system.
250
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800251 @return: A string of the platform name.
Tom Wai-Hong Tam678ab152011-12-14 15:27:24 +0800252 """
Vic Yang2bbb8672012-11-12 12:14:53 +0800253 # 'mosys platform name' sometimes fails. Let's get the verbose output.
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800254 lines = self._os_if.run_shell_command_get_output(
Vic Yang2bbb8672012-11-12 12:14:53 +0800255 '(mosys -vvv platform name 2>&1) || echo Failed')
256 if lines[-1].strip() == 'Failed':
257 raise Exception('Failed getting platform name: ' + '\n'.join(lines))
258 return lines[-1]
Tom Wai-Hong Tam678ab152011-12-14 15:27:24 +0800259
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800260 def _system_get_crossystem_value(self, key):
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700261 """Get crossystem value of the requested key.
262
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800263 @param key: A crossystem key.
264 @return: A string of the requested crossystem value.
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700265 """
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800266 return self._os_if.run_shell_command_get_output(
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700267 'crossystem %s' % key)[0]
268
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800269 def _system_get_root_dev(self):
Tom Wai-Hong Tamcfda61f2011-11-02 17:41:01 +0800270 """Get the name of root device without partition number.
271
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800272 @return: A string of the root device without partition number.
Tom Wai-Hong Tamcfda61f2011-11-02 17:41:01 +0800273 """
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800274 return self._os_if.get_root_dev()
Tom Wai-Hong Tamcfda61f2011-11-02 17:41:01 +0800275
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800276 def _system_get_root_part(self):
Tom Wai-Hong Tamcfda61f2011-11-02 17:41:01 +0800277 """Get the name of root device with partition number.
278
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800279 @return: A string of the root device with partition number.
Tom Wai-Hong Tamcfda61f2011-11-02 17:41:01 +0800280 """
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800281 return self._os_if.get_root_part()
Tom Wai-Hong Tamcfda61f2011-11-02 17:41:01 +0800282
Shelley Chen3edea982014-12-30 14:54:21 -0800283 def _system_set_try_fw_b(self, count=1):
284 """Set 'Try Frimware B' flag in crossystem.
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700285
Shelley Chen3edea982014-12-30 14:54:21 -0800286 @param count: # times to try booting into FW B
287 """
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800288 self._os_if.cs.fwb_tries = count
Shelley Chen3edea982014-12-30 14:54:21 -0800289
290 def _system_set_fw_try_next(self, next, count=0):
291 """Set fw_try_next to A or B
292
293 @param next: Next FW to reboot to (A or B)
294 @param count: # of times to try booting into FW <next>
295 """
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800296 self._os_if.cs.fw_try_next = next
Shelley Chen3edea982014-12-30 14:54:21 -0800297 if count:
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800298 self._os_if.cs.fw_try_count = count
Daisuke Nojiri57c05982014-06-25 15:28:35 -0700299
300 def _system_get_fw_vboot2(self):
301 """Get fw_vboot2"""
Tom Wai-Hong Tam94886f92014-07-10 07:01:43 +0800302 try:
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800303 return self._os_if.cs.fw_vboot2 == '1'
304 except os_interface.OSInterfaceError:
Tom Wai-Hong Tam94886f92014-07-10 07:01:43 +0800305 return False
Daisuke Nojiri57c05982014-06-25 15:28:35 -0700306
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800307 def _system_request_recovery_boot(self):
Tom Wai-Hong Tam76c75072011-10-25 18:00:12 +0800308 """Request running in recovery mode on the restart."""
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800309 self._os_if.cs.request_recovery()
Tom Wai-Hong Tam76c75072011-10-25 18:00:12 +0800310
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800311 def _system_get_dev_boot_usb(self):
Tom Wai-Hong Tam0a7b2be2012-10-15 16:44:12 +0800312 """Get dev_boot_usb value which controls developer mode boot from USB.
313
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800314 @return: True if enable, False if disable.
Tom Wai-Hong Tam0a7b2be2012-10-15 16:44:12 +0800315 """
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800316 return self._os_if.cs.dev_boot_usb == '1'
Tom Wai-Hong Tam0a7b2be2012-10-15 16:44:12 +0800317
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800318 def _system_set_dev_boot_usb(self, value):
Tom Wai-Hong Tam0a7b2be2012-10-15 16:44:12 +0800319 """Set dev_boot_usb value which controls developer mode boot from USB.
320
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800321 @param value: True to enable, False to disable.
Tom Wai-Hong Tam0a7b2be2012-10-15 16:44:12 +0800322 """
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800323 self._os_if.cs.dev_boot_usb = 1 if value else 0
Tom Wai-Hong Tam0a7b2be2012-10-15 16:44:12 +0800324
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800325 def _system_is_removable_device_boot(self):
326 """Check the current boot device is removable.
327
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800328 @return: True: if a removable device boots.
329 False: if a non-removable device boots.
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800330 """
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800331 root_part = self._os_if.get_root_part()
332 return self._os_if.is_removable_device(root_part)
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800333
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800334 def _system_create_temp_dir(self, prefix='backup_'):
335 """Create a temporary directory and return the path."""
336 return tempfile.mkdtemp(prefix=prefix)
337
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800338 def _bios_reload(self):
339 """Reload the firmware image that may be changed."""
340 self._bios_handler.reload()
341
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800342 def _bios_get_gbb_flags(self):
Tom Wai-Hong Tam8c9eed62011-12-28 15:05:05 +0800343 """Get the GBB flags.
344
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800345 @return: An integer of the GBB flags.
Tom Wai-Hong Tam8c9eed62011-12-28 15:05:05 +0800346 """
Vic Yang59cac9c2012-05-21 15:28:42 +0800347 return self._bios_handler.get_gbb_flags()
Tom Wai-Hong Tam8c9eed62011-12-28 15:05:05 +0800348
Tom Wai-Hong Tam0d2b8932015-08-27 06:22:50 +0800349 def _bios_set_gbb_flags(self, flags):
350 """Set the GBB flags.
351
352 @param flags: An integer of the GBB flags.
353 """
354 self._bios_handler.set_gbb_flags(flags, write_through=True)
355
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800356 def _bios_get_preamble_flags(self, section):
Tom Wai-Hong Tam81f70002011-12-13 12:29:46 +0800357 """Get the preamble flags of a firmware section.
358
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800359 @param section: A firmware section, either 'a' or 'b'.
360 @return: An integer of the preamble flags.
Tom Wai-Hong Tam81f70002011-12-13 12:29:46 +0800361 """
Vic Yang59cac9c2012-05-21 15:28:42 +0800362 return self._bios_handler.get_section_flags(section)
363
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800364 def _bios_set_preamble_flags(self, section, flags):
Vic Yang91b73cf2012-07-31 17:18:11 +0800365 """Set the preamble flags of a firmware section.
366
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800367 @param section: A firmware section, either 'a' or 'b'.
368 @param flags: An integer of preamble flags.
Vic Yang91b73cf2012-07-31 17:18:11 +0800369 """
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800370 version = self._bios_get_version(section)
Vic Yang91b73cf2012-07-31 17:18:11 +0800371 self._bios_handler.set_section_version(section, version, flags,
372 write_through=True)
373
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800374 def _bios_get_body_sha(self, section):
Tom Wai-Hong Tam4e10b9f2012-09-06 16:23:02 +0800375 """Get SHA1 hash of BIOS RW firmware section.
376
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800377 @param section: A firmware section, either 'a' or 'b'.
378 @param flags: An integer of preamble flags.
Tom Wai-Hong Tam4e10b9f2012-09-06 16:23:02 +0800379 """
380 return self._bios_handler.get_section_sha(section)
381
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800382 def _bios_get_sig_sha(self, section):
ctchang38ae4922012-09-03 17:01:16 +0800383 """Get SHA1 hash of firmware vblock in section."""
384 return self._bios_handler.get_section_sig_sha(section)
385
Tom Wai-Hong Tam0e680af2011-10-26 14:32:55 +0800386 @allow_multiple_section_input
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800387 def _bios_corrupt_sig(self, section):
Tom Wai-Hong Tam9aea8212011-12-12 15:08:45 +0800388 """Corrupt the requested firmware section signature.
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700389
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800390 @param section: A firmware section, either 'a' or 'b'.
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700391 """
Vic Yang59cac9c2012-05-21 15:28:42 +0800392 self._bios_handler.corrupt_firmware(section)
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700393
Tom Wai-Hong Tam0e680af2011-10-26 14:32:55 +0800394 @allow_multiple_section_input
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800395 def _bios_restore_sig(self, section):
Tom Wai-Hong Tam9aea8212011-12-12 15:08:45 +0800396 """Restore the previously corrupted firmware section signature.
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700397
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800398 @param section: A firmware section, either 'a' or 'b'.
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700399 """
Vic Yang59cac9c2012-05-21 15:28:42 +0800400 self._bios_handler.restore_firmware(section)
Tom Wai-Hong Tamb8a58ef2011-10-11 23:53:10 -0700401
Tom Wai-Hong Tamcfda61f2011-11-02 17:41:01 +0800402 @allow_multiple_section_input
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800403 def _bios_corrupt_body(self, section):
404 """Corrupt the requested firmware section body.
405
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800406 @param section: A firmware section, either 'a' or 'b'.
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800407 """
408 self._bios_handler.corrupt_firmware_body(section)
409
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800410 @allow_multiple_section_input
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800411 def _bios_restore_body(self, section):
Tom Wai-Hong Tam81f70002011-12-13 12:29:46 +0800412 """Restore the previously corrupted firmware section body.
413
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800414 @param section: A firmware section, either 'a' or 'b'.
Tom Wai-Hong Tam81f70002011-12-13 12:29:46 +0800415 """
Vic Yang59cac9c2012-05-21 15:28:42 +0800416 self._bios_handler.restore_firmware_body(section)
Tom Wai-Hong Tam81f70002011-12-13 12:29:46 +0800417
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800418 def __bios_modify_version(self, section, delta):
Tom Wai-Hong Tam46d03b12012-02-08 12:02:17 +0800419 """Modify firmware version for the requested section, by adding delta.
420
421 The passed in delta, a positive or a negative number, is added to the
422 original firmware version.
423 """
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800424 original_version = self._bios_get_version(section)
Tom Wai-Hong Tam46d03b12012-02-08 12:02:17 +0800425 new_version = original_version + delta
Vic Yang59cac9c2012-05-21 15:28:42 +0800426 flags = self._bios_handler.get_section_flags(section)
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800427 self._os_if.log(
danny chan6dc580a2015-08-08 00:14:02 +0000428 'Setting firmware section %s version from %d to %d' % (
429 section, original_version, new_version))
Vic Yang59cac9c2012-05-21 15:28:42 +0800430 self._bios_handler.set_section_version(section, new_version, flags,
431 write_through=True)
Tom Wai-Hong Tam46d03b12012-02-08 12:02:17 +0800432
433 @allow_multiple_section_input
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800434 def _bios_move_version_backward(self, section):
Tom Wai-Hong Tam46d03b12012-02-08 12:02:17 +0800435 """Decrement firmware version for the requested section."""
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800436 self.__bios_modify_version(section, -1)
Tom Wai-Hong Tam46d03b12012-02-08 12:02:17 +0800437
Tom Wai-Hong Tam46d03b12012-02-08 12:02:17 +0800438 @allow_multiple_section_input
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800439 def _bios_move_version_forward(self, section):
Tom Wai-Hong Tam46d03b12012-02-08 12:02:17 +0800440 """Increase firmware version for the requested section."""
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800441 self.__bios_modify_version(section, 1)
Tom Wai-Hong Tam46d03b12012-02-08 12:02:17 +0800442
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800443 def _bios_get_version(self, section):
444 """Retrieve firmware version of a section."""
445 return self._bios_handler.get_section_version(section)
446
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800447 def _bios_get_datakey_version(self, section):
ctchangc7e55ea2012-08-09 16:19:14 +0800448 """Return firmware data key version."""
449 return self._bios_handler.get_section_datakey_version(section)
450
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800451 def _bios_get_kernel_subkey_version(self, section):
ctchangc7e55ea2012-08-09 16:19:14 +0800452 """Return kernel subkey version."""
453 return self._bios_handler.get_section_kernel_subkey_version(section)
Tom Wai-Hong Tam46d03b12012-02-08 12:02:17 +0800454
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800455 def _bios_dump_whole(self, bios_path):
Tom Wai-Hong Tamb63bc742012-08-30 20:41:30 +0800456 """Dump the current BIOS firmware to a file, specified by bios_path.
457
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800458 @param bios_path: The path of the BIOS image to be written.
Tom Wai-Hong Tamb63bc742012-08-30 20:41:30 +0800459 """
460 self._bios_handler.dump_whole(bios_path)
461
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800462 def _bios_write_whole(self, bios_path):
Tom Wai-Hong Tamb63bc742012-08-30 20:41:30 +0800463 """Write the firmware from bios_path to the current system.
464
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800465 @param bios_path: The path of the source BIOS image.
Tom Wai-Hong Tamb63bc742012-08-30 20:41:30 +0800466 """
467 self._bios_handler.new_image(bios_path)
468 self._bios_handler.write_whole()
469
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800470 def _ec_get_version(self):
471 """Get EC version via mosys.
472
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800473 @return: A string of the EC version.
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800474 """
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800475 return self._os_if.run_shell_command_get_output(
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800476 'mosys ec info | sed "s/.*| //"')[0]
477
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800478 def _ec_get_firmware_sha(self):
479 """Get SHA1 hash of EC RW firmware section."""
480 return self._ec_handler.get_section_sha('rw')
481
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800482 @allow_multiple_section_input
483 def _ec_corrupt_sig(self, section):
484 """Corrupt the requested EC section signature.
485
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800486 @param section: A EC section, either 'a' or 'b'.
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800487 """
488 self._ec_handler.corrupt_firmware(section, corrupt_all=True)
489
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800490 @allow_multiple_section_input
491 def _ec_restore_sig(self, section):
492 """Restore the previously corrupted EC section signature.
493
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800494 @param section: An EC section, either 'a' or 'b'.
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800495 """
496 self._ec_handler.restore_firmware(section, restore_all=True)
497
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800498 @allow_multiple_section_input
499 def _ec_corrupt_body(self, section):
500 """Corrupt the requested EC section body.
501
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800502 @param section: An EC section, either 'a' or 'b'.
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800503 """
504 self._ec_handler.corrupt_firmware_body(section, corrupt_all=True)
505
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800506 @allow_multiple_section_input
507 def _ec_restore_body(self, section):
508 """Restore the previously corrupted EC section body.
509
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800510 @param section: An EC section, either 'a' or 'b'.
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800511 """
512 self._ec_handler.restore_firmware_body(section, restore_all=True)
513
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800514 def _ec_dump_firmware(self, ec_path):
Tom Wai-Hong Tam23870e02012-08-24 16:15:34 +0800515 """Dump the current EC firmware to a file, specified by ec_path.
516
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800517 @param ec_path: The path of the EC image to be written.
Tom Wai-Hong Tam23870e02012-08-24 16:15:34 +0800518 """
519 self._ec_handler.dump_whole(ec_path)
520
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800521 def _ec_set_write_protect(self, enable):
Tom Wai-Hong Tam44204b32012-11-20 13:55:40 +0800522 """Enable write protect of the EC flash chip.
523
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800524 @param enable: True if activating EC write protect. Otherwise, False.
Tom Wai-Hong Tam44204b32012-11-20 13:55:40 +0800525 """
Tom Wai-Hong Tam44204b32012-11-20 13:55:40 +0800526 if enable:
527 self._ec_handler.enable_write_protect()
528 else:
529 self._ec_handler.disable_write_protect()
530
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800531 @allow_multiple_section_input
532 def _kernel_corrupt_sig(self, section):
533 """Corrupt the requested kernel section.
534
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800535 @param section: A kernel section, either 'a' or 'b'.
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800536 """
537 self._kernel_handler.corrupt_kernel(section)
538
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800539 @allow_multiple_section_input
540 def _kernel_restore_sig(self, section):
541 """Restore the requested kernel section (previously corrupted).
542
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800543 @param section: A kernel section, either 'a' or 'b'.
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800544 """
545 self._kernel_handler.restore_kernel(section)
546
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800547 def __kernel_modify_version(self, section, delta):
548 """Modify kernel version for the requested section, by adding delta.
549
550 The passed in delta, a positive or a negative number, is added to the
551 original kernel version.
552 """
553 original_version = self._kernel_handler.get_version(section)
554 new_version = original_version + delta
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800555 self._os_if.log(
danny chan6dc580a2015-08-08 00:14:02 +0000556 'Setting kernel section %s version from %d to %d' % (
557 section, original_version, new_version))
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800558 self._kernel_handler.set_version(section, new_version)
559
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800560 @allow_multiple_section_input
561 def _kernel_move_version_backward(self, section):
562 """Decrement kernel version for the requested section."""
563 self.__kernel_modify_version(section, -1)
564
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800565 @allow_multiple_section_input
566 def _kernel_move_version_forward(self, section):
567 """Increase kernel version for the requested section."""
568 self.__kernel_modify_version(section, 1)
569
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800570 def _kernel_get_version(self, section):
571 """Return kernel version."""
572 return self._kernel_handler.get_version(section)
573
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800574 def _kernel_get_datakey_version(self, section):
575 """Return kernel datakey version."""
576 return self._kernel_handler.get_datakey_version(section)
577
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800578 def _kernel_diff_a_b(self):
579 """Compare kernel A with B.
580
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800581 @return: True: if kernel A is different with B.
582 False: if kernel A is the same as B.
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800583 """
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800584 rootdev = self._os_if.get_root_dev()
585 kernel_a = self._os_if.join_part(rootdev, '2')
586 kernel_b = self._os_if.join_part(rootdev, '4')
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800587
588 # The signature (some kind of hash) for the kernel body is stored in
589 # the beginning. So compare the first 64KB (including header, preamble,
590 # and signature) should be enough to check them identical.
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800591 header_a = self._os_if.read_partition(kernel_a, 0x10000)
592 header_b = self._os_if.read_partition(kernel_b, 0x10000)
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800593
594 return header_a != header_b
595
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800596 def _kernel_resign_with_keys(self, section, key_path=None):
597 """Resign kernel with temporary key."""
598 self._kernel_handler.resign_kernel(section, key_path)
599
Vic (Chun-Ju) Yang33ef9e02014-02-07 14:30:19 +0800600 def _kernel_dump(self, section, kernel_path):
601 """Dump the specified kernel to a file.
602
603 @param section: The kernel to dump. May be A or B.
604 @param kernel_path: The path to the kernel image to be written.
605 """
606 self._kernel_handler.dump_kernel(section, kernel_path)
607
608 def _kernel_write(self, section, kernel_path):
609 """Write a kernel image to the specified section.
610
611 @param section: The kernel to dump. May be A or B.
612 @param kernel_path: The path to the kernel image.
613 """
614 self._kernel_handler.write_kernel(section, kernel_path)
615
616 def _kernel_get_sha(self, section):
617 """Return the SHA1 hash of the specified kernel section."""
618 return self._kernel_handler.get_sha(section)
619
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800620 def _tpm_get_firmware_version(self):
621 """Retrieve tpm firmware body version."""
622 return self._tpm_handler.get_fw_version()
623
Tom Wai-Hong Tamc1a569f2012-12-04 15:07:25 +0800624 def _tpm_get_firmware_datakey_version(self):
625 """Retrieve tpm firmware data key version."""
626 return self._tpm_handler.get_fw_body_version()
627
Vic (Chun-Ju) Yang93932842014-02-07 20:01:28 +0800628 def _cgpt_get_attributes(self):
629 """Get kernel attributes."""
630 rootdev = self._system_get_root_dev()
631 self._cgpt_handler.read_device_info(rootdev)
632 return {'A': self._cgpt_handler.get_partition(rootdev, 'KERN-A'),
633 'B': self._cgpt_handler.get_partition(rootdev, 'KERN-B')}
634
635 def _cgpt_set_attributes(self, attributes):
636 """Set kernel attributes."""
637 rootdev = self._system_get_root_dev()
638 allowed = ['priority', 'tries', 'successful']
639 for p in ('A', 'B'):
640 if p not in attributes:
641 continue
642 attr = dict()
643 for k in allowed:
644 if k in attributes[p]:
645 attr[k] = attributes[p][k]
646 if attr:
647 self._cgpt_handler.set_partition(rootdev, 'KERN-%s' % p, attr)
648
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800649 def _updater_setup(self, shellball=None):
Chun-ting Changcf924e92012-10-29 13:49:01 +0800650 """Setup the updater.
651
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800652 @param shellball: Path of provided shellball. Use default shellball
653 if None,
Chun-ting Changcf924e92012-10-29 13:49:01 +0800654 """
Tom Wai-Hong Tamba5e3e52015-08-01 05:54:00 +0800655 self._updater.setup(self._os_if, shellball)
Chun-ting Changcf924e92012-10-29 13:49:01 +0800656
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800657 def _updater_cleanup(self):
Chun-ting Changcf924e92012-10-29 13:49:01 +0800658 self._updater.cleanup_temp_dir()
659
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800660 def _updater_get_fwid(self):
Chun-ting Changcf924e92012-10-29 13:49:01 +0800661 """Retrieve shellball's fwid.
662
663 This method should be called after updater_setup.
664
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800665 @return: Shellball's fwid.
Chun-ting Changcf924e92012-10-29 13:49:01 +0800666 """
667 return self._updater.retrieve_fwid()
668
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800669 def _updater_resign_firmware(self, version):
Chun-ting Changcf924e92012-10-29 13:49:01 +0800670 """Resign firmware with version.
671
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800672 @param version: new version number.
Chun-ting Changcf924e92012-10-29 13:49:01 +0800673 """
674 self._updater.resign_firmware(version)
675
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800676 def _updater_repack_shellball(self, append):
Chun-ting Changcf924e92012-10-29 13:49:01 +0800677 """Repack shellball with new fwid.
678
Tom Wai-Hong Tam144202a2013-07-18 13:59:29 +0800679 @param append: use for new fwid naming.
Chun-ting Changcf924e92012-10-29 13:49:01 +0800680 """
681 self._updater.repack_shellball(append)
682
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800683 def _updater_run_autoupdate(self, append):
Chun-ting Changcf924e92012-10-29 13:49:01 +0800684 """Run chromeos-firmwareupdate with autoupdate mode."""
685 options = ['--noupdate_ec', '--nocheck_rw_compatible']
686 self._updater.run_firmwareupdate(mode='autoupdate',
687 updater_append=append,
688 options=options)
689
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800690 def _updater_run_factory_install(self):
Chun-ting Changcf924e92012-10-29 13:49:01 +0800691 """Run chromeos-firmwareupdate with factory_install mode."""
692 options = ['--noupdate_ec']
693 self._updater.run_firmwareupdate(mode='factory_install',
694 options=options)
695
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800696 def _updater_run_bootok(self, append):
Chun-ting Changcf924e92012-10-29 13:49:01 +0800697 """Run chromeos-firmwareupdate with bootok mode."""
698 self._updater.run_firmwareupdate(mode='bootok',
699 updater_append=append)
700
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800701 def _updater_run_recovery(self):
Chun-ting Changcf924e92012-10-29 13:49:01 +0800702 """Run chromeos-firmwareupdate with recovery mode."""
703 options = ['--noupdate_ec', '--nocheck_rw_compatible']
704 self._updater.run_firmwareupdate(mode='recovery',
705 options=options)
706
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800707 def _updater_get_temp_path(self):
Chun-ting Changcf924e92012-10-29 13:49:01 +0800708 """Get updater's temp directory path."""
709 return self._updater.get_temp_path()
710
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800711 def _updater_get_keys_path(self):
Chun-ting Changcf924e92012-10-29 13:49:01 +0800712 """Get updater's keys directory path."""
713 return self._updater.get_keys_path()
714
Chun-ting Changd43aa9b2012-11-16 10:12:05 +0800715 def _updater_get_work_path(self):
Chun-ting Changcf924e92012-10-29 13:49:01 +0800716 """Get updater's work directory path."""
717 return self._updater.get_work_path()
718
Vic (Chun-Ju) Yang4edbc072014-02-11 14:40:57 +0800719 def _rootfs_verify_rootfs(self, section):
720 """Verifies the integrity of the root FS.
721
722 @param section: The rootfs to verify. May be A or B.
723 """
724 return self._rootfs_handler.verify_rootfs(section)
725
David Sodman3ad51642015-01-22 11:15:33 -0800726 def _system_check_keys(self, expected_sequence):
727 """Check the keys sequence was as expected.
728
729 @param expected_sequence: A list of expected key sequences.
730 """
731 return self._check_keys.check_keys(expected_sequence)
732
Tom Wai-Hong Tambea57b32011-09-02 18:27:47 +0800733 def cleanup(self):
734 """Cleanup for the RPC server. Currently nothing."""
735 pass