aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kernel/filesystem/CMakeLists.txt2
-rw-r--r--kernel/filesystem/include/filesystem/vfs.hpp21
-rw-r--r--kernel/filesystem/src/vfs.cpp34
-rw-r--r--kernel/src/main.cpp4
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!");
}