diff options
Diffstat (limited to 'lib/oeqa/utils/qemuzephyrrunner.py')
-rw-r--r-- | lib/oeqa/utils/qemuzephyrrunner.py | 69 |
1 files changed, 46 insertions, 23 deletions
diff --git a/lib/oeqa/utils/qemuzephyrrunner.py b/lib/oeqa/utils/qemuzephyrrunner.py index 2011434..9d7badb 100644 --- a/lib/oeqa/utils/qemuzephyrrunner.py +++ b/lib/oeqa/utils/qemuzephyrrunner.py @@ -1,8 +1,8 @@ -# Copyright (C) 2015-2016 Intel Corporation +# Copyright (C) 2015-2017 Intel Corporation # # Released under the MIT license (see COPYING.MIT) -# This module provides a class for starting qemu images of poky tiny. +# This module provides a class for starting qemu images. # It's used by testimage.bbclass. import subprocess @@ -13,21 +13,31 @@ import socket import select import bb import tempfile +import sys from oeqa.utils.qemurunner import QemuRunner class QemuZephyrRunner(QemuRunner): - def __init__(self, machine, rootfs, display, tmpdir, deploy_dir_image, logfile, kernel, boottime): + def __init__(self, machine, rootfs, display, tmpdir, deploy_dir_image, logfile, boottime, dump_dir, dump_host_cmds, use_kvm): QemuRunner.__init__(self, machine, rootfs, display, tmpdir, deploy_dir_image, logfile, boottime, None, - None, True) + None, use_kvm) # Popen object for runqemu self.socketfile = tempfile.NamedTemporaryFile() self.runqemu = None self.socketname = self.socketfile.name self.server_socket = None - self.kernel = kernel + + self.kernel = rootfs + self.deploy_dir_image = deploy_dir_image + self.logfile = logfile + self.use_kvm = use_kvm + + self.buffers = b'' + self._rbufsize = 4096 + # 5 minutes timeout... + self.endtime = time.time() + 60*5 def create_socket(self): bb.note("waiting at most %s seconds for qemu pid" % self.runqemutime) @@ -49,10 +59,10 @@ class QemuZephyrRunner(QemuRunner): return False return True - def start(self, qemuparams = None, get_ip = True, extra_bootparams = None): - + def start(self, params=None, extra_bootparams=None): if not os.path.exists(self.tmpdir): bb.error("Invalid TMPDIR path %s" % self.tmpdir) + #logger.error("Invalid TMPDIR path %s" % self.tmpdir) return False else: os.environ["OE_TMPDIR"] = self.tmpdir @@ -63,7 +73,7 @@ class QemuZephyrRunner(QemuRunner): os.environ["DEPLOY_DIR_IMAGE"] = self.deploy_dir_image if not os.path.exists(self.kernel): - bb.error("Invalid kernel path: %s" % self.deploy_dir_image) + bb.error("Invalid kernel path: %s" % self.kernel) return False self.qemuparams = '-nographic -serial unix:%s,server' % (self.socketname) @@ -117,20 +127,33 @@ class QemuZephyrRunner(QemuRunner): bb.note("qemu started, pid is %s" % self.runqemu.pid) return self.create_socket() - def wait_for_serial(self, func_timeout, data_timeout): - stopread = False - check_endtime = False - self.server_socket.setblocking(0) - endtime = time.time() + func_timeout + def _readline(self): + nl = self.buffers.find(b'\n') + if nl >= 0: + nl += 1 + line = self.buffers[:nl] + newbuf = self.buffers[nl:] + self.buffers = newbuf + return line + return None + + def serial_readline(self): + line = self._readline() + if line is None: + while True: + if time.time() >= self.endtime: + bb.warn("Timeout!") + raise Exception("Timeout") + data = self.server_socket.recv(self._rbufsize) + if data is None: + raise Exception("No data on read ready socket") + + self.buffers = self.buffers + data + line = self._readline() + if line is not None: + break + + self.log(line) + return line - while time.time() < endtime: - sread, _, _ = select.select([self.server_socket],[],[],data_timeout) - if not sread: - break - answer = self.server_socket.recv(1024) - if answer: - self.log(answer) - else: - break - return self.logfile |