diff options
-rw-r--r-- | meta/lib/oeqa/targetcontrol.py | 3 | ||||
-rw-r--r-- | meta/lib/oeqa/utils/qemurunner.py | 32 |
2 files changed, 23 insertions, 12 deletions
diff --git a/meta/lib/oeqa/targetcontrol.py b/meta/lib/oeqa/targetcontrol.py index 1445e3ecfb..0b2915d5cc 100644 --- a/meta/lib/oeqa/targetcontrol.py +++ b/meta/lib/oeqa/targetcontrol.py | |||
@@ -143,7 +143,8 @@ class QemuTarget(BaseTarget): | |||
143 | use_kvm = use_kvm, | 143 | use_kvm = use_kvm, |
144 | dump_dir = dump_dir, | 144 | dump_dir = dump_dir, |
145 | dump_host_cmds = d.getVar("testimage_dump_host"), | 145 | dump_host_cmds = d.getVar("testimage_dump_host"), |
146 | logger = logger) | 146 | logger = logger, |
147 | serial_ports = len(d.getVar("SERIAL_CONSOLES").split())) | ||
147 | 148 | ||
148 | self.target_dumper = TargetDumper(dump_target_cmds, dump_dir, self.runner) | 149 | self.target_dumper = TargetDumper(dump_target_cmds, dump_dir, self.runner) |
149 | 150 | ||
diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py index fe8b77d97a..c025eb09c5 100644 --- a/meta/lib/oeqa/utils/qemurunner.py +++ b/meta/lib/oeqa/utils/qemurunner.py | |||
@@ -31,7 +31,7 @@ re_control_char = re.compile('[%s]' % re.escape("".join(control_chars))) | |||
31 | class QemuRunner: | 31 | class QemuRunner: |
32 | 32 | ||
33 | def __init__(self, machine, rootfs, display, tmpdir, deploy_dir_image, logfile, boottime, dump_dir, dump_host_cmds, | 33 | def __init__(self, machine, rootfs, display, tmpdir, deploy_dir_image, logfile, boottime, dump_dir, dump_host_cmds, |
34 | use_kvm, logger, use_slirp=False): | 34 | use_kvm, logger, use_slirp=False, serial_ports=2): |
35 | 35 | ||
36 | # Popen object for runqemu | 36 | # Popen object for runqemu |
37 | self.runqemu = None | 37 | self.runqemu = None |
@@ -55,6 +55,7 @@ class QemuRunner: | |||
55 | self.thread = None | 55 | self.thread = None |
56 | self.use_kvm = use_kvm | 56 | self.use_kvm = use_kvm |
57 | self.use_slirp = use_slirp | 57 | self.use_slirp = use_slirp |
58 | self.serial_ports = serial_ports | ||
58 | self.msg = '' | 59 | self.msg = '' |
59 | 60 | ||
60 | self.runqemutime = 120 | 61 | self.runqemutime = 120 |
@@ -142,7 +143,8 @@ class QemuRunner: | |||
142 | 143 | ||
143 | def launch(self, launch_cmd, get_ip = True, qemuparams = None, extra_bootparams = None, env = None): | 144 | def launch(self, launch_cmd, get_ip = True, qemuparams = None, extra_bootparams = None, env = None): |
144 | try: | 145 | try: |
145 | self.threadsock, threadport = self.create_socket() | 146 | if self.serial_ports >= 2: |
147 | self.threadsock, threadport = self.create_socket() | ||
146 | self.server_socket, self.serverport = self.create_socket() | 148 | self.server_socket, self.serverport = self.create_socket() |
147 | except socket.error as msg: | 149 | except socket.error as msg: |
148 | self.logger.error("Failed to create listening socket: %s" % msg[1]) | 150 | self.logger.error("Failed to create listening socket: %s" % msg[1]) |
@@ -160,7 +162,10 @@ class QemuRunner: | |||
160 | if qemuparams: | 162 | if qemuparams: |
161 | self.qemuparams = self.qemuparams[:-1] + " " + qemuparams + " " + '\"' | 163 | self.qemuparams = self.qemuparams[:-1] + " " + qemuparams + " " + '\"' |
162 | 164 | ||
163 | launch_cmd += ' tcpserial=%s:%s %s' % (threadport, self.serverport, self.qemuparams) | 165 | if self.serial_ports >= 2: |
166 | launch_cmd += ' tcpserial=%s:%s %s' % (threadport, self.serverport, self.qemuparams) | ||
167 | else: | ||
168 | launch_cmd += ' tcpserial=%s %s' % (self.serverport, self.qemuparams) | ||
164 | 169 | ||
165 | self.origchldhandler = signal.getsignal(signal.SIGCHLD) | 170 | self.origchldhandler = signal.getsignal(signal.SIGCHLD) |
166 | signal.signal(signal.SIGCHLD, self.handleSIGCHLD) | 171 | signal.signal(signal.SIGCHLD, self.handleSIGCHLD) |
@@ -275,14 +280,15 @@ class QemuRunner: | |||
275 | self.logger.debug("Target IP: %s" % self.ip) | 280 | self.logger.debug("Target IP: %s" % self.ip) |
276 | self.logger.debug("Server IP: %s" % self.server_ip) | 281 | self.logger.debug("Server IP: %s" % self.server_ip) |
277 | 282 | ||
278 | self.thread = LoggingThread(self.log, self.threadsock, self.logger) | 283 | if self.serial_ports >= 2: |
279 | self.thread.start() | 284 | self.thread = LoggingThread(self.log, self.threadsock, self.logger) |
280 | if not self.thread.connection_established.wait(self.boottime): | 285 | self.thread.start() |
281 | self.logger.error("Didn't receive a console connection from qemu. " | 286 | if not self.thread.connection_established.wait(self.boottime): |
282 | "Here is the qemu command line used:\n%s\nand " | 287 | self.logger.error("Didn't receive a console connection from qemu. " |
283 | "output from runqemu:\n%s" % (cmdline, out)) | 288 | "Here is the qemu command line used:\n%s\nand " |
284 | self.stop_thread() | 289 | "output from runqemu:\n%s" % (cmdline, out)) |
285 | return False | 290 | self.stop_thread() |
291 | return False | ||
286 | 292 | ||
287 | self.logger.debug("Output from runqemu:\n%s", out) | 293 | self.logger.debug("Output from runqemu:\n%s", out) |
288 | self.logger.debug("Waiting at most %d seconds for login banner (%s)" % | 294 | self.logger.debug("Waiting at most %d seconds for login banner (%s)" % |
@@ -310,6 +316,10 @@ class QemuRunner: | |||
310 | data = data + sock.recv(1024) | 316 | data = data + sock.recv(1024) |
311 | if data: | 317 | if data: |
312 | bootlog += data | 318 | bootlog += data |
319 | if self.serial_ports < 2: | ||
320 | # this socket has mixed console/kernel data, log it to logfile | ||
321 | self.log(data) | ||
322 | |||
313 | data = b'' | 323 | data = b'' |
314 | if b' login:' in bootlog: | 324 | if b' login:' in bootlog: |
315 | self.server_socket = qemusock | 325 | self.server_socket = qemusock |