| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 2 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """ | 6 """ |
| 7 This module provides convenience routines to access Flash ROM (EEPROM). | 7 This module provides convenience routines to access Flash ROM (EEPROM). |
| 8 - flashrom_util is a low level wrapper of flashrom(8) program. | 8 - flashrom_util is a low level wrapper of flashrom(8) program. |
| 9 - FlashromUtility is a high level object which provides more advanced | 9 - FlashromUtility is a high level object which provides more advanced |
| 10 features like journaling-alike (log-based) changing. | 10 features like journaling-alike (log-based) changing. |
| (...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 481 def detect_chromeos_bios_layout(self, size, image): | 481 def detect_chromeos_bios_layout(self, size, image): |
| 482 """ Detects standard ChromeOS BIOS layout. | 482 """ Detects standard ChromeOS BIOS layout. |
| 483 A short cut to detect_chromeos_layout(TARGET_BIOS, size, image). """ | 483 A short cut to detect_chromeos_layout(TARGET_BIOS, size, image). """ |
| 484 return self.detect_chromeos_layout(self.TARGET_BIOS, size, image) | 484 return self.detect_chromeos_layout(self.TARGET_BIOS, size, image) |
| 485 | 485 |
| 486 def detect_chromeos_ec_layout(self, size, image): | 486 def detect_chromeos_ec_layout(self, size, image): |
| 487 """ Detects standard ChromeOS Embedded Controller layout. | 487 """ Detects standard ChromeOS Embedded Controller layout. |
| 488 A short cut to detect_chromeos_layout(TARGET_EC, size, image). """ | 488 A short cut to detect_chromeos_layout(TARGET_EC, size, image). """ |
| 489 return self.detect_chromeos_layout(self.TARGET_EC, size, image) | 489 return self.detect_chromeos_layout(self.TARGET_EC, size, image) |
| 490 | 490 |
| 491 def read_whole_to_file(self, output_file): |
| 492 ''' |
| 493 Reads whole flash ROM data to a file. |
| 494 Returns True on success, otherwise False. |
| 495 ''' |
| 496 cmd = '%s"%s" -r "%s"' % (self.cmd_prefix, self.tool_path, |
| 497 output_file) |
| 498 if self.verbose: |
| 499 print 'flashrom_util.read_whole_to_file(): ', cmd |
| 500 return utils.system(cmd, ignore_status=True) == 0 |
| 501 |
| 491 def read_whole(self): | 502 def read_whole(self): |
| 492 ''' | 503 ''' |
| 493 Reads whole flash ROM data. | 504 Reads whole flash ROM data. |
| 494 Returns the data read from flash ROM, or empty string for other error. | 505 Returns the data read from flash ROM, or empty string for other error. |
| 495 ''' | 506 ''' |
| 507 result = '' |
| 496 tmpfn = self._get_temp_filename('rd_') | 508 tmpfn = self._get_temp_filename('rd_') |
| 497 cmd = '%s"%s" -r "%s"' % (self.cmd_prefix, self.tool_path, tmpfn) | 509 if self.read_whole_to_file(tmpfn): |
| 498 if self.verbose: | |
| 499 print 'flashrom_util.read_whole(): ', cmd | |
| 500 result = '' | |
| 501 | |
| 502 if utils.system(cmd, ignore_status=True) == 0: # failure for non-zero | |
| 503 try: | 510 try: |
| 504 result = open(tmpfn, 'rb').read() | 511 result = open(tmpfn, 'rb').read() |
| 505 except IOError: | 512 except IOError: |
| 506 result = '' | 513 result = '' |
| 507 | 514 |
| 508 # clean temporary resources | 515 # clean temporary resources |
| 509 self._remove_temp_file(tmpfn) | 516 self._remove_temp_file(tmpfn) |
| 510 return result | 517 return result |
| 511 | 518 |
| 512 def _write_flashrom(self, base_image, layout_map, write_list): | 519 def _write_flashrom(self, base_image, layout_map, write_list): |
| (...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 888 def get_arch(self): | 895 def get_arch(self): |
| 889 arch = os.popen('uname -m').read().rstrip() | 896 arch = os.popen('uname -m').read().rstrip() |
| 890 arch = re.sub(r"i\d86", r"i386", arch, 1) | 897 arch = re.sub(r"i\d86", r"i386", arch, 1) |
| 891 return arch | 898 return arch |
| 892 | 899 |
| 893 def run_command(self, cmd, ignore_status=False): | 900 def run_command(self, cmd, ignore_status=False): |
| 894 p = subprocess.Popen(cmd, shell=True, | 901 p = subprocess.Popen(cmd, shell=True, |
| 895 stdout=subprocess.PIPE, | 902 stdout=subprocess.PIPE, |
| 896 stderr=subprocess.PIPE) | 903 stderr=subprocess.PIPE) |
| 897 p.wait() | 904 p.wait() |
| 898 if p.returncode and not ignore_status: | 905 if p.returncode: |
| 899 raise TestError("failed to execute: %s\nError messages: %s" % ( | 906 err_msg = p.stderr.read() |
| 900 cmd, p.stderr.read())) | 907 print p.stdout.read() |
| 908 print err_msg |
| 909 if not ignore_status: |
| 910 raise TestError("failed to execute: %s\nError messages: %s" % ( |
| 911 cmd, err_msg)) |
| 901 return (p.returncode, p.stdout.read()) | 912 return (p.returncode, p.stdout.read()) |
| 902 | 913 |
| 903 def system(self, cmd, ignore_status=False): | 914 def system(self, cmd, ignore_status=False): |
| 904 (returncode, output) = self.run_command(cmd, ignore_status) | 915 (returncode, output) = self.run_command(cmd, ignore_status) |
| 905 return returncode | 916 return returncode |
| 906 | 917 |
| 907 def system_output(self, cmd, ignore_status=False): | 918 def system_output(self, cmd, ignore_status=False): |
| 908 (returncode, output) = self.run_command(cmd, ignore_status) | 919 (returncode, output) = self.run_command(cmd, ignore_status) |
| 909 return output | 920 return output |
| 910 | 921 |
| 911 | 922 |
| 912 # import autotest or mock utilities | 923 # import autotest or mock utilities |
| 913 try: | 924 try: |
| 914 # print 'using autotest' | 925 # print 'using autotest' |
| 915 from autotest_lib.client.bin import test, utils | 926 from autotest_lib.client.bin import test, utils |
| 916 from autotest_lib.client.common_lib.error import TestError | 927 from autotest_lib.client.common_lib.error import TestError |
| 917 except ImportError: | 928 except ImportError: |
| 918 # print 'using mocks' | 929 # print 'using mocks' |
| 919 utils = mock_utils() | 930 utils = mock_utils() |
| 920 TestError = mock_TestError | 931 TestError = mock_TestError |
| 921 | 932 |
| 922 | 933 |
| 923 # main stub | 934 # main stub |
| 924 if __name__ == "__main__": | 935 if __name__ == "__main__": |
| 925 # TODO(hungte) provide unit tests or command line usage | 936 # TODO(hungte) provide unit tests or command line usage |
| 926 pass | 937 pass |
| OLD | NEW |