mbligh | e829ba5 | 2008-06-03 15:04:08 +0000 | [diff] [blame] | 1 | import shutil, re, os, string |
| 2 | from autotest_lib.client.common_lib import utils, error |
mbligh | e404619 | 2006-09-15 14:31:01 +0000 | [diff] [blame] | 3 | |
mbligh | 6e83b6f | 2008-06-10 16:26:59 +0000 | [diff] [blame^] | 4 | class boottool(object): |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 5 | def __init__(self, boottool_exec=None): |
| 6 | #variable to indicate if in mode to write entries for Xen |
| 7 | self.xen_mode = False |
mbligh | ede4af6 | 2006-12-17 23:05:16 +0000 | [diff] [blame] | 8 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 9 | if boottool_exec: |
| 10 | self.boottool_exec = boottool_exec |
| 11 | else: |
| 12 | autodir = os.environ['AUTODIR'] |
| 13 | self.boottool_exec = autodir + '/tools/boottool' |
mbligh | e404619 | 2006-09-15 14:31:01 +0000 | [diff] [blame] | 14 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 15 | if not self.boottool_exec: |
| 16 | raise error.AutotestError('Failed to set boottool_exec') |
mbligh | ede4af6 | 2006-12-17 23:05:16 +0000 | [diff] [blame] | 17 | |
mbligh | 72b88fc | 2006-12-16 18:41:35 +0000 | [diff] [blame] | 18 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 19 | def run_boottool(self, params): |
| 20 | return utils.system_output('%s %s' % (self.boottool_exec, params)) |
mbligh | e404619 | 2006-09-15 14:31:01 +0000 | [diff] [blame] | 21 | |
mbligh | 72b88fc | 2006-12-16 18:41:35 +0000 | [diff] [blame] | 22 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 23 | def bootloader(self): |
| 24 | return self.run_boottool('--bootloader-probe') |
mbligh | e404619 | 2006-09-15 14:31:01 +0000 | [diff] [blame] | 25 | |
mbligh | 72b88fc | 2006-12-16 18:41:35 +0000 | [diff] [blame] | 26 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 27 | def architecture(self): |
| 28 | return self.run_boottool('--arch-probe') |
mbligh | e404619 | 2006-09-15 14:31:01 +0000 | [diff] [blame] | 29 | |
mbligh | 72b88fc | 2006-12-16 18:41:35 +0000 | [diff] [blame] | 30 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 31 | def list_titles(self): |
| 32 | print self.run_boottool('--info all | grep title') |
mbligh | e404619 | 2006-09-15 14:31:01 +0000 | [diff] [blame] | 33 | |
mbligh | 72b88fc | 2006-12-16 18:41:35 +0000 | [diff] [blame] | 34 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 35 | def print_entry(self, index): |
| 36 | print self.run_boottool('--info=%s' % index) |
mbligh | e404619 | 2006-09-15 14:31:01 +0000 | [diff] [blame] | 37 | |
mbligh | 72b88fc | 2006-12-16 18:41:35 +0000 | [diff] [blame] | 38 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 39 | def get_default(self): |
| 40 | self.run_boottool('--default') |
mbligh | c9fdc40 | 2006-10-01 19:57:02 +0000 | [diff] [blame] | 41 | |
mbligh | 72b88fc | 2006-12-16 18:41:35 +0000 | [diff] [blame] | 42 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 43 | def set_default(self, index): |
| 44 | print self.run_boottool('--set-default=%s' % index) |
mbligh | e404619 | 2006-09-15 14:31:01 +0000 | [diff] [blame] | 45 | |
mbligh | 72b88fc | 2006-12-16 18:41:35 +0000 | [diff] [blame] | 46 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 47 | def enable_xen_mode(self): |
| 48 | self.xen_mode = True |
mbligh | ede4af6 | 2006-12-17 23:05:16 +0000 | [diff] [blame] | 49 | |
| 50 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 51 | def disable_xen_mode(self): |
| 52 | self.xen_mode = False |
mbligh | ede4af6 | 2006-12-17 23:05:16 +0000 | [diff] [blame] | 53 | |
| 54 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 55 | def get_xen_mode(self): |
| 56 | return self.xen_mode |
mbligh | ede4af6 | 2006-12-17 23:05:16 +0000 | [diff] [blame] | 57 | |
| 58 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 59 | # 'kernel' can be an position number or a title |
| 60 | def add_args(self, kernel, args): |
| 61 | parameters = '--update-kernel=%s --args="%s"' % (kernel, args) |
mbligh | e404619 | 2006-09-15 14:31:01 +0000 | [diff] [blame] | 62 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 63 | #add parameter if this is a Xen entry |
| 64 | if self.xen_mode: |
| 65 | parameters += ' --xen' |
mbligh | ede4af6 | 2006-12-17 23:05:16 +0000 | [diff] [blame] | 66 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 67 | print self.run_boottool(parameters) |
mbligh | ede4af6 | 2006-12-17 23:05:16 +0000 | [diff] [blame] | 68 | |
| 69 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 70 | def add_xen_hypervisor_args(self, kernel, args): |
| 71 | self.run_boottool('--xen --update-xenhyper=%s --xha="%s"') %(kernel, args) |
mbligh | e404619 | 2006-09-15 14:31:01 +0000 | [diff] [blame] | 72 | |
mbligh | 72b88fc | 2006-12-16 18:41:35 +0000 | [diff] [blame] | 73 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 74 | def remove_args(self, kernel, args): |
| 75 | parameters = '--update-kernel=%s --remove-args=%s' % (kernel, args) |
| 76 | |
| 77 | #add parameter if this is a Xen entry |
| 78 | if self.xen_mode: |
| 79 | parameters += ' --xen' |
| 80 | |
| 81 | print self.run_boottool(parameters) |
mbligh | ede4af6 | 2006-12-17 23:05:16 +0000 | [diff] [blame] | 82 | |
| 83 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 84 | def remove_xen_hypervisor_args(self, kernel, args): |
| 85 | self.run_boottool('--xen --update-xenhyper=%s --remove-args="%s"') \ |
| 86 | % (kernel, args) |
mbligh | 9ef1f8b | 2006-10-10 02:17:46 +0000 | [diff] [blame] | 87 | |
mbligh | e404619 | 2006-09-15 14:31:01 +0000 | [diff] [blame] | 88 | |
mbligh | bd8f998 | 2008-06-06 23:20:35 +0000 | [diff] [blame] | 89 | def add_kernel(self, path, title='autotest', initrd='', xen_hypervisor='', |
| 90 | args=None, root=None, position='end'): |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 91 | parameters = '--add-kernel=%s --title=%s' % (path, title) |
| 92 | |
| 93 | # add an initrd now or forever hold your peace |
| 94 | if initrd: |
| 95 | parameters += ' --initrd=%s' % initrd |
| 96 | |
| 97 | # add parameter if this is a Xen entry |
| 98 | if self.xen_mode: |
| 99 | parameters += ' --xen' |
| 100 | if xen_hypervisor: |
| 101 | parameters += ' --xenhyper=%s' % xen_hypervisor |
| 102 | |
| 103 | if args: |
| 104 | parameters += ' --args="%s"' % args |
| 105 | if root: |
| 106 | parameters += ' --root="%s"' % root |
| 107 | if position: |
| 108 | parameters += ' --position="%s"' % position |
| 109 | |
| 110 | print self.run_boottool(parameters) |
mbligh | e404619 | 2006-09-15 14:31:01 +0000 | [diff] [blame] | 111 | |
mbligh | 72b88fc | 2006-12-16 18:41:35 +0000 | [diff] [blame] | 112 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 113 | def remove_kernel(self, kernel): |
| 114 | print self.run_boottool('--remove-kernel=%s' % kernel) |
mbligh | e404619 | 2006-09-15 14:31:01 +0000 | [diff] [blame] | 115 | |
mbligh | 72b88fc | 2006-12-16 18:41:35 +0000 | [diff] [blame] | 116 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 117 | def boot_once(self, title): |
| 118 | print self.run_boottool('--boot-once --title=%s' % title) |
| 119 | |
| 120 | |
| 121 | def info(self, index): |
| 122 | return self.run_boottool('--info=%s' % index) |
mbligh | e404619 | 2006-09-15 14:31:01 +0000 | [diff] [blame] | 123 | |
| 124 | |
| 125 | # TODO: backup() |
| 126 | # TODO: set_timeout() |