diff options
| author | marcel.braun <marcel.braun@ost.ch> | 2026-03-15 14:31:41 +0100 |
|---|---|---|
| committer | Lukas Oesch <lukasoesch20@gmail.com> | 2026-03-17 16:43:00 +0100 |
| commit | 1453fbedde547d9e69cdad659df667f43a8dc750 (patch) | |
| tree | f1f30b43d8b56ca668761a502f793164717e7d3e | |
| parent | afda1c1473919e5d9337614075283a50e865be90 (diff) | |
| download | teachos-1453fbedde547d9e69cdad659df667f43a8dc750.tar.xz teachos-1453fbedde547d9e69cdad659df667f43a8dc750.zip | |
Create basic VFS structure
| -rw-r--r-- | kernel/filesystem/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | kernel/filesystem/include/filesystem/vfs.hpp | 21 | ||||
| -rw-r--r-- | kernel/filesystem/src/vfs.cpp | 34 | ||||
| -rw-r--r-- | kernel/src/main.cpp | 4 |
4 files changed, 61 insertions, 0 deletions
diff --git a/kernel/filesystem/CMakeLists.txt b/kernel/filesystem/CMakeLists.txt index 126b54e..a1c625e 100644 --- a/kernel/filesystem/CMakeLists.txt +++ b/kernel/filesystem/CMakeLists.txt @@ -7,6 +7,7 @@ target_sources("kernel_filesystem" PRIVATE "src/inode_file.cpp" "src/inode.cpp" "src/open_file_description.cpp" + "src/vfs.cpp" ) target_sources("kernel_filesystem" PUBLIC @@ -19,6 +20,7 @@ target_sources("kernel_filesystem" PUBLIC "include/filesystem/inode_file.hpp" "include/filesystem/inode.hpp" "include/filesystem/open_file_description.hpp" + "include/filesystem/vfs.hpp" ) target_include_directories("kernel_filesystem" PUBLIC diff --git a/kernel/filesystem/include/filesystem/vfs.hpp b/kernel/filesystem/include/filesystem/vfs.hpp new file mode 100644 index 0000000..671128e --- /dev/null +++ b/kernel/filesystem/include/filesystem/vfs.hpp @@ -0,0 +1,21 @@ +#ifndef TEACH_OS_KERNEL_FILESYSTEM_VFS_HPP +#define TEACH_OS_KERNEL_FILESYSTEM_VFS_HPP + +#include <string_view> +namespace filesystem +{ + struct vfs + { + auto static init() -> void; + auto static get() -> vfs &; + + ~vfs() = default; + + // auto do_mount(std::string_view const & path) -> + + private: + vfs() = default; + }; +} // namespace filesystem + +#endif
\ No newline at end of file diff --git a/kernel/filesystem/src/vfs.cpp b/kernel/filesystem/src/vfs.cpp new file mode 100644 index 0000000..27f1db9 --- /dev/null +++ b/kernel/filesystem/src/vfs.cpp @@ -0,0 +1,34 @@ +#include "filesystem/vfs.hpp" + +#include "kapi/system.hpp" + +#include <optional> + +namespace filesystem +{ + namespace + { + constinit auto static active_vfs = std::optional<vfs>{}; + } + + auto vfs::init() -> void + { + if (active_vfs) + { + kapi::system::panic("[FILESYSTEM] vfs has already been initialized."); + } + + active_vfs.emplace(vfs{}); + } + + auto vfs::get() -> vfs & + { + if (!active_vfs) + { + kapi::system::panic("[FILESYSTEM] vfs has not been initialized."); + } + + return *active_vfs; + } + +} // namespace filesystem
\ No newline at end of file diff --git a/kernel/src/main.cpp b/kernel/src/main.cpp index 4b74bd4..07fb81b 100644 --- a/kernel/src/main.cpp +++ b/kernel/src/main.cpp @@ -5,6 +5,7 @@ #include "devices/storage/storage_management.hpp" #include "filesystem/file_descriptor_table.hpp" +#include "filesystem/vfs.hpp" #include "kernel/memory.hpp" @@ -29,5 +30,8 @@ auto main() -> int filesystem::file_descriptor_table::init(); kstd::println("[OS] Global file descriptor table initialized."); + filesystem::vfs::init(); + kstd::println("[OS] Virtual filesystem initialized."); + kapi::system::panic("Returning from kernel main!"); } |
