diff options
| author | Marcel Braun <marcel.braun@ost.ch> | 2026-04-28 09:32:53 +0200 |
|---|---|---|
| committer | Marcel Braun <marcel.braun@ost.ch> | 2026-04-28 09:32:53 +0200 |
| commit | 9d2ec7c3999a550a5c5cdbc2bd952452cd4b7fc0 (patch) | |
| tree | b1e9347c3f03302afb1d0851eefba25dbf0f1c82 /kernel/src/main.cpp | |
| parent | f6f10575f75ac23d06e1d94f7861611503daa7af (diff) | |
| parent | d349812c2e1e6a7d62f53d1c959137794e8a648d (diff) | |
| download | teachos-9d2ec7c3999a550a5c5cdbc2bd952452cd4b7fc0.tar.xz teachos-9d2ec7c3999a550a5c5cdbc2bd952452cd4b7fc0.zip | |
Merge branch 'refactoring' into 'develop-BA-FS26'
Refactoring
See merge request teachos/kernel!27
Diffstat (limited to 'kernel/src/main.cpp')
| -rw-r--r-- | kernel/src/main.cpp | 89 |
1 files changed, 76 insertions, 13 deletions
diff --git a/kernel/src/main.cpp b/kernel/src/main.cpp index 60b6e6e..ffea979 100644 --- a/kernel/src/main.cpp +++ b/kernel/src/main.cpp @@ -1,7 +1,7 @@ #include <kernel/devices/storage/management.hpp> #include <kernel/filesystem/device_inode.hpp> -#include <kernel/filesystem/file_descriptor_table.hpp> -#include <kernel/filesystem/open_file_description.hpp> +#include <kernel/filesystem/open_file_descriptor.hpp> +#include <kernel/filesystem/open_file_table.hpp> #include <kernel/filesystem/vfs.hpp> #include <kernel/memory.hpp> @@ -9,6 +9,7 @@ #include <kapi/cio.hpp> #include <kapi/cpu.hpp> #include <kapi/devices.hpp> +#include <kapi/filesystem.hpp> #include <kapi/interrupts.hpp> #include <kapi/memory.hpp> #include <kapi/system.hpp> @@ -35,16 +36,16 @@ auto test_device_names() -> void }); } -auto test_file_description_manually() -> void +auto test_file_descriptor_manually() -> void { // setup - auto fd_table = kernel::filesystem::file_descriptor_table::get(); + auto fd_table = kernel::filesystem::open_file_table::get(); auto storage_mgmt = kernel::devices::storage::management::get(); auto device = storage_mgmt.device_by_major_minor(1, 0); auto dev_node = kstd::make_shared<kernel::filesystem::device_inode>(device); - auto ofd = kstd::make_shared<kernel::filesystem::open_file_description>(dev_node); + auto ofd = kstd::make_shared<kernel::filesystem::open_file_descriptor>(dev_node); auto fd_index = fd_table.add_file(ofd); // use: read two bytes and write two again @@ -70,7 +71,7 @@ auto test_file_description_manually() -> void fd_table.remove_file(fd_index); // use: read four bytes again -> two old bytes two new bytes - auto ofd1 = kstd::make_shared<kernel::filesystem::open_file_description>(dev_node); + auto ofd1 = kstd::make_shared<kernel::filesystem::open_file_descriptor>(dev_node); fd_index = fd_table.add_file(ofd1); auto fd1 = fd_table.get_file(fd_index); @@ -94,8 +95,8 @@ auto test_device_with_vfs() -> void kstd::os::panic("test code failed"); } - auto fd_table = kernel::filesystem::file_descriptor_table::get(); - auto ofd = kstd::make_shared<kernel::filesystem::open_file_description>(dentry->get_inode()); + auto fd_table = kernel::filesystem::open_file_table::get(); + auto ofd = kstd::make_shared<kernel::filesystem::open_file_descriptor>(dentry->get_inode()); auto fd = fd_table.add_file(ofd); kstd::vector<std::byte> buffer{2}; auto file = fd_table.get_file(fd); @@ -121,7 +122,7 @@ auto test_file_lookup() -> void } kstd::vector<std::byte> buffer{32}; - auto ofd = kstd::make_shared<kernel::filesystem::open_file_description>(dentry->get_inode()); + auto ofd = kstd::make_shared<kernel::filesystem::open_file_descriptor>(dentry->get_inode()); auto number_of_read_bytes = ofd->read(buffer.data(), buffer.size()); kstd::println("read bytes: {}", number_of_read_bytes); kstd::println("buffer: {::#04x}", buffer); @@ -174,8 +175,8 @@ auto run_test_code() -> void test_device_names(); kstd::println("---------------------------------"); - kstd::println("[TEST] file description manually"); - test_file_description_manually(); + kstd::println("[TEST] file descriptor manually"); + test_file_descriptor_manually(); kstd::println("---------------------------------"); kstd::println("[TEST] device with VFS"); @@ -187,6 +188,64 @@ auto run_test_code() -> void kstd::println("---------------------------------"); } +auto run_demo() -> void +{ + // 1) open a file + auto fd_1 = kapi::filesystem::open("/entrance/tickets.txt"); + if (fd_1 == -1) + { + kstd::os::panic("demo failed"); + } + + // 2) read from the file + kstd::vector<std::byte> buffer_1{10}; + auto bytes_read = kapi::filesystem::read(fd_1, buffer_1.data(), buffer_1.size()); + auto buffer_as_str = std::string_view{reinterpret_cast<char *>(buffer_1.data()), static_cast<size_t>(bytes_read)}; + kstd::println("Read {} bytes from /entrance/tickets.txt: {}", bytes_read, buffer_as_str); + + // 3) show that /entrance/information/info_1.txt is not accessible before mounting + auto fd_before_mount = kapi::filesystem::open("/entrance/information/info_1.txt"); + if (fd_before_mount == -1) + { + kstd::println("/entrance/information/info_1.txt is not accessible before mounting, as expected."); + } + + // 4) mount a new filesystem on top of /entrance + kapi::filesystem::mount("/dev/ram16", "/entrance"); + + // 5) open a file from the new filesystem + auto fd_2 = kapi::filesystem::open("/entrance/information/info_1.txt"); + if (fd_2 == -1) + { + kstd::os::panic("demo failed"); + } + + // 6) read from the new file + kstd::vector<std::byte> buffer_2{10}; + bytes_read = kapi::filesystem::read(fd_2, buffer_2.data(), buffer_2.size()); + buffer_as_str = std::string_view{reinterpret_cast<char *>(buffer_2.data()), static_cast<size_t>(bytes_read)}; + kstd::println("Read {} bytes from /entrance/information/info_1.txt: {}", bytes_read, buffer_as_str); + + // 7) open device as file + auto fd_3 = kapi::filesystem::open("/dev/ram48"); + if (fd_3 == -1) + { + kstd::os::panic("demo failed"); + } + + // 8) read from the device file + kstd::vector<std::byte> buffer_3{2}; + bytes_read = kapi::filesystem::read(fd_3, buffer_3.data(), buffer_3.size()); + kstd::println("Read {} bytes from /dev/ram48: {::#04x}", bytes_read, buffer_3); + + // 9) write to the device file + kstd::vector<std::byte> write_buffer{std::byte{0xAA}, std::byte{0xAA}}; + auto bytes_written = kapi::filesystem::write(fd_3, write_buffer.data(), write_buffer.size()); + kstd::println("Written {} bytes to /dev/ram48: {::#04x}", bytes_written, write_buffer); + + // 10) do memory dump to show that the write to the device file had an effect +} + auto main() -> int { kapi::cio::init(); @@ -215,12 +274,16 @@ auto main() -> int kernel::devices::storage::management::init(); kstd::println("[OS] Storage management initialized."); - kernel::filesystem::file_descriptor_table::init(); - kstd::println("[OS] Global file descriptor table initialized."); + kernel::filesystem::open_file_table::init(); + kstd::println("[OS] Global open file table initialized."); kernel::filesystem::vfs::init(); kstd::println("[OS] Virtual filesystem initialized."); + // TODO BA-FS26 remove demo and test code again? + // run_demo(); + + // TODO BA-FS26 remove demo and test code again? run_test_code(); kstd::println("[TEST] All tests completed."); |
