diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2025-03-17 06:23:47 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2025-03-17 06:23:47 +0100 |
| commit | 157210ca5a42d6a4eed7463eeacf5f4acf5f0cc0 (patch) | |
| tree | 4f265733c911662a37e89fe474344d91a89c232b /dev/Kernel | |
| parent | a20b5a830293fac7bf6681676c96e17810fdd1ad (diff) | |
ADD: Lift manadatory subsystem id on PE32+ kernel image, benchmarking
code too (Still WIP)
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/Kernel')
| -rw-r--r-- | dev/Kernel/HALKit/AMD64/HalKernelMain.cc | 23 | ||||
| -rw-r--r-- | dev/Kernel/src/KernelMain.cc | 107 |
2 files changed, 20 insertions, 110 deletions
diff --git a/dev/Kernel/HALKit/AMD64/HalKernelMain.cc b/dev/Kernel/HALKit/AMD64/HalKernelMain.cc index bdc09bcf..f62b77cd 100644 --- a/dev/Kernel/HALKit/AMD64/HalKernelMain.cc +++ b/dev/Kernel/HALKit/AMD64/HalKernelMain.cc @@ -4,6 +4,8 @@ ------------------------------------------- */ +#include "FSKit/NeFS.h" +#include "NewKit/Defines.h" #include <ArchKit/ArchKit.h> #include <KernelKit/UserProcessScheduler.h> #include <KernelKit/HardwareThreadScheduler.h> @@ -20,8 +22,6 @@ EXTERN_C NeOS::Char mp_user_switch_proc_stack_begin[]; EXTERN_C NeOS::rtl_ctor_kind __CTOR_LIST__[]; EXTERN_C NeOS::VoidPtr __DTOR_LIST__; -EXTERN_C NeOS::Void rtl_kernel_main(NeOS::SizeT argc, char** argv, char** envp, NeOS::SizeT envp_len); - STATIC NeOS::Void hal_init_cxx_ctors() { for (NeOS::SizeT i = 0U; i < NeOS::UserProcessScheduler::The().CurrentTeam().AsArray().Count(); ++i) @@ -39,10 +39,23 @@ STATIC NeOS::Void hal_init_cxx_ctors() } } +STATIC NeOS::UInt64 hal_rdtsc_fn() +{ + NeOS::UInt32 lo, hi; + __asm__ volatile("rdtsc" + : "=a"(lo), "=d"(hi)); + + return ((NeOS::UInt64)hi << 32) | lo; +} + +STATIC NeOS::UInt64 kStart, kEnd; + /// @brief Kernel init procedure. EXTERN_C void hal_init_platform( NeOS::HEL::BootInfoHeader* handover_hdr) { + kStart = hal_rdtsc_fn(); + kHandoverHeader = handover_hdr; if (kHandoverHeader->f_Magic != kHandoverMagic && @@ -93,7 +106,7 @@ EXTERN_C void hal_init_platform( EXTERN_C NeOS::Void hal_real_init(NeOS::Void) noexcept { - rtl_kernel_main(0, nullptr, nullptr, 0); + NeOS::NeFS::fs_init_nefs(); NeOS::HAL::mp_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr); @@ -103,6 +116,10 @@ EXTERN_C NeOS::Void hal_real_init(NeOS::Void) noexcept NeOS::HAL::IDTLoader idt_loader; + kEnd = hal_rdtsc_fn(); + + kout << "Cycles Spent: " << NeOS::number(kEnd - kStart) << kendl; + idt_loader.Load(idt_reg); while (YES) diff --git a/dev/Kernel/src/KernelMain.cc b/dev/Kernel/src/KernelMain.cc deleted file mode 100644 index 643e15bb..00000000 --- a/dev/Kernel/src/KernelMain.cc +++ /dev/null @@ -1,107 +0,0 @@ -/* ------------------------------------------- - - Copyright Amlal EL Mahrouss - - File: Main.cxx - Purpose: Main entrypoint of kernel. - -------------------------------------------- */ - -#include <KernelKit/PE.h> -#include <ArchKit/ArchKit.h> -#include <CompilerKit/Detail.h> -#include <FirmwareKit/Handover.h> -#include <KernelKit/FileMgr.h> -#include <KernelKit/MemoryMgr.h> -#include <KernelKit/PEF.h> -#include <KernelKit/PEFCodeMgr.h> -#include <KernelKit/UserProcessScheduler.h> -#include <KernelKit/MemoryMgr.h> -#include <NewKit/Json.h> -#include <NewKit/KString.h> -#include <NewKit/Utils.h> -#include <KernelKit/CodeMgr.h> -#include <CFKit/Property.h> -#include <KernelKit/Timer.h> - -/* ------------------------------------------- - - Revision History: - - 04/03/25: Add /user/ directory. - - ------------------------------------------- */ - -#ifdef __NE_AUTO_FORMAT__ -namespace NeOS::Detail -{ - /// @brief Filesystem auto formatter, additional checks are also done by the class. - class NeFilesystemInstaller final - { - private: - NeFileSystemParser* mNeFS{nullptr}; - NeFileSystemJournal mJournal; - - public: - /// @brief wizard constructor. - explicit NeFilesystemInstaller() - { - mNeFS = new NeFileSystemParser(); - - if (mNeFS) - { - const SizeT kFolderCount = 14; - const Char* kFolderStr[kFolderCount] = { - "/", "/boot/", "/sys/", "/media/", "/etc/", - "/usr/", "/lib/", "/mnt/", "/sbin/", "/n/", "/dev/", "/run/", "/root/", "/user/"}; - - for (SizeT dir_index = 0UL; dir_index < kFolderCount; ++dir_index) - { - auto catalog_folder = mNeFS->GetCatalog(kFolderStr[dir_index]); - - if (catalog_folder) - { - delete catalog_folder; - catalog_folder = nullptr; - - continue; - } - - catalog_folder = mNeFS->CreateCatalog(kFolderStr[dir_index], 0, - kNeFSCatalogKindDir); - - if (!catalog_folder) - continue; - - delete catalog_folder; - catalog_folder = nullptr; - } - - if (!mJournal.GetJournal(mNeFS)) - mJournal.CreateJournal(mNeFS); - - mJournal.CommitJournal(mNeFS, "['FS': 'NeFS', 'Type': 'AutoFormat']", "FormatLog.json"); - mJournal.ReleaseJournal(); - } - } - - ~NeFilesystemInstaller() - { - if (mNeFS) - delete mNeFS; - - mNeFS = nullptr; - } - - NE_COPY_DEFAULT(NeFilesystemInstaller); - }; -} // namespace NeOS::Detail -#endif // ifdef __NE_AUTO_FORMAT__ - -/// @brief Kernel entrypoint. -/// @param Void -/// @return Void -EXTERN_C NeOS::Void rtl_kernel_main(NeOS::SizeT argc, char** argv, char** envp, NeOS::SizeT envp_len) -{ - NeOS::NeFS::fs_init_nefs(); -} |
