aboutsummaryrefslogtreecommitdiff
path: root/kernel/include
diff options
context:
space:
mode:
authorLukas Oesch <lukasoesch20@gmail.com>2026-03-24 23:54:28 +0100
committerLukas Oesch <lukasoesch20@gmail.com>2026-03-26 21:19:30 +0100
commit84d4476650b31dbfc52becf2ff65ddce9d31c9ec (patch)
treeeb4e69e2148690d654303dc145c3f71d94ea9bd9 /kernel/include
parent76de81de1e12694bf6bec1edd3e3409092a92d09 (diff)
downloadteachos-84d4476650b31dbfc52becf2ff65ddce9d31c9ec.tar.xz
teachos-84d4476650b31dbfc52becf2ff65ddce9d31c9ec.zip
implement a rootfs to handle / mounts correctly
Diffstat (limited to 'kernel/include')
-rw-r--r--kernel/include/kernel/filesystem/filesystem.hpp5
-rw-r--r--kernel/include/kernel/filesystem/mount.hpp10
-rw-r--r--kernel/include/kernel/filesystem/rootfs/rootfs_filesystem.hpp21
-rw-r--r--kernel/include/kernel/filesystem/rootfs/rootfs_inode.hpp19
4 files changed, 47 insertions, 8 deletions
diff --git a/kernel/include/kernel/filesystem/filesystem.hpp b/kernel/include/kernel/filesystem/filesystem.hpp
index 362242f..e069ced 100644
--- a/kernel/include/kernel/filesystem/filesystem.hpp
+++ b/kernel/include/kernel/filesystem/filesystem.hpp
@@ -2,7 +2,6 @@
#define TEACH_OS_KERNEL_FILESYSTEM_FILESYSTEM_HPP
#include "kernel/devices/device.hpp"
-#include "kernel/filesystem/dentry.hpp"
#include "kernel/filesystem/inode.hpp"
#include <kstd/memory>
@@ -20,15 +19,11 @@ namespace filesystem
virtual auto lookup(kstd::shared_ptr<inode> const & parent, std::string_view name) -> kstd::shared_ptr<inode> = 0;
[[nodiscard]] auto root_inode() const -> kstd::shared_ptr<inode> const &;
- [[nodiscard]] auto root_dentry() const -> kstd::shared_ptr<dentry> const &;
-
- auto set_root_dentry(kstd::shared_ptr<dentry> dentry) -> void;
protected:
kstd::shared_ptr<inode> m_root_inode{};
kstd::shared_ptr<devices::device> m_device{};
kstd::vector<kstd::shared_ptr<inode>> m_inodes{};
- kstd::shared_ptr<dentry> m_root_dentry;
};
} // namespace filesystem
diff --git a/kernel/include/kernel/filesystem/mount.hpp b/kernel/include/kernel/filesystem/mount.hpp
index dd47ce7..0cd30b4 100644
--- a/kernel/include/kernel/filesystem/mount.hpp
+++ b/kernel/include/kernel/filesystem/mount.hpp
@@ -10,13 +10,17 @@ namespace filesystem
{
struct mount
{
- mount(kstd::shared_ptr<dentry> const & mount_dentry, kstd::shared_ptr<filesystem> const & fs);
+ mount(kstd::shared_ptr<dentry> const & mount_dentry, kstd::shared_ptr<dentry> const & root_dentry,
+ kstd::shared_ptr<filesystem> const & fs);
+
+ [[nodiscard]] auto get_mount_dentry() const -> kstd::shared_ptr<dentry>;
+ [[nodiscard]] auto root_dentry() const -> kstd::shared_ptr<dentry> const &;
- [[nodiscard]] auto get_dentry() const -> kstd::shared_ptr<dentry>;
[[nodiscard]] auto get_filesystem() const -> kstd::shared_ptr<filesystem> const &;
private:
- kstd::shared_ptr<dentry> m_dentry;
+ kstd::shared_ptr<dentry> m_mount_dentry;
+ kstd::shared_ptr<dentry> m_root_dentry;
kstd::shared_ptr<filesystem> m_filesystem{};
};
} // namespace filesystem
diff --git a/kernel/include/kernel/filesystem/rootfs/rootfs_filesystem.hpp b/kernel/include/kernel/filesystem/rootfs/rootfs_filesystem.hpp
new file mode 100644
index 0000000..949ac83
--- /dev/null
+++ b/kernel/include/kernel/filesystem/rootfs/rootfs_filesystem.hpp
@@ -0,0 +1,21 @@
+#ifndef TEACH_OS_KERNEL_FILESYSTEM_ROOTFS_ROOTFS_FILESYSTEM_HPP
+#define TEACH_OS_KERNEL_FILESYSTEM_ROOTFS_ROOTFS_FILESYSTEM_HPP
+
+#include "kernel/devices/device.hpp"
+#include "kernel/filesystem/filesystem.hpp"
+#include "kernel/filesystem/inode.hpp"
+
+#include <kstd/memory>
+
+#include <string_view>
+
+namespace filesystem::rootfs
+{
+ struct rootfs_filesystem : filesystem
+ {
+ auto mount(kstd::shared_ptr<devices::device> const & device) -> int override;
+ auto lookup(kstd::shared_ptr<inode> const & parent, std::string_view name) -> kstd::shared_ptr<inode> override;
+ };
+} // namespace filesystem::rootfs
+
+#endif
diff --git a/kernel/include/kernel/filesystem/rootfs/rootfs_inode.hpp b/kernel/include/kernel/filesystem/rootfs/rootfs_inode.hpp
new file mode 100644
index 0000000..d533e8e
--- /dev/null
+++ b/kernel/include/kernel/filesystem/rootfs/rootfs_inode.hpp
@@ -0,0 +1,19 @@
+#ifndef TEACH_OS_KERNEL_FILESYSTEM_ROOTFS_ROOTFS_INODE_HPP
+#define TEACH_OS_KERNEL_FILESYSTEM_ROOTFS_ROOTFS_INODE_HPP
+
+#include "kernel/filesystem/inode.hpp"
+
+#include <cstddef>
+
+namespace filesystem::rootfs
+{
+ struct rootfs_inode : inode
+ {
+ rootfs_inode();
+
+ auto read(void * buffer, size_t offset, size_t size) const -> size_t override;
+ auto write(void const * buffer, size_t offset, size_t size) -> size_t override;
+ };
+} // namespace filesystem::rootfs
+
+#endif