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

Unified Diff: client/common_lib/gbb_util.py

Issue 3343003: Add components which is requried to generate a GBB during factory. (Closed) Base URL: http://git.chromium.org/git/autotest.git
Patch Set: fix bugs Created 10 years, 3 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
« no previous file with comments | « client/common_lib/flashrom_util.py ('k') | client/site_tests/hardware_Components/approved_components » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: client/common_lib/gbb_util.py
diff --git a/client/common_lib/gbb_util.py b/client/common_lib/gbb_util.py
new file mode 100644
index 0000000000000000000000000000000000000000..f107c7dfb65aa6b75d037372242400ef3f8e2493
--- /dev/null
+++ b/client/common_lib/gbb_util.py
@@ -0,0 +1,104 @@
+#!/usr/bin/env python
+# Copyright (c) 2010 The Chromium OS 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 convenience routines to access the GBB on the current BIOS.
+
+ GBBUtility is a wrapper of gbb_utility program.
+"""
+
+import os
+import tempfile
+
+from autotest_lib.client.common_lib import error
+from autotest_lib.client.common_lib import flashrom_util
+from autotest_lib.client.common_lib import utils
+
+
+class GBBUtility(object):
+ """GBBUtility is a wrapper of gbb_utility program.
+
+ It accesses the GBB on the current BIOS image.
+ """
+ def __init__(self,
+ gbb_command='gbb_utility',
+ temp_dir=None,
+ keep_temp_files=False):
+ self._gbb_command = gbb_command
+ self._temp_dir = temp_dir
+ self._keep_temp_files = keep_temp_files
+ self._bios_file = None
+
+
+ def __del__(self):
+ if self._bios_file:
+ self._remove_temp_file(self._bios_file)
+
+
+ def _get_temp_filename(self, prefix='tmp'):
+ """Returns the name of a temporary file in self._temp_dir."""
+ (fd, name) = tempfile.mkstemp(prefix=prefix, dir=self._temp_dir)
+ os.close(fd)
+ return name
+
+
+ def _remove_temp_file(self, filename):
+ """Removes a temporary file if self._keep_temp_files is false."""
+ if self._keep_temp_files:
+ return
+ if os.path.exists(filename):
+ os.remove(filename)
+
+
+ def _read_bios(self, force=False):
+ """Reads the BIOS to a file, self._bios_file."""
+ if not self._bios_file or force:
+ flashrom = flashrom_util.flashrom_util()
+ if not flashrom.select_bios_flashrom():
+ raise error.TestError('Unable to select BIOS flashrom')
+ bios_file = self._get_temp_filename('bios')
+ if not flashrom.read_whole_to_file(bios_file):
+ raise error.TestError('Unable to read the BIOS image')
+ self._bios_file = bios_file
+
+
+ def _run_gbb_utility(self, args='', output_file=''):
+ """Runs gbb_utility on the current BIOS firmware data."""
+ self._read_bios()
+ cmd = 'gbb_utility %s "%s" "%s"' % (args, self._bios_file,
+ output_file)
+ result = utils.system_output(cmd)
+ return result
+
+
+ def _get_gbb_value(self, key):
+ """Gets the GBB value which needs to be output to a file in gbb_utility.
+
+ @param key: The key of the value you want to get. Should be 'bmfv',
+ 'recoverykey', or 'rootkey'.
+ @return: The returned GBB value.
+ """
+ value_file = self._get_temp_filename(key)
+ self._run_gbb_utility('--get --%s=%s' % (key, value_file))
+ with open(value_file, 'rb') as f:
+ value = f.read()
+ self._remove_temp_file(value_file)
+ return value
+
+
+ def get_bmpfv(self):
+ return self._get_gbb_value('bmpfv')
+
+
+ def get_hwid(self):
+ result = _self._run_gbb_utility(self, '--get --hwid')
+ return result.strip().partition('hardware_id: ')[2]
+
+
+ def get_recoverykey(self):
+ return self._get_gbb_value('recoverykey')
+
+
+ def get_rootkey(self):
+ return self._get_gbb_value('rootkey')
« no previous file with comments | « client/common_lib/flashrom_util.py ('k') | client/site_tests/hardware_Components/approved_components » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698