| # Copyright 2007 Google Inc. Released under the GPL v2 |
| |
| """ |
| This module defines the SourceKernel class |
| |
| SourceKernel: an linux kernel built from source |
| """ |
| |
| |
| from autotest_lib.server import kernel, autotest |
| |
| |
| class SourceKernel(kernel.Kernel): |
| """ |
| This class represents a linux kernel built from source. |
| |
| It is used to obtain a built kernel or create one from source and |
| install it on a Host. |
| |
| Implementation details: |
| This is a leaf class in an abstract class hierarchy, it must |
| implement the unimplemented methods in parent classes. |
| """ |
| def __init__(self, k): |
| super(kernel.Kernel, self).__init__() |
| self.__kernel = k |
| self.__patch_list = [] |
| self.__config_file = None |
| self.__autotest = autotest.Autotest() |
| |
| |
| def configure(self, configFile): |
| self.__config_file = configFile |
| |
| |
| def patch(self, patchFile): |
| self.__patch_list.append(patchFile) |
| |
| |
| def build(self, host): |
| ctlfile = self.__control_file(self.__kernel, self.__patch_list, |
| self.__config_file) |
| self.__autotest.run(ctlfile, host.get_tmp_dir(), host) |
| |
| |
| def install(self, host): |
| self.__autotest.install(host) |
| ctlfile = ("testkernel = job.kernel('%s')\n" |
| "testkernel.install()\n" |
| "testkernel.add_to_bootloader()\n" %(self.__kernel)) |
| self.__autotest.run(ctlfile, host.get_tmp_dir(), host) |
| |
| |
| def __control_file(self, kernel, patch_list, config): |
| ctl = ("testkernel = job.kernel('%s')\n" % kernel) |
| |
| if len(patch_list): |
| patches = ', '.join(["'%s'" % x for x in patch_list]) |
| ctl += "testkernel.patch(%s)\n" % patches |
| |
| if config: |
| ctl += "testkernel.config('%s')\n" % config |
| else: |
| ctl += "testkernel.config('', None, True)\n" |
| |
| ctl += "testkernel.build()\n" |
| |
| # copy back to server |
| |
| return ctl |