diff options
Diffstat (limited to 'yocto-poky/meta/lib/oeqa/utils/qemutinyrunner.py')
-rw-r--r-- | yocto-poky/meta/lib/oeqa/utils/qemutinyrunner.py | 170 |
1 files changed, 0 insertions, 170 deletions
diff --git a/yocto-poky/meta/lib/oeqa/utils/qemutinyrunner.py b/yocto-poky/meta/lib/oeqa/utils/qemutinyrunner.py deleted file mode 100644 index 4f95101f3..000000000 --- a/yocto-poky/meta/lib/oeqa/utils/qemutinyrunner.py +++ /dev/null @@ -1,170 +0,0 @@ -# Copyright (C) 2015 Intel Corporation -# -# Released under the MIT license (see COPYING.MIT) - -# This module provides a class for starting qemu images of poky tiny. -# It's used by testimage.bbclass. - -import subprocess -import os -import time -import signal -import re -import socket -import select -import bb -from qemurunner import QemuRunner - -class QemuTinyRunner(QemuRunner): - - def __init__(self, machine, rootfs, display, tmpdir, deploy_dir_image, logfile, kernel, boottime): - - # Popen object for runqemu - self.runqemu = None - # pid of the qemu process that runqemu will start - self.qemupid = None - # target ip - from the command line - self.ip = None - # host ip - where qemu is running - self.server_ip = None - - self.machine = machine - self.rootfs = rootfs - self.display = display - self.tmpdir = tmpdir - self.deploy_dir_image = deploy_dir_image - self.logfile = logfile - self.boottime = boottime - - self.runqemutime = 60 - self.socketfile = "console.sock" - self.server_socket = None - self.kernel = kernel - - - def create_socket(self): - tries = 3 - while tries > 0: - try: - self.server_socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - self.server_socket.connect(self.socketfile) - bb.note("Created listening socket for qemu serial console.") - tries = 0 - except socket.error, msg: - self.server_socket.close() - bb.fatal("Failed to create listening socket.") - tries -= 1 - - def log(self, msg): - if self.logfile: - with open(self.logfile, "a") as f: - f.write("%s" % msg) - - def start(self, qemuparams = None): - - if self.display: - os.environ["DISPLAY"] = self.display - else: - bb.error("To start qemu I need a X desktop, please set DISPLAY correctly (e.g. DISPLAY=:1)") - return False - if not os.path.exists(self.rootfs): - bb.error("Invalid rootfs %s" % self.rootfs) - return False - if not os.path.exists(self.tmpdir): - bb.error("Invalid TMPDIR path %s" % self.tmpdir) - return False - else: - os.environ["OE_TMPDIR"] = self.tmpdir - if not os.path.exists(self.deploy_dir_image): - bb.error("Invalid DEPLOY_DIR_IMAGE path %s" % self.deploy_dir_image) - return False - else: - os.environ["DEPLOY_DIR_IMAGE"] = self.deploy_dir_image - - # Set this flag so that Qemu doesn't do any grabs as SDL grabs interact - # badly with screensavers. - os.environ["QEMU_DONT_GRAB"] = "1" - self.qemuparams = '--append "root=/dev/ram0 console=ttyS0" -nographic -serial unix:%s,server,nowait' % self.socketfile - - launch_cmd = 'qemu-system-i386 -kernel %s -initrd %s %s' % (self.kernel, self.rootfs, self.qemuparams) - self.runqemu = subprocess.Popen(launch_cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,preexec_fn=os.setpgrp) - - bb.note("runqemu started, pid is %s" % self.runqemu.pid) - bb.note("waiting at most %s seconds for qemu pid" % self.runqemutime) - endtime = time.time() + self.runqemutime - while not self.is_alive() and time.time() < endtime: - time.sleep(1) - - if self.is_alive(): - bb.note("qemu started - qemu procces pid is %s" % self.qemupid) - self.create_socket() - else: - bb.note("Qemu pid didn't appeared in %s seconds" % self.runqemutime) - output = self.runqemu.stdout - self.stop() - bb.note("Output from runqemu:\n%s" % output.read()) - return False - - return self.is_alive() - - def run_serial(self, command): - self.server_socket.sendall(command+'\n') - data = '' - status = 0 - stopread = False - endtime = time.time()+5 - while time.time()<endtime and not stopread: - sread, _, _ = select.select([self.server_socket],[],[],5) - for sock in sread: - answer = sock.recv(1024) - if answer: - data += answer - else: - sock.close() - stopread = True - if not data: - status = 1 - return (status, str(data)) - - def find_child(self,parent_pid): - # - # Walk the process tree from the process specified looking for a qemu-system. Return its [pid'cmd] - # - ps = subprocess.Popen(['ps', 'axww', '-o', 'pid,ppid,command'], stdout=subprocess.PIPE).communicate()[0] - processes = ps.split('\n') - nfields = len(processes[0].split()) - 1 - pids = {} - commands = {} - for row in processes[1:]: - data = row.split(None, nfields) - if len(data) != 3: - continue - if data[1] not in pids: - pids[data[1]] = [] - - pids[data[1]].append(data[0]) - commands[data[0]] = data[2] - - if parent_pid not in pids: - return [] - - parents = [] - newparents = pids[parent_pid] - while newparents: - next = [] - for p in newparents: - if p in pids: - for n in pids[p]: - if n not in parents and n not in next: - next.append(n) - if p not in parents: - parents.append(p) - newparents = next - #print "Children matching %s:" % str(parents) - for p in parents: - # Need to be careful here since runqemu-internal runs "ldd qemu-system-xxxx" - # Also, old versions of ldd (2.11) run "LD_XXXX qemu-system-xxxx" - basecmd = commands[p].split()[0] - basecmd = os.path.basename(basecmd) - if "qemu-system" in basecmd and "-serial unix" in commands[p]: - return [int(p),commands[p]]
\ No newline at end of file |