diff options
| author | Lukas Oesch <lukasoesch20@gmail.com> | 2026-03-24 23:54:28 +0100 |
|---|---|---|
| committer | Lukas Oesch <lukasoesch20@gmail.com> | 2026-03-26 21:19:30 +0100 |
| commit | 84d4476650b31dbfc52becf2ff65ddce9d31c9ec (patch) | |
| tree | eb4e69e2148690d654303dc145c3f71d94ea9bd9 /kernel/include | |
| parent | 76de81de1e12694bf6bec1edd3e3409092a92d09 (diff) | |
| download | teachos-84d4476650b31dbfc52becf2ff65ddce9d31c9ec.tar.xz teachos-84d4476650b31dbfc52becf2ff65ddce9d31c9ec.zip | |
implement a rootfs to handle / mounts correctly
Diffstat (limited to 'kernel/include')
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 |
