aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-07-23 09:53:30 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-07-23 10:01:07 +0200
commit941ecbc7bb76426b4304c54ef7bbcea9dbb6284f (patch)
tree70f205d52d19fbc9bac4566b3ed4682f0400ea7d
parentbf60a4c89130c5344b705367d7ab824a414a8521 (diff)
downloadkernel-941ecbc7bb76426b4304c54ef7bbcea9dbb6284f.tar.xz
kernel-941ecbc7bb76426b4304c54ef7bbcea9dbb6284f.zip
kerne: attach storage hierarchy to device tree
-rw-r--r--kernel/CMakeLists.txt3
-rw-r--r--kernel/kernel/devices/storage.cpp28
-rw-r--r--kernel/kernel/devices/storage.hpp22
-rw-r--r--kernel/kernel/devices/storage/controller.cpp32
-rw-r--r--kernel/kernel/devices/storage/controller.hpp63
-rw-r--r--kernel/kernel/devices/storage/management.cpp89
-rw-r--r--kernel/kernel/devices/storage/management.hpp68
-rw-r--r--kernel/kernel/devices/storage/ram_disk/controller.cpp17
-rw-r--r--kernel/kernel/devices/storage/ram_disk/controller.hpp14
-rw-r--r--kernel/kernel/filesystem/ext2/filesystem.tests.cpp6
-rw-r--r--kernel/kernel/filesystem/ext2/inode.tests.cpp6
-rw-r--r--kernel/kernel/main.cpp6
-rw-r--r--kernel/kernel/test_support/devices/storage/management.hpp10
-rw-r--r--kernel/kernel/test_support/filesystem/storage_boot_module_fixture.cpp23
-rw-r--r--kernel/kernel/test_support/filesystem/storage_boot_module_fixture.hpp6
-rw-r--r--kernel/kernel/test_support/state_reset_listener.cpp2
16 files changed, 100 insertions, 295 deletions
diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt
index 47c06ea9..9d3a83e2 100644
--- a/kernel/CMakeLists.txt
+++ b/kernel/CMakeLists.txt
@@ -39,8 +39,7 @@ target_sources("kernel_lib" PRIVATE
"kernel/devices/root_bus.cpp"
# Storage Device Subsystem
- "kernel/devices/storage/controller.cpp"
- "kernel/devices/storage/management.cpp"
+ "kernel/devices/storage.cpp"
"kernel/devices/storage/ram_disk/controller.cpp"
"kernel/devices/storage/ram_disk/device.cpp"
diff --git a/kernel/kernel/devices/storage.cpp b/kernel/kernel/devices/storage.cpp
new file mode 100644
index 00000000..d5d6fab7
--- /dev/null
+++ b/kernel/kernel/devices/storage.cpp
@@ -0,0 +1,28 @@
+#include <kernel/devices/storage.hpp>
+
+#include <kernel/devices/storage/ram_disk/controller.hpp>
+
+#include <kapi/boot_modules.hpp>
+#include <kapi/devices.hpp>
+
+#include <kstd/memory.hpp>
+
+namespace kernel::devices::storage
+{
+ auto init() -> void
+ {
+ kapi::devices::get_root_bus()->add_child(
+ kstd::make_shared<ram_disk::controller>(&kapi::boot_modules::get_boot_module_registry()));
+ }
+
+ auto determine_boot_device() -> kstd::shared_ptr<kapi::devices::device>
+ {
+ auto block_devices = kapi::devices::interface_registry::get().all(kapi::devices::block_device::id);
+ if (block_devices.empty())
+ {
+ return nullptr;
+ }
+
+ return block_devices.front().device().lock();
+ }
+} // namespace kernel::devices::storage \ No newline at end of file
diff --git a/kernel/kernel/devices/storage.hpp b/kernel/kernel/devices/storage.hpp
new file mode 100644
index 00000000..1d0362a3
--- /dev/null
+++ b/kernel/kernel/devices/storage.hpp
@@ -0,0 +1,22 @@
+#ifndef TEACH_OS_KERNEL_DEVICES_STORAGE_HPP
+#define TEACH_OS_KERNEL_DEVICES_STORAGE_HPP
+
+#include <kapi/devices/device.hpp>
+
+#include <kstd/memory.hpp>
+#include <kstd/vector.hpp>
+
+namespace kernel::devices::storage
+{
+
+ //! Attach the boot-time storage controllers to the system device tree.
+ auto init() -> void;
+
+ //! @brief Determine the boot device.
+ //!
+ //! @return The first published block device in the system, or nullptr if none exists.
+ auto determine_boot_device() -> kstd::shared_ptr<kapi::devices::device>;
+
+} // namespace kernel::devices::storage
+
+#endif \ No newline at end of file
diff --git a/kernel/kernel/devices/storage/controller.cpp b/kernel/kernel/devices/storage/controller.cpp
deleted file mode 100644
index f2b67938..00000000
--- a/kernel/kernel/devices/storage/controller.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <kernel/devices/storage/controller.hpp>
-
-#include <kapi/devices/device.hpp>
-
-#include <kstd/memory.hpp>
-#include <kstd/vector.hpp>
-
-#include <cstddef>
-
-namespace kernel::devices::storage
-{
- auto controller::set_ids(size_t major, size_t minors_per_dev) -> void
- {
- m_major = major;
- m_minors_per_device = minors_per_dev;
- }
-
- auto controller::major() const -> size_t
- {
- return m_major;
- }
-
- auto controller::devices_count() const -> size_t
- {
- return m_devices.size();
- }
-
- auto controller::all_devices() const -> kstd::vector<kstd::shared_ptr<kapi::devices::device>> const &
- {
- return m_devices;
- }
-} // namespace kernel::devices::storage \ No newline at end of file
diff --git a/kernel/kernel/devices/storage/controller.hpp b/kernel/kernel/devices/storage/controller.hpp
deleted file mode 100644
index 770c1997..00000000
--- a/kernel/kernel/devices/storage/controller.hpp
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifndef TEACH_OS_KERNEL_DEVICES_STORAGE_CONTROLLER_HPP
-#define TEACH_OS_KERNEL_DEVICES_STORAGE_CONTROLLER_HPP
-
-#include <kapi/devices/device.hpp>
-
-#include <kstd/memory.hpp>
-#include <kstd/vector.hpp>
-
-#include <cstddef>
-
-namespace kernel::devices::storage
-{
- /**
- * @brief Base interface for storage controllers.
- *
- * A storage controller probes for devices and resolves devices by major/minor
- * numbers.
- */
- struct controller
- {
- /**
- * @brief Virtual destructor.
- */
- virtual ~controller() = default;
-
- /**
- * @brief Probe the controller and register discovered devices.
- */
- virtual auto probe() -> void = 0;
-
- /**
- * @brief Assign the major number and minor stride for this controller.
- * @param major Major number assigned to this controller.
- * @param minors_per_dev Minor number stride between devices.
- */
- auto set_ids(size_t major, size_t minors_per_dev) -> void;
-
- /**
- * @brief Return the assigned major number.
- * @return Assigned major number.
- */
- [[nodiscard]] auto major() const -> size_t;
-
- /**
- * @brief Return the number of devices managed by this controller.
- * @return Number of managed devices.
- */
- [[nodiscard]] auto devices_count() const -> size_t;
-
- /**
- * @brief Return all devices managed by this controller.
- * @return Vector of all managed devices.
- */
- [[nodiscard]] auto all_devices() const -> kstd::vector<kstd::shared_ptr<kapi::devices::device>> const &;
-
- protected:
- size_t m_major{};
- size_t m_minors_per_device{};
- kstd::vector<kstd::shared_ptr<kapi::devices::device>> m_devices{};
- };
-} // namespace kernel::devices::storage
-
-#endif \ No newline at end of file
diff --git a/kernel/kernel/devices/storage/management.cpp b/kernel/kernel/devices/storage/management.cpp
deleted file mode 100644
index 2c42fbd3..00000000
--- a/kernel/kernel/devices/storage/management.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <kernel/devices/storage/management.hpp>
-
-#include <kernel/devices/storage/controller.hpp>
-#include <kernel/devices/storage/ram_disk/controller.hpp>
-
-#include <kapi/boot_modules.hpp>
-#include <kapi/devices.hpp>
-#include <kapi/devices/device.hpp>
-#include <kapi/system.hpp>
-
-#include <kstd/memory.hpp>
-#include <kstd/vector.hpp>
-
-#include <algorithm>
-#include <cstddef>
-#include <optional>
-
-namespace
-{
- constexpr size_t static minors_per_device = 16;
-
- constinit auto static storage_management = std::optional<kernel::devices::storage::management>{};
-} // namespace
-
-namespace kernel::devices::storage
-{
- auto management::init() -> void
- {
- if (storage_management)
- {
- kapi::system::panic("[DEVICES] Storage management has already been initialized.");
- }
- storage_management.emplace(management{});
-
- auto ram_disk_controller = kstd::make_shared<ram_disk::controller>(&kapi::boot_modules::get_boot_module_registry());
- storage_management->add_controller(ram_disk_controller);
-
- std::ranges::for_each(storage_management->m_controllers, [](auto controller) { controller->probe(); });
- }
-
- auto management::get() -> management &
- {
- if (!storage_management)
- {
- kapi::system::panic("[DEVICES] Storage management has not been initialized.");
- }
-
- return *storage_management;
- }
-
- auto management::add_controller(kstd::shared_ptr<controller> const & controller) -> void
- {
- // TODO: remove the major argument
- controller->set_ids(0, minors_per_device);
- m_controllers.push_back(controller);
- }
-
- auto management::all_controllers() const -> kstd::vector<kstd::shared_ptr<controller>> const &
- {
- return m_controllers;
- }
-
- auto management::determine_boot_device() -> kstd::shared_ptr<kapi::devices::device>
- {
- // TODO: This is a placeholder implementation. In the future, more sophisticated boot device detection/selection
- // must be implemented.
-
- if (m_controllers.empty())
- {
- return nullptr;
- }
-
- auto devices_on_first_controller = m_controllers[0]->all_devices();
- if (devices_on_first_controller.empty())
- {
- return nullptr;
- }
-
- return devices_on_first_controller[0];
- }
-} // namespace kernel::devices::storage
-
-namespace kernel::tests::devices::storage::management
-{
- auto deinit() -> void
- {
- storage_management.reset();
- }
-} // namespace kernel::tests::devices::storage::management
diff --git a/kernel/kernel/devices/storage/management.hpp b/kernel/kernel/devices/storage/management.hpp
deleted file mode 100644
index f3c02993..00000000
--- a/kernel/kernel/devices/storage/management.hpp
+++ /dev/null
@@ -1,68 +0,0 @@
-#ifndef TEACH_OS_KERNEL_DEVICES_STORAGE_MANAGEMENT_HPP
-#define TEACH_OS_KERNEL_DEVICES_STORAGE_MANAGEMENT_HPP
-
-#include <kernel/devices/storage/controller.hpp>
-
-#include <kapi/devices/device.hpp>
-
-#include <kstd/memory.hpp>
-#include <kstd/vector.hpp>
-
-namespace kernel::devices::storage
-{
- /**
- * @brief Global storage subsystem manager.
- *
- * Owns registered storage controllers and provides device lookup by
- * major/minor numbers.
- */
- struct management
- {
- /**
- * @brief Initialize global storage management.
- *
- * Creates the singleton instance, registers controllers and probes
- * them for devices.
- *
- * @warning Panics if called more than once.
- */
- auto static init() -> void;
-
- /**
- * @brief Return the active storage manager singleton.
- * @return Reference to the active storage manager.
- * @warning Panics if storage management has not been initialized.
- */
- auto static get() -> management &;
-
- /**
- * @brief Register a storage controller.
- * @param controller Controller to register.
- *
- * Assigns controller IDs (major number range and minors per device).
- */
- auto add_controller(kstd::shared_ptr<controller> const & controller) -> void;
-
- /**
- * @brief Return all registered storage controllers.
- * @return Vector of all registered storage controllers.
- */
- [[nodiscard]] auto all_controllers() const -> kstd::vector<kstd::shared_ptr<controller>> const &;
-
- /**
- * @brief Determine the boot device.
- * @return Boot device, or nullptr if it cannot be determined.
- */
- auto determine_boot_device() -> kstd::shared_ptr<kapi::devices::device>;
-
- private:
- /**
- * @brief Private default constructor for storage management singleton.
- */
- management() = default;
-
- kstd::vector<kstd::shared_ptr<controller>> m_controllers{};
- };
-} // namespace kernel::devices::storage
-
-#endif \ No newline at end of file
diff --git a/kernel/kernel/devices/storage/ram_disk/controller.cpp b/kernel/kernel/devices/storage/ram_disk/controller.cpp
index afae9ef2..07ff702d 100644
--- a/kernel/kernel/devices/storage/ram_disk/controller.cpp
+++ b/kernel/kernel/devices/storage/ram_disk/controller.cpp
@@ -1,29 +1,28 @@
+
#include <kernel/devices/storage/ram_disk/controller.hpp>
#include <kernel/devices/storage/ram_disk/device.hpp>
-#include <kapi/boot_module/boot_module_registry.hpp>
+#include <kapi/boot_modules.hpp>
#include <kapi/devices.hpp>
#include <kapi/system.hpp>
-#include <kstd/memory.hpp>
-
#include <algorithm>
#include <cstddef>
namespace kernel::devices::storage::ram_disk
{
controller::controller(kapi::boot_modules::boot_module_registry const * registry)
- : m_boot_module_registry(registry)
+ : kapi::devices::bus{"ram_disk"}
+ , m_boot_module_registry(registry)
{}
- auto controller::probe() -> void
+ auto controller::enumerate() -> bool
{
size_t current_device_index = 0;
std::ranges::for_each(*m_boot_module_registry, [this, &current_device_index](auto const & module) {
- auto const disk = kstd::make_shared<device>(module, current_device_index++);
- disk->init();
+ auto const disk = kstd::make_shared<ram_disk::device>(module, current_device_index++);
if (auto published = kapi::devices::publish_interface<kapi::devices::block_device>(disk, disk->name());
!published)
@@ -31,7 +30,9 @@ namespace kernel::devices::storage::ram_disk
kapi::system::panic("[DEV:RD] Failed to publish block device interface of '{}'", disk->name());
}
- m_devices.push_back(std::move(disk));
+ add_child(std::move(disk));
});
+
+ return true;
}
} // namespace kernel::devices::storage::ram_disk \ No newline at end of file
diff --git a/kernel/kernel/devices/storage/ram_disk/controller.hpp b/kernel/kernel/devices/storage/ram_disk/controller.hpp
index 93cf30d8..b245dc1f 100644
--- a/kernel/kernel/devices/storage/ram_disk/controller.hpp
+++ b/kernel/kernel/devices/storage/ram_disk/controller.hpp
@@ -1,16 +1,15 @@
-#ifndef TEACH_OS_KERNEL_DEVICES_STORAGE_RAM_DISK_CONTROLLER_HPP
-#define TEACH_OS_KERNEL_DEVICES_STORAGE_RAM_DISK_CONTROLLER_HPP
+#ifndef TEACH_OS_KERNEL_DEVICES_RAM_DISK_CONTROLLER_HPP
+#define TEACH_OS_KERNEL_DEVICES_RAM_DISK_CONTROLLER_HPP
-#include <kernel/devices/storage/controller.hpp>
-
-#include <kapi/boot_module/boot_module_registry.hpp>
+#include <kapi/boot_modules.hpp>
+#include <kapi/devices.hpp>
namespace kernel::devices::storage::ram_disk
{
/**
* @brief Storage controller that exposes boot modules as RAM-disk devices.
*/
- struct controller : kernel::devices::storage::controller
+ struct controller : kapi::devices::bus
{
/**
* @brief Create a RAM-disk controller.
@@ -18,10 +17,11 @@ namespace kernel::devices::storage::ram_disk
*/
explicit controller(kapi::boot_modules::boot_module_registry const * registry);
+ protected:
/**
* @brief Probe boot modules and create RAM-disk devices.
*/
- auto probe() -> void override;
+ auto enumerate() -> bool override;
private:
kapi::boot_modules::boot_module_registry const * m_boot_module_registry;
diff --git a/kernel/kernel/filesystem/ext2/filesystem.tests.cpp b/kernel/kernel/filesystem/ext2/filesystem.tests.cpp
index bf408d55..e2259499 100644
--- a/kernel/kernel/filesystem/ext2/filesystem.tests.cpp
+++ b/kernel/kernel/filesystem/ext2/filesystem.tests.cpp
@@ -1,6 +1,6 @@
#include <kernel/filesystem/ext2/filesystem.hpp>
-#include <kernel/devices/storage/management.hpp>
+#include <kernel/devices/storage.hpp>
#include <kernel/filesystem/device_inode.hpp>
#include <kernel/filesystem/ext2/block_group_descriptor.hpp>
#include <kernel/filesystem/ext2/error.hpp>
@@ -41,7 +41,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_fixture,
REQUIRE(std::filesystem::exists(image_path));
REQUIRE_NOTHROW(setup_modules_from_img({"test_img_module"}, {image_path}));
- auto boot_device = kernel::devices::storage::management::get().determine_boot_device();
+ auto boot_device = kernel::devices::storage::determine_boot_device();
REQUIRE(boot_device);
auto dev_inode = kstd::make_shared<kernel::filesystem::device_inode>(boot_device);
@@ -91,7 +91,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_fixture,
REQUIRE(std::filesystem::exists(image_path));
REQUIRE_NOTHROW(setup_modules_from_img({"test_img_module"}, {image_path}));
- auto boot_device = kernel::devices::storage::management::get().determine_boot_device();
+ auto boot_device = kernel::devices::storage::determine_boot_device();
REQUIRE(boot_device);
auto dev_inode = kstd::make_shared<kernel::filesystem::device_inode>(boot_device);
diff --git a/kernel/kernel/filesystem/ext2/inode.tests.cpp b/kernel/kernel/filesystem/ext2/inode.tests.cpp
index e44011cf..ce5be2b0 100644
--- a/kernel/kernel/filesystem/ext2/inode.tests.cpp
+++ b/kernel/kernel/filesystem/ext2/inode.tests.cpp
@@ -1,6 +1,6 @@
#include <kernel/filesystem/ext2/inode.hpp>
-#include <kernel/devices/storage/management.hpp>
+#include <kernel/devices/storage.hpp>
#include <kernel/filesystem/device_inode.hpp>
#include <kernel/filesystem/ext2/block_group_descriptor.hpp>
#include <kernel/filesystem/ext2/filesystem.hpp>
@@ -102,7 +102,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_fixture, "Ext2 in
REQUIRE(std::filesystem::exists(image_path));
REQUIRE_NOTHROW(setup_modules_from_img({"test_img_module"}, {image_path}));
- auto boot_device = kernel::devices::storage::management::get().determine_boot_device();
+ auto boot_device = kernel::devices::storage::determine_boot_device();
REQUIRE(boot_device != nullptr);
auto dev_inode = kstd::make_shared<kernel::filesystem::device_inode>(boot_device);
@@ -296,7 +296,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_fixture, "Ext2 in
REQUIRE(std::filesystem::exists(image_path));
REQUIRE_NOTHROW(setup_modules_from_img({"test_img_module"}, {image_path}));
- auto boot_device = kernel::devices::storage::management::get().determine_boot_device();
+ auto boot_device = kernel::devices::storage::determine_boot_device();
REQUIRE(boot_device != nullptr);
auto dev_inode = kstd::make_shared<kernel::filesystem::device_inode>(boot_device);
diff --git a/kernel/kernel/main.cpp b/kernel/kernel/main.cpp
index 366fcc26..cae7eebf 100644
--- a/kernel/kernel/main.cpp
+++ b/kernel/kernel/main.cpp
@@ -1,5 +1,5 @@
#include "kernel/filesystem/type_registry.hpp"
-#include <kernel/devices/storage/management.hpp>
+#include <kernel/devices/storage.hpp>
#include <kernel/filesystem/open_file_table.hpp>
#include <kernel/filesystem/vfs.hpp>
#include <kernel/memory.hpp>
@@ -167,8 +167,8 @@ auto main() -> int
kapi::boot_modules::init();
kstd::println("[OS] Boot module registry initialized.");
- kernel::devices::storage::management::init();
- kstd::println("[OS] Storage management initialized.");
+ kernel::devices::storage::init();
+ kstd::println("[OS] Storage subsystem initialized.");
kernel::filesystem::open_file_table::init();
kstd::println("[OS] Global open file table initialized.");
diff --git a/kernel/kernel/test_support/devices/storage/management.hpp b/kernel/kernel/test_support/devices/storage/management.hpp
deleted file mode 100644
index 581aa914..00000000
--- a/kernel/kernel/test_support/devices/storage/management.hpp
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef TEACHOS_KERNEL_TEST_SUPPORT_DEVICES_STORAGE_MANAGEMENT_HPP
-#define TEACHOS_KERNEL_TEST_SUPPORT_DEVICES_STORAGE_MANAGEMENT_HPP
-
-namespace kernel::tests::devices::storage::management
-{
- //! Deinitialize the storage management singleton.
- auto deinit() -> void;
-} // namespace kernel::tests::devices::storage::management
-
-#endif \ No newline at end of file
diff --git a/kernel/kernel/test_support/filesystem/storage_boot_module_fixture.cpp b/kernel/kernel/test_support/filesystem/storage_boot_module_fixture.cpp
index aabaaceb..b0a29118 100644
--- a/kernel/kernel/test_support/filesystem/storage_boot_module_fixture.cpp
+++ b/kernel/kernel/test_support/filesystem/storage_boot_module_fixture.cpp
@@ -1,13 +1,15 @@
#include <kernel/test_support/filesystem/storage_boot_module_fixture.hpp>
-#include <kernel/devices/storage/management.hpp>
+#include <kernel/devices/storage.hpp>
+#include <kernel/devices/storage/ram_disk/controller.hpp>
#include <kernel/test_support/boot_modules.hpp>
-#include <kernel/test_support/devices/storage/management.hpp>
#include <kapi/boot_module/boot_module.hpp>
#include <kapi/boot_modules.hpp>
#include <kapi/memory.hpp>
+#include <kstd/memory.hpp>
+
#include <cstddef>
#include <fcntl.h>
#include <filesystem>
@@ -77,7 +79,6 @@ namespace kernel::tests::filesystem
storage_boot_module_fixture::~storage_boot_module_fixture()
{
- kernel::tests::devices::storage::management::deinit();
kernel::tests::boot_modules::deinit();
}
@@ -103,7 +104,13 @@ namespace kernel::tests::filesystem
}
kapi::boot_modules::set_boot_module_registry(m_registry);
- kernel::devices::storage::management::init();
+
+ m_storage_controller = kstd::make_shared<kernel::devices::storage::ram_disk::controller>(
+ &kapi::boot_modules::get_boot_module_registry());
+ if (!m_storage_controller->init())
+ {
+ throw std::runtime_error{"Failed to initialize the test fixture's RAM disk controller."};
+ }
}
auto storage_boot_module_fixture::setup_modules_from_img(std::vector<std::string> const & module_names,
@@ -124,7 +131,13 @@ namespace kernel::tests::filesystem
}
kapi::boot_modules::set_boot_module_registry(m_registry);
- kernel::devices::storage::management::init();
+
+ m_storage_controller = kstd::make_shared<kernel::devices::storage::ram_disk::controller>(
+ &kapi::boot_modules::get_boot_module_registry());
+ if (!m_storage_controller->init())
+ {
+ throw std::runtime_error{"Failed to initialize the test fixture's RAM disk controller."};
+ }
}
auto storage_boot_module_fixture::setup_module_from_img(std::string const & module_name,
diff --git a/kernel/kernel/test_support/filesystem/storage_boot_module_fixture.hpp b/kernel/kernel/test_support/filesystem/storage_boot_module_fixture.hpp
index 94a66688..a8df7090 100644
--- a/kernel/kernel/test_support/filesystem/storage_boot_module_fixture.hpp
+++ b/kernel/kernel/test_support/filesystem/storage_boot_module_fixture.hpp
@@ -1,8 +1,12 @@
#ifndef TEACHOS_KERNEL_TEST_SUPPORT_FILESYSTEM_STORAGE_BOOT_MODULE_FIXTURE_HPP
#define TEACHOS_KERNEL_TEST_SUPPORT_FILESYSTEM_STORAGE_BOOT_MODULE_FIXTURE_HPP
+#include <kernel/devices/storage/ram_disk/controller.hpp>
+
#include <kapi/boot_module/boot_module_registry.hpp>
+#include <kstd/memory.hpp>
+
#include <cstddef>
#include <filesystem>
#include <string>
@@ -40,6 +44,8 @@ namespace kernel::tests::filesystem
std::vector<std::vector<std::byte>> m_module_data{};
std::vector<mapped_image> m_mapped_images{};
+ kstd::shared_ptr<kernel::devices::storage::ram_disk::controller> m_storage_controller{};
+
private:
auto setup_module_from_img(std::string const & module_name, std::filesystem::path const & img_path) -> void;
};
diff --git a/kernel/kernel/test_support/state_reset_listener.cpp b/kernel/kernel/test_support/state_reset_listener.cpp
index af886d5e..a6dc6528 100644
--- a/kernel/kernel/test_support/state_reset_listener.cpp
+++ b/kernel/kernel/test_support/state_reset_listener.cpp
@@ -2,7 +2,6 @@
#include <kernel/test_support/boot_modules.hpp>
#include <kernel/test_support/cio.hpp>
#include <kernel/test_support/cpu.hpp>
-#include <kernel/test_support/devices/storage/management.hpp>
#include <kernel/test_support/filesystem/device_number_registry.hpp>
#include <kernel/test_support/filesystem/open_file_table.hpp>
#include <kernel/test_support/filesystem/vfs.hpp>
@@ -39,7 +38,6 @@ struct state_reset_listener : Catch::EventListenerBase
kernel::tests::filesystem::open_file_table::deinit();
kernel::tests::filesystem::vfs::deinit();
kernel::tests::boot_modules::deinit();
- kernel::tests::devices::storage::management::deinit();
kernel::tests::memory::deinit();
kernel::tests::cpu::deinit();