[project][qemu] Allow multiple temp files passed to qemu
Refactor qemu script to allow more than one temp file to be created that
will not be deleted until qemu is done.
Bug: 128335789
Change-Id: I1a251d6a639f5722681c44819127aa8db73a46a2
diff --git a/project/qemu/qemu.py b/project/qemu/qemu.py
index e95b2f4..e1723f8 100644
--- a/project/qemu/qemu.py
+++ b/project/qemu/qemu.py
@@ -226,7 +226,7 @@
self.interactive = interactive
self.verbose = verbose
self.adb_transport = None
- self.dtb = None
+ self.temp_files = []
self.use_rpmb = rpmb
self.rpmb_proc = None
self.rpmb_sock_dir = None
@@ -247,6 +247,11 @@
else:
self.stdin = devnull
+ def get_qemu_arg_temp_file(self):
+ """Returns a temp file that will be deleted after qemu exits."""
+ tmp = tempfile.NamedTemporaryFile(delete=False)
+ self.temp_files.append(tmp.name)
+ return tmp
def drive_args(self, image, index):
"""Generates arguments for mapping a drive"""
@@ -315,16 +320,16 @@
dts += firmware_file.read()
# Subprocess closes dtb, so we can't allow it to autodelete
- self.dtb = tempfile.NamedTemporaryFile(delete=False)
+ dtb = self.get_qemu_arg_temp_file()
dts_to_dtb_cmd = [dtc, "-q", "-O", "dtb"]
dts_to_dtb = subprocess.Popen(dts_to_dtb_cmd,
stdin=subprocess.PIPE,
- stdout=self.dtb)
+ stdout=dtb)
dts_to_dtb.communicate(dts)
dts_to_dtb_ret = dts_to_dtb.wait()
if dts_to_dtb_ret:
raise RunnerError("dts_to_dtb failed with %d" % dts_to_dtb_ret)
- return ["-dtb", self.dtb.name]
+ return ["-dtb", dtb.name]
def semihosting_run(self, args):
"""Runs QEMU assuming it will quit with semihosting"""
@@ -553,7 +558,7 @@
# Resource exists in multiple functions, wants to use the same
# cleanup block regardless
- self.dtb = None
+ self.temp_files = []
try:
if self.use_rpmb:
@@ -614,8 +619,8 @@
qemu_proc.wait()
finally:
# Clean up generated device tree
- if self.dtb:
- os.remove(self.dtb.name)
+ for temp_file in self.temp_files:
+ os.remove(temp_file)
unclean_exit = qemu_exit(command_dir, qemu_proc)