Verify kernel and boot loader compatibility

This commit is contained in:
2023-11-22 17:22:57 +01:00
parent c66ea77a8b
commit d8403d01f5
5 changed files with 36 additions and 30 deletions

View File

@@ -23,29 +23,36 @@ XTAPI
VOID
KeStartXtSystem(IN PKERNEL_INITIALIZATION_BLOCK Parameters)
{
/* Check if debugging enabled and if boot loader provided routine for debug printing */
if(DEBUG && Parameters->LoaderInformation.DbgPrint)
{
/* Use loader's provided DbgPrint() routine for early printing to serial console */
KeDbgPrint = Parameters->LoaderInformation.DbgPrint;
}
/* Print some message to serial console and test kernel parameters */
DebugPrint(L"Hello world from ExectOS kernel!\n");
DebugPrint(L"\n\n------ Kernel parameters block ------\n"
L"Loader block size: %lu\n"
L"Loader block version: %lu\n"
L"EFI Revision: %lu\n",
Parameters->Size,
Parameters->Version,
Parameters->FirmwareInformation.EfiFirmware.EfiVersion
);
/* Save the kernel initialization block */
KeInitializationBlock = Parameters;
/* Verify kernel and boot loader compatibility */
if(KeInitializationBlock->BlockSize != sizeof(KERNEL_INITIALIZATION_BLOCK) ||
KeInitializationBlock->BlockVersion != INITIALIZATION_BLOCK_VERSION ||
KeInitializationBlock->ProtocolVersion != BOOT_PROTOCOL_VERSION)
{
/* Kernel and boot loader version mismatch */
for(;;)
{
/* Halt system */
ArClearInterruptFlag();
ArHalt();
}
}
/* Check if debugging enabled and if boot loader provided routine for debug printing */
if(DEBUG && KeInitializationBlock->LoaderInformation.DbgPrint)
{
/* Use loader's provided DbgPrint() routine for early printing to serial console */
KeDbgPrint = KeInitializationBlock->LoaderInformation.DbgPrint;
}
/* Announce kernel startup */
DebugPrint(L"Starting ExectOS v%d.%d (%s-%s-%s-%s / %s %s)\n",
XTOS_VERSION_MAJOR, XTOS_VERSION_MINOR, XTOS_VERSION_DATE,
XTOS_VERSION_BUILD, XTOS_VERSION_ARCH, XTOS_VERSION_HASH,
XTOS_COMPILER_NAME, XTOS_COMPILER_VERSION);
/* Initialize boot CPU */
ArInitializeProcessor();