diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-03-31 11:00:59 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-03-31 11:00:59 +0200 |
| commit | aa595fad9c8062910778bd6fa01ee487eab1a3e9 (patch) | |
| tree | 2faa45d3984d15b2742a3657af6ab31f25bcfab3 /dev/boot/src | |
| parent | b91ada1d1fec572ee5d7ae9b98ff54ac929c7a72 (diff) | |
boot: fix framebuffer init and restore boot on real hardware
Framebuffer mode selection now defaults gracefully when the expected resolution is unavailable.
EFI binaries now boot successfully on physical hardware using a fixed image base and simplified jump logic.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/boot/src')
| -rw-r--r-- | dev/boot/src/BootloaderRsrc.rsrc | 2 | ||||
| -rw-r--r-- | dev/boot/src/HEL/AMD64/BootAPI.S | 9 | ||||
| -rw-r--r-- | dev/boot/src/HEL/AMD64/BootEFI.cc | 32 | ||||
| -rw-r--r-- | dev/boot/src/HEL/ARM64/BootEFI.cc | 4 |
4 files changed, 28 insertions, 19 deletions
diff --git a/dev/boot/src/BootloaderRsrc.rsrc b/dev/boot/src/BootloaderRsrc.rsrc index 96953911..c634a8f6 100644 --- a/dev/boot/src/BootloaderRsrc.rsrc +++ b/dev/boot/src/BootloaderRsrc.rsrc @@ -13,7 +13,7 @@ BEGIN VALUE "FileVersion", BOOTLOADER_VERSION VALUE "InternalName", "bootz" VALUE "LegalCopyright", "Copyright (C) 2024, Amlal El Mahrouss all rights reserved." - VALUE "OriginalFilename", "bootz.exe" + VALUE "OriginalFilename", "bootz.efi" VALUE "ProductName", "bootz" VALUE "ProductVersion", BOOTLOADER_VERSION END diff --git a/dev/boot/src/HEL/AMD64/BootAPI.S b/dev/boot/src/HEL/AMD64/BootAPI.S index 963ef46a..c4a7ad39 100644 --- a/dev/boot/src/HEL/AMD64/BootAPI.S +++ b/dev/boot/src/HEL/AMD64/BootAPI.S @@ -11,15 +11,10 @@ rt_jump_to_address: mov rbx, rcx mov rcx, rdx - push rbx - push rdx mov rsp, r8 - push rax - jmp rbx - pop rdx - pop rbx - pop rax + cli + jmp rbx ret diff --git a/dev/boot/src/HEL/AMD64/BootEFI.cc b/dev/boot/src/HEL/AMD64/BootEFI.cc index fba3d227..7b912025 100644 --- a/dev/boot/src/HEL/AMD64/BootEFI.cc +++ b/dev/boot/src/HEL/AMD64/BootEFI.cc @@ -20,15 +20,15 @@ // Makes the compiler shut up. #ifndef kMachineModel -#define kMachineModel "ZkaOS" +#define kMachineModel "NeKernel" #endif // !kMachineModel #ifndef kExpectedWidth -#define kExpectedWidth (1280) +#define kExpectedWidth (800) #endif #ifndef kExpectedHeight -#define kExpectedHeight (720) +#define kExpectedHeight (600) #endif /** Graphics related. */ @@ -98,7 +98,12 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle, #ifdef ZBA_USE_FB if (!boot_init_fb()) - return 1; ///! Init the GOP. + { + Boot::BootTextWriter writer; + writer.Write("BootZ: Invalid Framebuffer, can't boot NeKernel.\r"); + + CANT_REACH(); + } for (SizeT index_vt = 0; index_vt < sys_table->NumberOfTableEntries; ++index_vt) @@ -207,7 +212,7 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle, // ------------------------------------------ // #if defined(__ATA_PIO__) - Boot::BootFileReader reader_syschk(L"chk.sys", image_handle); + Boot::BootFileReader reader_syschk(L"chk.efi", image_handle); reader_syschk.ReadAll(0); Boot::BootThread* syschk_thread = nullptr; @@ -266,7 +271,7 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle, handover_hdr->f_FirmwareVendorLen = Boot::BStrLen(sys_table->FirmwareVendor); // Assign to global 'kHandoverHeader'. - WideChar kernel_path[256U] = L"vkrnl.exe"; + WideChar kernel_path[256U] = L"vmkrnl.efi"; UInt32 kernel_path_sz = 256U; if (ST->RuntimeServices->GetVariable(L"/props/boot_path", kEfiGlobalNamespaceVarGUID, nullptr, &kernel_path_sz, kernel_path) != kEfiOk) @@ -283,6 +288,15 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle, ST->RuntimeServices->GetVariable(L"/props/kern_ver", kEfiGlobalNamespaceVarGUID, nullptr, &sz_ver, &ver); Boot::BootTextWriter writer; + + if (ver != KERNEL_VERSION_BCD) + { + ver = KERNEL_VERSION_BCD; + + ST->RuntimeServices->SetVariable(L"/props/kern_ver", kEfiGlobalNamespaceVarGUID, nullptr, &sz_ver, &ver); + writer.Write("BootZ: Kernel Version Updated: ").Write(ver).Write("\r"); + } + writer.Write("BootZ: Kernel Version: ").Write(ver).Write("\r"); Boot::BootFileReader reader_kernel(kernel_path, image_handle); @@ -310,17 +324,17 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle, Boot::Stop(); } - Boot::BootFileReader reader_netboot(L"net.sys", image_handle); + Boot::BootFileReader reader_netboot(L"net.efi", image_handle); reader_netboot.ReadAll(0); Boot::BootThread* netboot_thread = nullptr; - Boot::ExitBootServices(map_key, image_handle); - // ---------------------------------------------------- // // Finally load the OS kernel. // ---------------------------------------------------- // + Boot::ExitBootServices(map_key, image_handle); + if (kernel_thread->Start(handover_hdr, YES) != kEfiOk) { // ------------------------------------------ // diff --git a/dev/boot/src/HEL/ARM64/BootEFI.cc b/dev/boot/src/HEL/ARM64/BootEFI.cc index 5016214f..6839c2ec 100644 --- a/dev/boot/src/HEL/ARM64/BootEFI.cc +++ b/dev/boot/src/HEL/ARM64/BootEFI.cc @@ -20,7 +20,7 @@ // Makes the compiler shut up. #ifndef kMachineModel -#define kMachineModel "ZkaOS" +#define kMachineModel "NeKernel" #endif // !kMachineModel #ifndef kExpectedWidth @@ -196,7 +196,7 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle, // Assign to global 'kHandoverHeader'. - Boot::BootFileReader reader_kernel(L"vkrnl.exe", image_handle); + Boot::BootFileReader reader_kernel(L"vmkrnl.efi", image_handle); reader_kernel.ReadAll(0); |
