stdlib: Add interface to set binary in fs mode (#1743)
This commit is contained in:
committed by
Bobby R. Bruce
parent
c31bc284a8
commit
5ae26c0f09
@@ -37,6 +37,7 @@ import m5
|
|||||||
from m5.util import warn
|
from m5.util import warn
|
||||||
|
|
||||||
from ...resources.resource import (
|
from ...resources.resource import (
|
||||||
|
BinaryResource,
|
||||||
BootloaderResource,
|
BootloaderResource,
|
||||||
CheckpointResource,
|
CheckpointResource,
|
||||||
DiskImageResource,
|
DiskImageResource,
|
||||||
@@ -215,21 +216,7 @@ class KernelDiskWorkload:
|
|||||||
if readfile:
|
if readfile:
|
||||||
self.readfile = readfile
|
self.readfile = readfile
|
||||||
elif readfile_contents:
|
elif readfile_contents:
|
||||||
# We hash the contents of the readfile and append it to the
|
self._set_readfile_contents(readfile_contents)
|
||||||
# readfile name. This is to ensure that we don't overwrite the
|
|
||||||
# readfile if the contents are different.
|
|
||||||
readfile_contents_hash = hex(
|
|
||||||
hash(tuple(bytes(readfile_contents, "utf-8")))
|
|
||||||
)
|
|
||||||
self.readfile = os.path.join(
|
|
||||||
m5.options.outdir, ("readfile_" + readfile_contents_hash)
|
|
||||||
)
|
|
||||||
|
|
||||||
# Add the contents to the readfile, if specified.
|
|
||||||
if readfile_contents:
|
|
||||||
file = open(self.readfile, "w+")
|
|
||||||
file.write(readfile_contents)
|
|
||||||
file.close()
|
|
||||||
|
|
||||||
self._add_disk_to_board(disk_image=disk_image)
|
self._add_disk_to_board(disk_image=disk_image)
|
||||||
|
|
||||||
@@ -257,3 +244,47 @@ class KernelDiskWorkload:
|
|||||||
:param arg: The kernel argument to append.
|
:param arg: The kernel argument to append.
|
||||||
"""
|
"""
|
||||||
self.workload.command_line += f" {arg}"
|
self.workload.command_line += f" {arg}"
|
||||||
|
|
||||||
|
def _set_readfile_contents(self, readfile_contents: str) -> None:
|
||||||
|
# We hash the contents of the readfile and append it to the
|
||||||
|
# readfile name. This is to ensure that we don't overwrite the
|
||||||
|
# readfile if the contents are different.
|
||||||
|
readfile_contents_hash = hex(
|
||||||
|
hash(tuple(bytes(readfile_contents, "utf-8")))
|
||||||
|
)
|
||||||
|
self.readfile = os.path.join(
|
||||||
|
m5.options.outdir, ("readfile_" + readfile_contents_hash)
|
||||||
|
)
|
||||||
|
|
||||||
|
file = open(self.readfile, "w+")
|
||||||
|
file.write(readfile_contents)
|
||||||
|
file.close()
|
||||||
|
|
||||||
|
def set_binary_to_run(self, application: BinaryResource, args: List[str]):
|
||||||
|
"""
|
||||||
|
Set the binary to run on the board.
|
||||||
|
|
||||||
|
The binary could be an application or any executable script.
|
||||||
|
Note: this will override the readfile or readfile_contents set in the
|
||||||
|
set_kernel_disk_workload function.
|
||||||
|
|
||||||
|
:param application: The binary to run.
|
||||||
|
:param args: The arguments to pass to the binary.
|
||||||
|
"""
|
||||||
|
if self.readfile:
|
||||||
|
warn(
|
||||||
|
"Setting a binary to run will override the readfile "
|
||||||
|
"set in the set_kernel_disk_workload function."
|
||||||
|
)
|
||||||
|
from base64 import b64encode
|
||||||
|
|
||||||
|
with open(application.get_local_path(), "rb") as binfile:
|
||||||
|
encodedBin = b64encode(binfile.read()).decode()
|
||||||
|
|
||||||
|
application_command = (
|
||||||
|
f'echo "{encodedBin}" | base64 -d > myapp\n'
|
||||||
|
"chmod +x myapp\n"
|
||||||
|
f"./myapp {args}\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
self._set_readfile_contents(application_command)
|
||||||
|
|||||||
Reference in New Issue
Block a user