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

Reply via email to