mirror of
https://git.yoctoproject.org/meta-zephyr
synced 2026-09-12 09:49:32 +02:00
Refactored processing of QEMU logs. The original code read QEMU logs every 30 seconds, which resulted in each test taking at least 30 seconds to finish. In reality, most tests take only a few seconds. Although the tests run in parallel, on systems with only a few CPUs this can make a very noticable difference. Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
67 lines
2.7 KiB
Python
67 lines
2.7 KiB
Python
# Copyright (C) 2013-2017 Intel Corporation
|
|
#
|
|
# Released under the MIT license (see COPYING.MIT)
|
|
|
|
# This module is used by testimage.bbclass for setting up and controlling a target machine.
|
|
|
|
import os
|
|
import shutil
|
|
import bb
|
|
import logging
|
|
from oeqa.targetcontrol import QemuTarget
|
|
from oeqa.utils.dump import TargetDumper
|
|
from oeqa.utils.qemuzephyrrunner import QemuZephyrRunner
|
|
|
|
class QemuTargetZephyr(QemuTarget):
|
|
|
|
def __init__(self, d):
|
|
|
|
super(QemuTarget, self).__init__(d)
|
|
self.qemulog = os.path.join(self.testdir, "qemu_boot_log.%s" % self.datetime)
|
|
dump_target_cmds = d.getVar("testimage_dump_target", True)
|
|
dump_host_cmds = d.getVar("testimage_dump_host", True)
|
|
dump_dir = d.getVar("TESTIMAGE_DUMP_DIR", True)
|
|
|
|
self.kernel = os.path.join(d.getVar("DEPLOY_DIR_IMAGE", True), d.getVar("ZEPHYR_IMAGENAME", True))
|
|
self.rootfs = ""
|
|
|
|
# Log QemuRunner log output to a file
|
|
import oe.path
|
|
from oeqa.utils.qemuzephyrrunner import QemuZephyrRunner
|
|
bb.utils.mkdirhier(self.testdir)
|
|
self.qemurunnerlog = os.path.join(self.testdir, 'qemurunner_log.%s' % self.datetime)
|
|
logger = logging.getLogger('BitBake.QemuRunner')
|
|
loggerhandler = logging.FileHandler(self.qemurunnerlog)
|
|
loggerhandler.setFormatter(logging.Formatter("%(levelname)s: %(message)s"))
|
|
logger.addHandler(loggerhandler)
|
|
oe.path.symlink(os.path.basename(self.qemurunnerlog), os.path.join(self.testdir, 'qemurunner_log'), force=True)
|
|
self.runner = QemuZephyrRunner(machine=d.getVar("MACHINE", True),
|
|
rootfs=self.rootfs,
|
|
tmpdir = d.getVar("TMPDIR", True),
|
|
deploy_dir_image = d.getVar("DEPLOY_DIR_IMAGE", True),
|
|
display = d.getVar("BB_ORIGENV", False).getVar("DISPLAY", True),
|
|
logfile = self.qemulog,
|
|
kernel = self.kernel,
|
|
boottime = int(d.getVar("TEST_QEMUBOOT_TIMEOUT", True)))
|
|
|
|
self.target_dumper = TargetDumper(dump_target_cmds, dump_dir, self.runner)
|
|
|
|
def deploy(self):
|
|
try:
|
|
bb.utils.mkdirhier(self.testdir)
|
|
if self.rootfs:
|
|
shutil.copyfile(self.origrootfs, self.rootfs)
|
|
except Exception as e:
|
|
bb.fatal("Error copying rootfs: %s" % e)
|
|
|
|
qemuloglink = os.path.join(self.testdir, "qemu_boot_log")
|
|
if os.path.islink(qemuloglink):
|
|
os.unlink(qemuloglink)
|
|
os.symlink(self.qemulog, qemuloglink)
|
|
|
|
bb.note("Qemu log file: %s" % self.qemulog)
|
|
super(QemuTarget, self).deploy()
|
|
|
|
def serial_readline(self):
|
|
return self.runner.serial_readline()
|