summaryrefslogtreecommitdiff
path: root/meta/lib
diff options
context:
space:
mode:
authorMariano Lopez <mariano.lopez@linux.intel.com>2015-08-11 13:24:44 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-08-16 09:24:17 +0100
commita82711fe4520538a732a16795d50573b6f1d4463 (patch)
tree0ee4a80a57f44dc1b1ce9f2cd6a478779826b664 /meta/lib
parentd055e797eb1d60f04d685b6583eb1695c7600a56 (diff)
downloadopenembedded-core-a82711fe4520538a732a16795d50573b6f1d4463.tar.gz
openembedded-core-a82711fe4520538a732a16795d50573b6f1d4463.tar.bz2
openembedded-core-a82711fe4520538a732a16795d50573b6f1d4463.zip
qemurunner.py: Add method run_serial
The only need for the console before this patch was to check if the target has booted. This allows to send commands to the terminal. This new method is based on the method with the same name of the QemuTinyRunner class. The difference here is it will remove the command and the prompt. The other diference is it will send an echo $? to check if the last command was successful. [YOCTO #8118] Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com>
Diffstat (limited to 'meta/lib')
-rw-r--r--meta/lib/oeqa/utils/qemurunner.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py
index 9bb1f4bb2d..81ca32e11b 100644
--- a/meta/lib/oeqa/utils/qemurunner.py
+++ b/meta/lib/oeqa/utils/qemurunner.py
@@ -262,3 +262,33 @@ class QemuRunner:
basecmd = os.path.basename(basecmd)
if "qemu-system" in basecmd and "-serial tcp" in commands[p]:
return [int(p),commands[p]]
+
+ def run_serial(self, command):
+ # We assume target system have echo to get command status
+ self.server_socket.sendall("%s; echo $?\n" % command)
+ 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 data:
+ # Remove first line (command line) and last line (prompt)
+ data = data[data.find('$?\r\n')+4:data.rfind('\r\n')]
+ index = data.rfind('\r\n')
+ if index == -1:
+ status_cmd = data
+ data = ""
+ else:
+ status_cmd = data[index+2:]
+ data = data[:index]
+ if (status_cmd == "0"):
+ status = 1
+ return (status, str(data))