summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Boot/BootKit/BootKit.hxx24
-rw-r--r--Boot/Sources/HEL/AMD64/BootMain.cxx58
-rw-r--r--Boot/Sources/HEL/AMD64/New+Delete.cxx4
-rw-r--r--Boot/Sources/ProgramLoader.cxx2
-rw-r--r--Boot/amd64-efi.make2
-rw-r--r--Kernel/HALKit/AMD64/HalDescriptorLoader.cxx2
-rw-r--r--Kernel/HALKit/AMD64/HalKernelMain.cxx53
-rw-r--r--Kernel/Modules/CoreCG/TextRenderer.hxx3
-rw-r--r--Kernel/Sources/KernelCheck.cxx22
-rw-r--r--Kernel/Sources/Main.cxx159
10 files changed, 112 insertions, 217 deletions
diff --git a/Boot/BootKit/BootKit.hxx b/Boot/BootKit/BootKit.hxx
index 1f6b7d95..680c9863 100644
--- a/Boot/BootKit/BootKit.hxx
+++ b/Boot/BootKit/BootKit.hxx
@@ -273,9 +273,9 @@ private:
constexpr auto cNewFSCatalogPadding = 4;
- NFS_CATALOG_STRUCT* catalogKind = (NFS_CATALOG_STRUCT*)bufCatalog;
- catalogKind->PrevSibling = startLba;
- catalogKind->NextSibling = (startLba + (sizeof(NFS_CATALOG_STRUCT) * cNewFSCatalogPadding));
+ NFS_CATALOG_STRUCT* catalogKind = (NFS_CATALOG_STRUCT*)bufCatalog;
+ catalogKind->PrevSibling = startLba;
+ catalogKind->NextSibling = (startLba + (sizeof(NFS_CATALOG_STRUCT) * cNewFSCatalogPadding));
/// Fill catalog kind.
catalogKind->Kind = blob->fKind;
@@ -288,6 +288,9 @@ private:
EFI::ThrowError(L"Developer-Error", L"This is caused by the developer of the bootloader.");
}
+ --partBlock.FreeCatalog;
+ --partBlock.FreeSectors;
+
writer.Write(L"newosldr: root directory: ").Write(blob->fFileName).Write(L"\r");
memcpy(catalogKind->Name, blob->fFileName, strlen(blob->fFileName));
@@ -297,11 +300,6 @@ private:
fDiskDev.Write((Char*)bufCatalog, sizeof(NFS_CATALOG_STRUCT));
- --partBlock.FreeCatalog;
- --partBlock.FreeSectors;
-
- memset(bufCatalog, 0, sizeof(NFS_CATALOG_STRUCT));
-
return true;
}
@@ -324,8 +322,8 @@ inline Boolean BDiskFormatFactory<BootDev>::Format(const char* partName,
return false; /// sanity check
/// convert the sector into something that the disk understands.
- SizeT sectorSz = BootDev::kSectorSize;
- Char buf[BootDev::kSectorSize] = {0};
+ SizeT sectorSz = BootDev::kSectorSize;
+ Char* buf = new Char[BootDev::kSectorSize];
NFS_ROOT_PARTITION_BLOCK* partBlock = reinterpret_cast<NFS_ROOT_PARTITION_BLOCK*>(buf);
@@ -340,6 +338,7 @@ inline Boolean BDiskFormatFactory<BootDev>::Format(const char* partName,
if (GIB(fDiskDev.GetDiskSize()) < cMinimumDiskSize)
{
+ delete buf;
EFI::ThrowError(L"Disk-Too-Tiny", L"Can't format a New Filesystem partition here.");
return false;
}
@@ -382,19 +381,22 @@ inline Boolean BDiskFormatFactory<BootDev>::Format(const char* partName,
CopyMem(epmBoot->Magic, reinterpret_cast<VoidPtr>(const_cast<Char*>(kEPMMagic)), StrLen(kEPMMagic));
BTextWriter writer;
- writer.Write(L"newosldr: wrote partition.\r");
+ writer.Write(L"newosldr: wrote partition with success.\r");
fDiskDev.Leak().mBase = kEpmBase;
fDiskDev.Leak().mSize = sectorSz;
fDiskDev.Write(buf, sectorSz);
+ delete buf;
return true;
}
else
{
+ delete buf;
EFI::ThrowError(L"Filesystem-Failure-Part", L"Filesystem couldn't be partitioned.");
}
+ delete buf;
return false;
}
diff --git a/Boot/Sources/HEL/AMD64/BootMain.cxx b/Boot/Sources/HEL/AMD64/BootMain.cxx
index 6aec67f5..2bc2aca1 100644
--- a/Boot/Sources/HEL/AMD64/BootMain.cxx
+++ b/Boot/Sources/HEL/AMD64/BootMain.cxx
@@ -7,6 +7,7 @@
#include <BootKit/BootKit.hxx>
#include <BootKit/Rsrc/NewBoot.rsrc>
#include <Modules/CoreCG/FbRenderer.hxx>
+#include <Modules/CoreCG/TextRenderer.hxx>
#include <FirmwareKit/EFI.hxx>
#include <FirmwareKit/EFI/API.hxx>
#include <FirmwareKit/Handover.hxx>
@@ -16,7 +17,6 @@
#include <NewKit/Macros.hxx>
#include <NewKit/Ref.hxx>
#include <BootKit/ProgramLoader.hxx>
-#include <Modules/CoreCG/TextRenderer.hxx>
#include <cstring>
// make the compiler shut up.
@@ -97,14 +97,11 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle,
.Write(BVersionString::The())
.Write("\r");
- UInt32* MapKey = new UInt32();
- UInt32* SizePtr = new UInt32();
+ UInt32 MapKey = 0;
+ UInt32 SizePtr = sizeof(EfiMemoryDescriptor);
EfiMemoryDescriptor* Descriptor = nullptr;
- UInt32* SzDesc = new UInt32();
- UInt32* RevDesc = new UInt32();
-
- *MapKey = 0;
- *SizePtr = 0;
+ UInt32 SzDesc = sizeof(EfiMemoryDescriptor);
+ UInt32 RevDesc = 0;
HEL::HandoverInformationHeader* handoverHdrPtr =
new HEL::HandoverInformationHeader();
@@ -130,6 +127,47 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle,
// Fill handover header now.
+ BS->GetMemoryMap(&SizePtr, Descriptor, &MapKey, &SzDesc, &RevDesc);
+
+ Descriptor = new EfiMemoryDescriptor[SzDesc];
+ BS->GetMemoryMap(&SizePtr, Descriptor, &MapKey, &SzDesc, &RevDesc);
+
+ auto cDefaultMemoryMap = 0; // The sixth entry.
+
+ //-----------------------------------------------------------//
+ // A simple loop which finds a usable memory region for us.
+ //-----------------------------------------------------------//
+
+ SizeT lookIndex = 0UL;
+
+ for (; Descriptor[lookIndex].Kind != EfiMemoryType::EfiConventionalMemory; ++lookIndex)
+ {
+ ;
+ }
+
+ cDefaultMemoryMap = lookIndex;
+
+ //-----------------------------------------------------------//
+ // Update handover file specific table and phyiscal start field.
+ //-----------------------------------------------------------//
+
+ handoverHdrPtr->f_PhysicalStart =
+ (VoidPtr)Descriptor[cDefaultMemoryMap].PhysicalStart;
+
+ handoverHdrPtr->f_FirmwareSpecific[HEL::kHandoverSpecificAttrib] =
+ Descriptor[cDefaultMemoryMap].Attribute;
+ handoverHdrPtr->f_FirmwareSpecific[HEL::kHandoverSpecificKind] =
+ Descriptor[cDefaultMemoryMap].Kind;
+ handoverHdrPtr->f_FirmwareSpecific[HEL::kHandoverSpecificMemoryEfi] =
+ (UIntPtr)Descriptor;
+
+ handoverHdrPtr->f_VirtualStart =
+ (VoidPtr)Descriptor[cDefaultMemoryMap].VirtualStart;
+ handoverHdrPtr->f_VirtualSize =
+ Descriptor[cDefaultMemoryMap].NumberOfPages; /* # of pages */
+
+ handoverHdrPtr->f_FirmwareVendorLen = BStrLen(SystemTable->FirmwareVendor);
+
handoverHdrPtr->f_Magic = kHandoverMagic;
handoverHdrPtr->f_Version = kHandoverVersion;
@@ -164,7 +202,7 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle,
// ---------------------------------------------------- //
BFileReader readerKernel(L"newoskrnl.dll", ImageHandle);
-
+
readerKernel.ReadAll(0);
Boot::ProgramLoader* loader = nullptr;
@@ -185,7 +223,7 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle,
handoverHdrPtr->f_FirmwareVendorLen = BStrLen(SystemTable->FirmwareVendor);
- EFI::ExitBootServices(*MapKey, ImageHandle);
+ EFI::ExitBootServices(MapKey, ImageHandle);
// ---------------------------------------------------- //
// Call kernel.
diff --git a/Boot/Sources/HEL/AMD64/New+Delete.cxx b/Boot/Sources/HEL/AMD64/New+Delete.cxx
index 62dcda35..b651f091 100644
--- a/Boot/Sources/HEL/AMD64/New+Delete.cxx
+++ b/Boot/Sources/HEL/AMD64/New+Delete.cxx
@@ -19,7 +19,9 @@ EXTERN EfiBootServices* BS;
void* operator new(size_t sz)
{
void* buf = nullptr;
- BS->AllocatePool(EfiMemoryType::EfiLoaderData, sz, &buf);
+
+ while (BS->AllocatePool(EfiMemoryType::EfiLoaderData, sz, &buf) == kBufferTooSmall)
+ BS->FreePool(buf);
return buf;
}
diff --git a/Boot/Sources/ProgramLoader.cxx b/Boot/Sources/ProgramLoader.cxx
index 6568f0aa..bdd54383 100644
--- a/Boot/Sources/ProgramLoader.cxx
+++ b/Boot/Sources/ProgramLoader.cxx
@@ -41,7 +41,7 @@ namespace Boot
if (firstBytes[0] == kMagMz0 &&
firstBytes[1] == kMagMz1)
{
- writer.Write("newosldr: Windows executable detected.\r");
+ writer.Write("newosldr: PE32+ executable detected.\r");
ExecHeaderPtr hdrPtr = ldr_find_exec_header(firstBytes);
ExecOptionalHeaderPtr optHdr = ldr_find_opt_exec_header(firstBytes);
diff --git a/Boot/amd64-efi.make b/Boot/amd64-efi.make
index f11d68e3..b8d5b771 100644
--- a/Boot/amd64-efi.make
+++ b/Boot/amd64-efi.make
@@ -29,7 +29,7 @@ IMG=epm-master-1.img
IMG_2=epm-slave.img
IMG_3=epm-master-2.img
-EMU_FLAGS=-net none -smp 2 -m 4G -M q35 \
+EMU_FLAGS=-net none -smp 2 -m 6G -M q35 \
-bios $(BIOS) -device piix3-ide,id=ide \
-drive id=disk,file=$(IMG),format=raw,if=none \
-device ide-hd,drive=disk,bus=ide.0 -drive \
diff --git a/Kernel/HALKit/AMD64/HalDescriptorLoader.cxx b/Kernel/HALKit/AMD64/HalDescriptorLoader.cxx
index 62d31a40..99776265 100644
--- a/Kernel/HALKit/AMD64/HalDescriptorLoader.cxx
+++ b/Kernel/HALKit/AMD64/HalDescriptorLoader.cxx
@@ -61,7 +61,7 @@ namespace Kernel::HAL
{
MUST_PASS(baseIdt[i]);
- Detail::kInterruptVectorTable[i].Selector = (i == kSyscallRoute) ? ((3 * 8) | 3) : kGdtCodeSelector;
+ Detail::kInterruptVectorTable[i].Selector = kGdtCodeSelector;
Detail::kInterruptVectorTable[i].Ist = 0x0;
Detail::kInterruptVectorTable[i].TypeAttributes = kInterruptGate;
Detail::kInterruptVectorTable[i].OffsetLow = ((UIntPtr)baseIdt[i] & __INT16_MAX__);
diff --git a/Kernel/HALKit/AMD64/HalKernelMain.cxx b/Kernel/HALKit/AMD64/HalKernelMain.cxx
index 0ed63569..020ee59d 100644
--- a/Kernel/HALKit/AMD64/HalKernelMain.cxx
+++ b/Kernel/HALKit/AMD64/HalKernelMain.cxx
@@ -21,16 +21,9 @@
#include <CFKit/Property.hxx>
#include <Modules/CoreCG/TextRenderer.hxx>
-#define mInitKernel(X) \
- X; \
- Kernel::ke_stop(RUNTIME_CHECK_BOOTSTRAP);
-
Kernel::Property cKernelVersion;
Kernel::Property cAutoFormatDisk;
-/// @brief This symbol is the kernel main symbol.
-EXTERN_C void KeMain();
-
EXTERN_C Kernel::VoidPtr kInterruptVectorTable[];
struct HEAP_ALLOC_INFO final
@@ -72,6 +65,8 @@ STATIC Kernel::HAL::Detail::NewOSGDT cGdt = {
{0, 0, 0, 0x92, 0xaf, 0}, // user data
};
+void hal_real_init(void);
+
EXTERN_C void hal_init_platform(
Kernel::HEL::HandoverInformationHeader* HandoverHeader)
{
@@ -87,17 +82,23 @@ EXTERN_C void hal_init_platform(
cg_write_text("NEWOSKRNL (C) ZKA TECHNOLOGIES.", kTextOffsetY, 10, RGB(0x00, 0x00, 0x00));
kTextOffsetY += 10;
-
cg_write_text("SMP OS (MAX 8 CORES).", kTextOffsetY, 10, RGB(0x00, 0x00, 0x00));
- kKernelVirtualSize = HandoverHeader->f_VirtualSize;
+ hal_real_init();
+}
+
+void hal_real_init(void)
+{
+ kKernelVirtualSize = kHandoverHeader->f_VirtualSize;
kKernelVirtualStart = reinterpret_cast<Kernel::VoidPtr>(
- reinterpret_cast<Kernel::UIntPtr>(HandoverHeader->f_VirtualStart) + cHeapStartOffset);
+ reinterpret_cast<Kernel::UIntPtr>(kHandoverHeader->f_VirtualStart) + cHeapStartOffset);
- kKernelPhysicalStart = HandoverHeader->f_PhysicalStart;
+ kKernelPhysicalStart = kHandoverHeader->f_PhysicalStart;
- // Load memory descriptors.
+ kTextOffsetY += 10;
+ cg_write_text("LOADING INTERRUPTS...", kTextOffsetY, 10, RGB(0x00, 0x00, 0x00));
+ // Load memory descriptors.
Kernel::HAL::RegisterGDT gdtBase;
gdtBase.Base = reinterpret_cast<Kernel::UIntPtr>(&cGdt);
@@ -117,6 +118,9 @@ EXTERN_C void hal_init_platform(
// Register the basic SCI functions.
+ kTextOffsetY += 10;
+ cg_write_text("LOADING SYSCALLS...", kTextOffsetY, 10, RGB(0x00, 0x00, 0x00));
+
constexpr auto cVGAWrite = 0x10;
constexpr auto cTlsInterrupt = 0x11;
constexpr auto cTlsInstallInterrupt = 0x12;
@@ -226,17 +230,8 @@ EXTERN_C void hal_init_platform(
kSyscalls[cRebootInterrupt].Leak().Leak()->fHooked = true;
kSyscalls[cLPCSanitizeMsg].Leak().Leak()->fHooked = true;
- // newoskrnl version 1.00.
- Kernel::StringView strVer(cMaxPropLen);
- strVer += "\\Properties\\KernelVersion";
-
- cKernelVersion.GetKey() = strVer;
- cKernelVersion.GetValue() = __MAHROUSS_VER__;
-
- Kernel::StringView strAutoMount(cMaxPropLen);
- strAutoMount += "\\Properties\\AutoMountFS?";
-
- cAutoFormatDisk.GetKey() = strAutoMount;
+ kTextOffsetY += 10;
+ cg_write_text("LOADING SMP...", kTextOffsetY, 10, RGB(0x00, 0x00, 0x00));
for (size_t i = 0; i < cMaxCmdLine; i++)
{
@@ -247,14 +242,8 @@ EXTERN_C void hal_init_platform(
}
}
- for (size_t i = 0; i < cMaxCmdLine; i++)
- {
- if (Kernel::rt_string_cmp(kHandoverHeader->f_CommandLine[i], "/SMP", Kernel::rt_string_len("/SMP")) == 0)
- {
- Kernel::HAL::hal_system_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr);
- break;
- }
- }
+ kTextOffsetY += 10;
+ cg_write_text("LOADING SUBSYSTEMS...", kTextOffsetY, 10, RGB(0x00, 0x00, 0x00));
- mInitKernel(KeMain());
+ Kernel::ke_stop(RUNTIME_CHECK_BOOTSTRAP);
}
diff --git a/Kernel/Modules/CoreCG/TextRenderer.hxx b/Kernel/Modules/CoreCG/TextRenderer.hxx
index 2ea46b3f..eada9b9f 100644
--- a/Kernel/Modules/CoreCG/TextRenderer.hxx
+++ b/Kernel/Modules/CoreCG/TextRenderer.hxx
@@ -166,7 +166,8 @@ inline Kernel::Void cg_write_text(const Kernel::Char* text, Kernel::Int32 x_dst,
if (text[i] == '\r' ||
text[i] == '\n')
{
- x_dst += FONT_SIZE_X;
+ y_dst += FONT_SIZE_Y;
+
continue;
}
diff --git a/Kernel/Sources/KernelCheck.cxx b/Kernel/Sources/KernelCheck.cxx
index d33002bd..defe6841 100644
--- a/Kernel/Sources/KernelCheck.cxx
+++ b/Kernel/Sources/KernelCheck.cxx
@@ -11,6 +11,10 @@
#include <FirmwareKit/Handover.hxx>
#include <Modules/ACPI/ACPIFactoryInterface.hxx>
+#include <Modules/CoreCG/Accessibility.hxx>
+#include <Modules/CoreCG/FbRenderer.hxx>
+#include <Modules/CoreCG/TextRenderer.hxx>
+
EXTERN_C [[noreturn]] Kernel::Void ke_wait_for_debugger()
{
while (Yes)
@@ -29,6 +33,24 @@ namespace Kernel
{
void ke_stop(const Kernel::Int& id)
{
+ CGInit();
+
+ auto panicBack = RGB(0xDC, 0xF5, 0xF5);
+ auto panicTxt = RGB(0, 0, 0);
+
+ CGDrawInRegion(panicBack, UIAccessibilty::The().Height(), UIAccessibilty::The().Width(), 0, 0);
+
+ auto start_y = 10;
+ auto x = 10;
+
+ cg_write_text("*** Kernel panic! ***\rnewoskrnl.dll stopped working properly so we had to shut it down.", start_y, x, panicTxt);
+
+ CGFini();
+
+ // ******* //
+ // shows in debug only.
+ // ******* //
+
kcout << "*** STOP *** \r";
kcout << "*** Kernel has trigerred a runtime stop. *** \r";
diff --git a/Kernel/Sources/Main.cxx b/Kernel/Sources/Main.cxx
deleted file mode 100644
index ac6d3fe7..00000000
--- a/Kernel/Sources/Main.cxx
+++ /dev/null
@@ -1,159 +0,0 @@
-/* -------------------------------------------
-
- Copyright ZKA Technologies
-
- File: Main.cxx
- Purpose: Main entrypoint of kernel.
-
-------------------------------------------- */
-
-#include <ArchKit/ArchKit.hxx>
-#include <Modules/CoreCG/FbRenderer.hxx>
-#include <CompilerKit/Detail.hxx>
-#include <FirmwareKit/Handover.hxx>
-#include <KernelKit/FileManager.hxx>
-#include <KernelKit/Framebuffer.hxx>
-#include <KernelKit/Heap.hxx>
-#include <KernelKit/PEF.hxx>
-#include <KernelKit/PEFCodeManager.hxx>
-#include <KernelKit/ProcessScheduler.hxx>
-#include <KernelKit/ProcessHeap.hxx>
-#include <NewKit/Json.hxx>
-#include <NewKit/KernelCheck.hxx>
-#include <NewKit/String.hxx>
-#include <NewKit/Utils.hxx>
-#include <KernelKit/CodeManager.hxx>
-#include <CFKit/Property.hxx>
-
-EXTERN Kernel::Property cKernelVersion;
-EXTERN Kernel::Property cAutoFormatDisk;
-
-namespace Kernel::Detail
-{
- /// @brief Filesystem auto formatter, additional checks are also done by the class.
- class FilesystemInstaller final
- {
- Kernel::NewFilesystemManager* fNewFS{nullptr};
-
- public:
- /// @brief wizard constructor.
- explicit FilesystemInstaller()
- {
- if (cAutoFormatDisk.GetValue() == No)
- {
- return;
- }
-
- if (Kernel::FilesystemManagerInterface::GetMounted())
- {
- // Partition is mounted, cool!
- Kernel::kcout
- << "newoskrnl: No need to create for a new NewFS (EPM) partition here...\r";
- }
- else
- {
- // Mounts a NewFS from main drive.
- fNewFS = new Kernel::NewFilesystemManager();
-
- Kernel::FilesystemManagerInterface::Mount(fNewFS);
-
- if (fNewFS->GetParser())
- {
- constexpr auto cFolderInfo = "META-INF";
- const auto cDirCount = 7;
- const char* cDirStr[cDirCount] = {
- "\\Boot\\", "\\System\\", "\\Support\\", "\\Applications\\",
- "\\Users\\", "\\Library\\", "\\Mounted\\"};
-
- for (Kernel::SizeT dirIndx = 0UL; dirIndx < cDirCount; ++dirIndx)
- {
- auto catalogDir = fNewFS->GetParser()->GetCatalog(cDirStr[dirIndx]);
-
- if (catalogDir)
- {
- Kernel::kcout << "newoskrnl: already exists.\r";
-
- delete catalogDir;
- continue;
- }
-
- catalogDir = fNewFS->GetParser()->CreateCatalog(cDirStr[dirIndx], 0,
- kNewFSCatalogKindDir);
-
- NFS_FORK_STRUCT theFork{0};
-
- const Kernel::Char* cSrcName = cFolderInfo;
-
- Kernel::rt_copy_memory((Kernel::VoidPtr)(cSrcName), theFork.ForkName,
- Kernel::rt_string_len(cSrcName));
-
- Kernel::rt_copy_memory((Kernel::VoidPtr)(catalogDir->Name),
- theFork.CatalogName,
- Kernel::rt_string_len(catalogDir->Name));
-
- delete catalogDir;
-
- theFork.DataSize = kNewFSForkSize;
- theFork.ResourceId = 0;
- theFork.ResourceKind = Kernel::kNewFSRsrcForkKind;
- theFork.Kind = Kernel::kNewFSDataForkKind;
-
- Kernel::StringView metadataFolder(kNewFSSectorSz);
-
- metadataFolder +=
- "<!properties/>\r<p>Kind: folder</p>\r<p>Created by: system</p>\r<p>Edited by: "
- "system</p>\r<p>Volume Type: ZKA Filesystem</p>\r";
-
- metadataFolder += "<p>Path: ";
- metadataFolder += cDirStr[dirIndx];
- metadataFolder += "</p>\r";
-
- const Kernel::SizeT metadataSz = kNewFSSectorSz;
-
- auto catalogSystem = fNewFS->GetParser()->GetCatalog(cDirStr[dirIndx]);
-
- fNewFS->GetParser()->CreateFork(catalogSystem, theFork);
-
- fNewFS->GetParser()->WriteCatalog(
- catalogSystem, (Kernel::VoidPtr)(metadataFolder.CData()),
- metadataSz, cFolderInfo);
-
- delete catalogSystem;
- }
- }
- }
- }
-
- ~FilesystemInstaller() = default;
-
- NEWOS_COPY_DEFAULT(FilesystemInstaller);
-
- /// @brief Grab the disk's NewFS reference.
- /// @return NewFilesystemManager the filesystem interface
- Kernel::NewFilesystemManager* Leak()
- {
- return fNewFS;
- }
- };
-
- /// @brief Loads necessary servers for the kernel -> user mode switch.
- /// @param void no args.
- /// @return void no return value.
- STATIC Kernel::Void ke_user_switch(Kernel::Void)
- {
- Kernel::UserManager::The()->fRootUser = new User(RingKind::kRingSuperUser, kSuperUser);
- Kernel::UserManager::The()->LogIn(Kernel::UserManager::The()->fRootUser, "root");
-
- Kernel::kcout << "newoskrnl: " << cKernelVersion.GetKey().CData() << ": " << Kernel::number(cKernelVersion.GetValue()) << Kernel::endl;
- }
-} // namespace Kernel::Detail
-
-/// @brief Application entrypoint.
-/// @param Void
-/// @return Void
-EXTERN_C Kernel::Void KeMain(Kernel::Void)
-{
- /// Now run kernel loop, until no process are running.
- Kernel::Detail::FilesystemInstaller(); // automatic filesystem creation.
- Kernel::Detail::ke_user_switch();
-}