summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-03-17 06:23:47 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-03-17 06:23:47 +0100
commit157210ca5a42d6a4eed7463eeacf5f4acf5f0cc0 (patch)
tree4f265733c911662a37e89fe474344d91a89c232b
parenta20b5a830293fac7bf6681676c96e17810fdd1ad (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>
-rw-r--r--dev/Boot/amd64-desktop.make2
-rw-r--r--dev/Boot/src/BootThread.cc6
-rw-r--r--dev/Boot/src/HEL/AMD64/BootEFI.cc2
-rw-r--r--dev/Kernel/HALKit/AMD64/HalKernelMain.cc23
-rw-r--r--dev/Kernel/src/KernelMain.cc107
5 files changed, 22 insertions, 118 deletions
diff --git a/dev/Boot/amd64-desktop.make b/dev/Boot/amd64-desktop.make
index 2a67f2f2..c1564b77 100644
--- a/dev/Boot/amd64-desktop.make
+++ b/dev/Boot/amd64-desktop.make
@@ -113,7 +113,7 @@ compile-amd64:
.PHONY: run-efi-amd64-ahci
run-efi-amd64-ahci:
- $(EMU) $(EMU_FLAGS) -hda $(IMG) -s -S -trace ahci_* -boot menu=on
+ $(EMU) $(EMU_FLAGS) -d int -hda $(IMG) -s -S -trace ahci_* -boot menu=on
.PHONY: run-efi-amd64-ata-pio
run-efi-amd64-ata-pio:
diff --git a/dev/Boot/src/BootThread.cc b/dev/Boot/src/BootThread.cc
index 93ebd9ac..8b136ba3 100644
--- a/dev/Boot/src/BootThread.cc
+++ b/dev/Boot/src/BootThread.cc
@@ -63,12 +63,6 @@ namespace Boot
}
#endif // __NE_AMD64__ || __NE_ARM64__
- if (opt_header_ptr->mSubsystem != kNeKernelSubsystem)
- {
- writer.Write("BootZ: Not a NeKernel Subsystem executable.\r");
- return;
- }
-
writer.Write("BootZ: PE32+ executable detected (NeKernel Subsystem).\r");
auto numSecs = header_ptr->mNumberOfSections;
diff --git a/dev/Boot/src/HEL/AMD64/BootEFI.cc b/dev/Boot/src/HEL/AMD64/BootEFI.cc
index 84a4a777..1f518418 100644
--- a/dev/Boot/src/HEL/AMD64/BootEFI.cc
+++ b/dev/Boot/src/HEL/AMD64/BootEFI.cc
@@ -218,7 +218,7 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle,
syschk_thread->Start(handover_hdr, NO);
}
-#ifndef __AHCI__
+#if defined(__ATA_PIO__)
Boot::BDiskFormatFactory<BootDeviceATA> partition_factory;
if (syschk_thread->Start(handover_hdr, NO) != kEfiOk)
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();
-}