diff options
| author | marcel.braun <marcel.braun@ost.ch> | 2026-03-15 15:10:49 +0100 |
|---|---|---|
| committer | Lukas Oesch <lukasoesch20@gmail.com> | 2026-03-17 16:43:01 +0100 |
| commit | 76219d593867f6e0c86c9f65ec90c3da18877e2a (patch) | |
| tree | 236afbed678c14d73d83eb110a5f50bcdbfc2f35 | |
| parent | 1453fbedde547d9e69cdad659df667f43a8dc750 (diff) | |
| download | teachos-76219d593867f6e0c86c9f65ec90c3da18877e2a.tar.xz teachos-76219d593867f6e0c86c9f65ec90c3da18877e2a.zip | |
Add basic structure for ext2_filesystem, filesystem and mount
| -rw-r--r-- | kernel/filesystem/CMakeLists.txt | 6 | ||||
| -rw-r--r-- | kernel/filesystem/include/filesystem/ext2/ext2_filesystem.hpp | 18 | ||||
| -rw-r--r-- | kernel/filesystem/include/filesystem/filesystem.hpp | 23 | ||||
| -rw-r--r-- | kernel/filesystem/include/filesystem/mount.hpp | 24 | ||||
| -rw-r--r-- | kernel/filesystem/src/ext2/ext2_filesystem.cpp | 16 | ||||
| -rw-r--r-- | kernel/filesystem/src/filesystem.cpp | 11 | ||||
| -rw-r--r-- | kernel/filesystem/src/mount.cpp | 30 |
7 files changed, 128 insertions, 0 deletions
diff --git a/kernel/filesystem/CMakeLists.txt b/kernel/filesystem/CMakeLists.txt index a1c625e..a6b4e49 100644 --- a/kernel/filesystem/CMakeLists.txt +++ b/kernel/filesystem/CMakeLists.txt @@ -3,9 +3,12 @@ add_library("kernel::filesystem" ALIAS "kernel_filesystem") target_sources("kernel_filesystem" PRIVATE "src/device_file.cpp" + "src/ext2/ext2_filesystem.cpp" "src/file_descriptor_table.cpp" + "src/filesystem.cpp" "src/inode_file.cpp" "src/inode.cpp" + "src/mount.cpp" "src/open_file_description.cpp" "src/vfs.cpp" ) @@ -15,10 +18,13 @@ target_sources("kernel_filesystem" PUBLIC BASE_DIRS "include" FILES "include/filesystem/device_file.hpp" + "include/filesystem/ext2/ext2_filesystem.hpp" "include/filesystem/file_descriptor_table.hpp" "include/filesystem/file.hpp" + "include/filesystem/filesystem.hpp" "include/filesystem/inode_file.hpp" "include/filesystem/inode.hpp" + "include/filesystem/mount.hpp" "include/filesystem/open_file_description.hpp" "include/filesystem/vfs.hpp" ) diff --git a/kernel/filesystem/include/filesystem/ext2/ext2_filesystem.hpp b/kernel/filesystem/include/filesystem/ext2/ext2_filesystem.hpp new file mode 100644 index 0000000..0027475 --- /dev/null +++ b/kernel/filesystem/include/filesystem/ext2/ext2_filesystem.hpp @@ -0,0 +1,18 @@ +#ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILESYSTEM_HPP +#define TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILESYSTEM_HPP + +#include "devices/block_device.hpp" +#include "filesystem/filesystem.hpp" + +namespace filesystem::ext2 +{ + struct ext2_filesystem : filesystem + { + auto mount(devices::block_device * block_device) -> int override; + + private: + devices::block_device * m_block_device{}; + }; +} // namespace filesystem::ext2 + +#endif diff --git a/kernel/filesystem/include/filesystem/filesystem.hpp b/kernel/filesystem/include/filesystem/filesystem.hpp new file mode 100644 index 0000000..d5704c1 --- /dev/null +++ b/kernel/filesystem/include/filesystem/filesystem.hpp @@ -0,0 +1,23 @@ +#ifndef TEACH_OS_KERNEL_FILESYSTEM_FILESYSTEM_HPP +#define TEACH_OS_KERNEL_FILESYSTEM_FILESYSTEM_HPP + +#include "devices/block_device.hpp" +#include "filesystem/inode.hpp" + +namespace filesystem +{ + struct filesystem + { + virtual ~filesystem() = default; + + virtual auto mount(devices::block_device * block_device) -> int = 0; + + auto root_inode() -> inode *; + + protected: + inode * m_root_inode{}; // TODO BA-FS26 set during mount? + }; + +} // namespace filesystem + +#endif
\ No newline at end of file diff --git a/kernel/filesystem/include/filesystem/mount.hpp b/kernel/filesystem/include/filesystem/mount.hpp new file mode 100644 index 0000000..793c042 --- /dev/null +++ b/kernel/filesystem/include/filesystem/mount.hpp @@ -0,0 +1,24 @@ +#ifndef TEACH_OS_KERNEL_FILESYSTEM_MOUNT_HPP +#define TEACH_OS_KERNEL_FILESYSTEM_MOUNT_HPP + +#include "filesystem/filesystem.hpp" + +#include <string_view> + +namespace filesystem +{ + struct mount + { + mount() = default; // TODO BA-FS26 remove again when kstd::vector is available and used in vfs + mount(std::string_view const & path, filesystem * fs); + + auto path() const -> std::string_view; + auto get_filesystem() const -> filesystem *; + + private: + std::string_view m_path; + filesystem * m_filesystem{}; + }; +} // namespace filesystem + +#endif diff --git a/kernel/filesystem/src/ext2/ext2_filesystem.cpp b/kernel/filesystem/src/ext2/ext2_filesystem.cpp new file mode 100644 index 0000000..bdd430d --- /dev/null +++ b/kernel/filesystem/src/ext2/ext2_filesystem.cpp @@ -0,0 +1,16 @@ +#include "filesystem/ext2/ext2_filesystem.hpp" + +#include "devices/block_device.hpp" + +namespace filesystem::ext2 +{ + auto ext2_filesystem::mount(devices::block_device * block_device) -> int + { + if (!block_device) + { + return -1; // TODO BA-FS26 panic or errorcode? + } + // TODO BA-FS26 implement + return 0; + } +} // namespace filesystem::ext2
\ No newline at end of file diff --git a/kernel/filesystem/src/filesystem.cpp b/kernel/filesystem/src/filesystem.cpp new file mode 100644 index 0000000..d6a2f25 --- /dev/null +++ b/kernel/filesystem/src/filesystem.cpp @@ -0,0 +1,11 @@ +#include "filesystem/filesystem.hpp" + +#include "filesystem/inode.hpp" + +namespace filesystem +{ + auto filesystem::root_inode() -> inode * + { + return m_root_inode; + } +} // namespace filesystem
\ No newline at end of file diff --git a/kernel/filesystem/src/mount.cpp b/kernel/filesystem/src/mount.cpp new file mode 100644 index 0000000..6594598 --- /dev/null +++ b/kernel/filesystem/src/mount.cpp @@ -0,0 +1,30 @@ +#include "filesystem/mount.hpp" + +#include "kapi/system.hpp" + +#include "filesystem/filesystem.hpp" + +#include <string_view> + +namespace filesystem +{ + mount::mount(std::string_view const & path, filesystem * fs) + : m_path(path) + , m_filesystem(fs) + { + if (!m_filesystem) + { + kapi::system::panic("[FILESYSTEM] mount initialized with null filesystem."); + } + } + + auto mount::path() const -> std::string_view + { + return m_path; + } + + auto mount::get_filesystem() const -> filesystem * + { + return m_filesystem; + } +} // namespace filesystem
\ No newline at end of file |
