- This patch addresses an issue with the arguments passed the
BaseGem5Device __init__. With this patch these are no longer passed
in as they are not required in the base device implementation.
- Refactored the Gem5Device to avoid duplicated code. There is now a
BaseGem5Device which includes all of the shared functionality. The
Gem5LinuxDevice and the Gem5AndroidDevice both inherit from
BaseGem5Device, and LinuxDevice or AndroidDevice, respectively.
- Remove the unbind and rebind for the VirtIO 9P mount method as gem5
now checkpoints the basic state of the device. This allows us to
just mount it assuming that checkpoint have been created correctly.
- Replaced hard-coded pexpect expect string with UNIQUE_PROMPT.
- Changed the capture_screen debug to a warning to make sure that the
user knows when it happens.
- Fixed the logic for checking when a file exists. Previously, if the
output could not correctly be processed (ValueError) then we just
assumed that the file existed if there was any output at all. This
is clearly not a good default. Changed to default to False if it was
not able to process the output as this seems to be the safest
option.
- Changed ad hoc filename extraction to use os.path.basename.
- Removed the processing of some kwargs and defaults that are handled
by the parent class.
- Stopped overriding some paramaters which were purely defined in the
Gem5Device.
- Added the gem5_binary option to the agenda which allows a different
gem5 binary to be specified. This allows WA to be used with
different levels of gem5 debugging. as well as allowing non-standard
gem5 binary names and locations.
- Replace ugly while True loop with a simple regex substitution
achieving the same thing. This is required to match the command in
the shell output when the command wraps around due to the length of
the command.
- Implementation of a gem5 device which allows simulated systems to be
used in the place of a real device. Currently, only Android is
supported.
- The gem5 simulation is started automatically based on a command line
passed in via the agenda. The correct telnet port to connect on is
extracted from the standard error from the gem5 process.
- Resuming from gem5 checkpoints is supported, and can be specified as
part of the gem5 system description. Additionally, the agenda option
checkpoint_post_boot can be used to create a checkpoint
automatically once the system has booted. This can then by used for
subsequent runs to avoid booting the system a second time.
- The Gem5Device waits for Android to finish booting, before sending
commands to the simulated device. Additionally, the device supports
a sleep option, which will sleep in the simulated system for a
number of seconds, prior to running the workload. This ensures that
the system can quieten down, prior to running the workload.
- The Gem5Device relies of VirtIO to pull files into the simulated
environment, and therefire diod support is required on the host
system. Additionally, VirtIO 9P support is required in the guest
system kernel.
- The m5 writefile binary and gem5 pseudo instruction are used to
extract files from the simulated environment.