Hoa Nguyen has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/50754 )
Change subject: python: Make disk image optional for riscv-board
......................................................................
python: Make disk image optional for riscv-board
This resource allows booting Linux without using a disk image.
https://gem5-review.googlesource.com/c/public/gem5-resources/+/50547
Change-Id: I15723e3c22ce116660767068e75da7920c7b8be2
Signed-off-by: Hoa Nguyen <hoangu...@ucdavis.edu>
---
M src/python/gem5/components/boards/riscv_board.py
1 file changed, 40 insertions(+), 26 deletions(-)
diff --git a/src/python/gem5/components/boards/riscv_board.py
b/src/python/gem5/components/boards/riscv_board.py
index 2cc151d..7b3c2af 100644
--- a/src/python/gem5/components/boards/riscv_board.py
+++ b/src/python/gem5/components/boards/riscv_board.py
@@ -84,6 +84,7 @@
processor: AbstractProcessor,
memory: AbstractMemorySystem,
cache_hierarchy: AbstractCacheHierarchy,
+ use_disk_image: bool = True
) -> None:
super().__init__(clk_freq, processor, memory, cache_hierarchy)
@@ -110,17 +111,20 @@
self.iobus = IOXBar()
# The virtio disk
- self.disk = MmioVirtIO(
- vio=VirtIOBlock(),
- interrupt_id=0x8,
- pio_size=4096,
- pio_addr=0x10008000,
- )
+ if use_disk_image:
+ self.disk = MmioVirtIO(
+ vio=VirtIOBlock(),
+ interrupt_id=0x8,
+ pio_size=4096,
+ pio_addr=0x10008000,
+ )
# Note: This overrides the platform's code because the platform
isn't
# general enough.
self._on_chip_devices = [self.platform.clint, self.platform.plic]
- self._off_chip_devices = [self.platform.uart, self.disk]
+ self._off_chip_devices = [self.platform.uart]
+ if use_disk_image:
+ self._off_chip_devices.append(self.disk)
def _setup_io_devices(self) -> None:
"""Connect the I/O devices to the I/O bus"""
@@ -175,7 +179,9 @@
memory.set_memory_range(self.mem_ranges)
def set_workload(
- self, bootloader: AbstractResource, disk_image: AbstractResource,
+ self, bootloader: AbstractResource,
+ disk_image: Optional[AbstractResource],
+ kernel_boot_params: Optional[str] = "console=ttyS0 root=/dev/vda
ro",
command: Optional[str] = None
) -> None:
"""Setup the full system files
@@ -199,18 +205,24 @@
with the kernel as a payload
:param disk_image: The resource encapsulating the disk image
containing
the OS data. The first partition should be the root partition.
+ :param kernel_boot_params: The options for booting a Linux kernel.
+ More information about options is available at
+
www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html
:param command: The command(s) to run with bash once the OS is
booted
"""
self.workload.object_file = bootloader.get_local_path()
- image = CowDiskImage(
- child=RawDiskImage(read_only=True), read_only=False
- )
- image.child.image_file = disk_image.get_local_path()
- self.disk.vio.image = image
+ use_disk_image = not (disk_image == None)
- self.workload.command_line = "console=ttyS0 root=/dev/vda ro"
+ if use_disk_image:
+ image = CowDiskImage(
+ child=RawDiskImage(read_only=True), read_only=False
+ )
+ image.child.image_file = disk_image.get_local_path()
+ self.disk.vio.image = image
+
+ self.workload.command_line = kernel_boot_params
# Note: This must be called after set_workload because it looks
for an
# attribute named "disk" and connects
@@ -224,12 +236,12 @@
# We need to wait to generate the device tree until after the disk
is
# set up. Now that the disk and workload are set, we can generate
the
# device tree file.
- self.generate_device_tree(m5.options.outdir)
+ self.generate_device_tree(m5.options.outdir, use_disk_image)
self.workload.dtb_filename = os.path.join(
m5.options.outdir, "device.dtb"
)
- def generate_device_tree(self, outdir: str) -> None:
+ def generate_device_tree(self, outdir: str, use_disk_image: bool) ->
None:
"""Creates the dtb and dts files.
Creates two files in the outdir: 'device.dtb' and 'device.dts'
@@ -360,16 +372,18 @@
soc_node.append(uart_node)
# VirtIO MMIO disk node
- disk = self.disk
- disk_node = disk.generateBasicPioDeviceNode(
- soc_state, "virtio_mmio", disk.pio_addr, disk.pio_size
- )
- disk_node.append(FdtPropertyWords("interrupts",
[disk.interrupt_id]))
- disk_node.append(
- FdtPropertyWords("interrupt-parent", soc_state.phandle(plic))
- )
- disk_node.appendCompatible(["virtio,mmio"])
- soc_node.append(disk_node)
+ if use_disk_image:
+ disk = self.disk
+ disk_node = disk.generateBasicPioDeviceNode(
+ soc_state, "virtio_mmio", disk.pio_addr, disk.pio_size
+ )
+ disk_node.append(
+ FdtPropertyWords("interrupts",[disk.interrupt_id]))
+ disk_node.append(
+ FdtPropertyWords("interrupt-parent",
soc_state.phandle(plic))
+ )
+ disk_node.appendCompatible(["virtio,mmio"])
+ soc_node.append(disk_node)
root.append(soc_node)
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/50754
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I15723e3c22ce116660767068e75da7920c7b8be2
Gerrit-Change-Number: 50754
Gerrit-PatchSet: 1
Gerrit-Owner: Hoa Nguyen <hoangu...@ucdavis.edu>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s