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 | |
| 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')
| -rw-r--r-- | dev/boot/amd64-ci.make | 12 | ||||
| -rw-r--r-- | dev/boot/amd64-desktop.make | 16 | ||||
| -rw-r--r-- | dev/boot/arm64-desktop.make | 10 | ||||
| -rw-r--r-- | dev/boot/modules/BootNet/amd64.json | 2 | ||||
| -rw-r--r-- | dev/boot/modules/SysChk/amd64.json | 2 | ||||
| -rw-r--r-- | dev/boot/modules/SysChk/arm64.json | 2 | ||||
| -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 | ||||
| -rw-r--r-- | dev/ddk/docs/SPECIFICATION_DDK.md | 2 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/PEF.h | 2 | ||||
| -rw-r--r-- | dev/kernel/SwapKit/DiskSwap.h | 2 | ||||
| -rw-r--r-- | dev/kernel/amd64-ci.make | 2 | ||||
| -rw-r--r-- | dev/kernel/amd64-desktop.make | 2 | ||||
| -rw-r--r-- | dev/kernel/arm64-desktop.make | 2 | ||||
| -rw-r--r-- | dev/kernel/kernel_rsrc.rsrc | 2 | ||||
| -rw-r--r-- | dev/kernel/src/FS/NeFS.cc | 2 |
18 files changed, 58 insertions, 49 deletions
diff --git a/dev/boot/amd64-ci.make b/dev/boot/amd64-ci.make index 6134e79c..ed73f3d3 100644 --- a/dev/boot/amd64-ci.make +++ b/dev/boot/amd64-ci.make @@ -28,7 +28,7 @@ BIOS=OVMF.fd IMG=epm-master-1.img IMG_2=epm-master-2.img -BOOT=./src/neos_esp.img +BOOT=./src/nekernel-esp.img DISK_DRV = @@ -71,10 +71,10 @@ FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mno-red-zone -D__NEOSKRNL__ -D__BOOTZ__ -DEFI_FUNCTION_WRAPPER -I./ -I../kernel $(DISK_DRV) -I../ -c -nostdlib -fno-rtti -fno-exceptions \ -std=c++20 -DBOOTZ_GPT_SUPPORT -DBOOTZ_EPM_SUPPORT -D__HAVE_NE_APIS__ -DZBA_USE_FB -D__NE_AMD64__ -D__NE__ -DNE_AUTO_FORMAT -BOOTLOADER=bootz.exe -KERNEL=vkrnl.exe -SYSCHK=chk.sys -NETBOOT=net.sys +BOOTLOADER=bootz.efi +KERNEL=vmkrnl.efi +SYSCHK=chk.efi +BOOTNET=net.efi SCIKIT=libuser.dylib .PHONY: invalid-recipe @@ -132,7 +132,7 @@ efi: $(HTTP_GET) https://retrage.github.io/edk2-nightly/bin/DEBUGX64_OVMF.fd -O OVMF.fd BINS=*.bin -EXECUTABLES=bootz.exe vkrnl.exe OVMF.fd +EXECUTABLES=bootz.efi vmkrnl.efi OVMF.fd TARGETS=$(REM_FLAG) $(OBJ) $(BIN) $(IMG) $(IMG_2) $(EXECUTABLES) diff --git a/dev/boot/amd64-desktop.make b/dev/boot/amd64-desktop.make index 6a8cb3f9..6e92330e 100644 --- a/dev/boot/amd64-desktop.make +++ b/dev/boot/amd64-desktop.make @@ -28,7 +28,7 @@ BIOS=OVMF.fd IMG=epm-master-1.img IMG_2=epm-master-2.img -BOOT=./src/neos_esp.img +BOOT=./src/nekernel-esp.img DISK_DRV = @@ -69,12 +69,12 @@ REM_FLAG=-f FLAG_ASM=-f win64 FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mno-red-zone -D__NEOSKRNL__ -D__BOOTZ__ \ -DEFI_FUNCTION_WRAPPER -I./ -I../kernel $(DISK_DRV) -I../ -c -nostdlib -fno-rtti -fno-exceptions \ - -std=c++20 -DBOOTZ_GPT_SUPPORT -DBOOTZ_EPM_SUPPORT -D__HAVE_NE_APIS__ -DZBA_USE_FB -D__NE_AMD64__ -D__NE__ -DNE_AUTO_FORMAT + -std=c++20 -DBOOTZ_GPT_SUPPORT -DBOOTZ_EPM_SUPPORT -D__HAVE_NE_APIS__ -DZBA_USE_FB -D__NE_AMD64__ -D__NE__ -DNE_AUTO_FORMAT -Wl,--disable-reloc-section -BOOTLOADER=bootz.exe -KERNEL=vkrnl.exe -SYSCHK=chk.sys -NETBOOT=net.sys +BOOTLOADER=bootz.efi +KERNEL=vmkrnl.efi +SYSCHK=chk.efi +BOOTNET=net.efi SCIKIT=libuser.dylib .PHONY: invalid-recipe @@ -90,7 +90,7 @@ all: compile-amd64 $(COPY) src/$(BOOTLOADER) src/Root/EFI/BOOT/BOOTZ.EFI $(COPY) ../kernel/$(KERNEL) src/Root/$(KERNEL) $(COPY) ./modules/SysChk/$(SYSCHK) src/Root/$(SYSCHK) - $(COPY) ./modules/BootNet/$(NETBOOT) src/Root/$(NETBOOT) + $(COPY) ./modules/BootNet/$(BOOTNET) src/Root/$(BOOTNET) $(COPY) ../user/$(SCIKIT) src/Root/$(SCIKIT) $(COPY) src/$(BOOTLOADER) src/Root/$(BOOTLOADER) @@ -138,7 +138,7 @@ efi: $(HTTP_GET) https://retrage.github.io/edk2-nightly/bin/DEBUGX64_OVMF.fd -O OVMF.fd BINS=*.bin -EXECUTABLES=bootz.exe vkrnl.exe OVMF.fd +EXECUTABLES=bootz.efi vmkrnl.efi OVMF.fd TARGETS=$(REM_FLAG) $(OBJ) $(BIN) $(IMG) $(IMG_2) $(EXECUTABLES) diff --git a/dev/boot/arm64-desktop.make b/dev/boot/arm64-desktop.make index 376ae622..d17c2ae2 100644 --- a/dev/boot/arm64-desktop.make +++ b/dev/boot/arm64-desktop.make @@ -47,10 +47,10 @@ FLAG_GNU=-fshort-wchar -c -ffreestanding -MMD -mno-red-zone -D__NE_ARM64__ -fno- -target aarch64-unknown-windows \ -std=c++20 -DBOOTZ_EPM_SUPPORT -DZBA_USE_FB -D__FSKIT_USE_NEFS__ -D__BOOTZ_STANDALONE__ -D__NEOSKRNL__ -D__BOOTZ__ -D__HAVE_NE_APIS__ -D__NE__ -I../ -I../kernel -BOOT_LOADER=bootz.exe -KERNEL=vkrnl.exe -SYSCHK=chk.sys -STARTUP=startup.sys +BOOT_LOADER=bootz.efi +KERNEL=vmkrnl.efi +SYSCHK=chk.efi +STARTUP=startup.efi .PHONY: invalid-recipe invalid-recipe: @@ -94,7 +94,7 @@ efi: $(HTTP_GET) https://retrage.github.io/edk2-nightly/bin/DEBUGAARCH64_QEMU_EFI.fd -O OVMF.fd BINS=*.bin -EXECUTABLES=bootz.exe vkrnl.exe OVMF.fd +EXECUTABLES=bootz.efi vmkrnl.efi OVMF.fd TARGETS=$(REM_FLAG) $(OBJ) $(BIN) $(IMG) $(IMG_2) $(EXECUTABLES) diff --git a/dev/boot/modules/BootNet/amd64.json b/dev/boot/modules/BootNet/amd64.json index 6a87600b..664c617f 100644 --- a/dev/boot/modules/BootNet/amd64.json +++ b/dev/boot/modules/BootNet/amd64.json @@ -3,7 +3,7 @@ "compiler_std": "c++20", "headers_path": ["../", "../../", "../../../kernel", "../../../", "./"], "sources_path": ["*.cc", "*.S", "../../src/HEL/AMD64/*.cc", "../../src/HEL/AMD64/*.S", "../../src/*.cc"], - "output_name": "net.sys", + "output_name": "net.efi", "compiler_flags": [ "-nostdlib", "-std=c++20", diff --git a/dev/boot/modules/SysChk/amd64.json b/dev/boot/modules/SysChk/amd64.json index f7d979ac..d995bde2 100644 --- a/dev/boot/modules/SysChk/amd64.json +++ b/dev/boot/modules/SysChk/amd64.json @@ -3,7 +3,7 @@ "compiler_std": "c++20", "headers_path": ["../", "../../", "../../../kernel", "../../../", "./"], "sources_path": ["*.cc", "*.S", "../../src/HEL/AMD64/*.cc", "../../src/HEL/AMD64/*.S", "../../src/*.cc"], - "output_name": "chk.sys", + "output_name": "chk.efi", "compiler_flags": [ "-nostdlib", "-std=c++20", diff --git a/dev/boot/modules/SysChk/arm64.json b/dev/boot/modules/SysChk/arm64.json index 9d4ebcf9..1f91326e 100644 --- a/dev/boot/modules/SysChk/arm64.json +++ b/dev/boot/modules/SysChk/arm64.json @@ -3,7 +3,7 @@ "compiler_std": "c++20", "headers_path": ["../", "../../", "../../../kernel", "../../../", "./"], "sources_path": ["*.cc", "*.S", "../../src/HEL/ARM64/*.cc", "../../src/HEL/ARM64/*.S", "../../src/*.cc"], - "output_name": "chk.sys", + "output_name": "chk.efi", "compiler_flags": [ "-ffreestanding", "-nostdlib", 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); diff --git a/dev/ddk/docs/SPECIFICATION_DDK.md b/dev/ddk/docs/SPECIFICATION_DDK.md index 5fbff990..57710d1f 100644 --- a/dev/ddk/docs/SPECIFICATION_DDK.md +++ b/dev/ddk/docs/SPECIFICATION_DDK.md @@ -6,7 +6,7 @@ - Programming Language: C/C++ - Build System: Make/BTB -- Purpose: Driver Tool Kit, which you link against libddk.sys +- Purpose: Driver Tool Kit, which you link against ddk.sys =================================== diff --git a/dev/kernel/KernelKit/PEF.h b/dev/kernel/KernelKit/PEF.h index 65c9548a..eaa71a5e 100644 --- a/dev/kernel/KernelKit/PEF.h +++ b/dev/kernel/KernelKit/PEF.h @@ -32,7 +32,7 @@ #define kPefLibExt ".lib" #define kPefObjectExt ".obj" #define kPefDebugExt ".dbg" -#define kPefDriverExt ".sys" +#define kPefDriverExt ".efi" // Kernel System Binary Interface. #define kPefAbi (0x5046) diff --git a/dev/kernel/SwapKit/DiskSwap.h b/dev/kernel/SwapKit/DiskSwap.h index 717baae4..d09e719a 100644 --- a/dev/kernel/SwapKit/DiskSwap.h +++ b/dev/kernel/SwapKit/DiskSwap.h @@ -11,7 +11,7 @@ #include <CompilerKit/CompilerKit.h> #define kSwapBlockMaxSize (mib_cast(16)) -#define kSwapPageFile "/boot/pagefile.sys" +#define kSwapPageFile "/boot/pagefile.efi" /// @file SwapDisk.h /// @brief Virtual memory swap disk. diff --git a/dev/kernel/amd64-ci.make b/dev/kernel/amd64-ci.make index 5e94f47d..d71f3a6f 100644 --- a/dev/kernel/amd64-ci.make +++ b/dev/kernel/amd64-ci.make @@ -37,7 +37,7 @@ LDFLAGS = -e hal_init_platform --subsystem=17 --image-base 0x4000000 LDOBJ = obj/*.obj # This file is the Kernel, responsible of task, memory, driver, sci, disk and device management. -KERNEL_IMG = vkrnl.exe +KERNEL_IMG = vmkrnl.efi .PHONY: error error: diff --git a/dev/kernel/amd64-desktop.make b/dev/kernel/amd64-desktop.make index 5e94f47d..d71f3a6f 100644 --- a/dev/kernel/amd64-desktop.make +++ b/dev/kernel/amd64-desktop.make @@ -37,7 +37,7 @@ LDFLAGS = -e hal_init_platform --subsystem=17 --image-base 0x4000000 LDOBJ = obj/*.obj # This file is the Kernel, responsible of task, memory, driver, sci, disk and device management. -KERNEL_IMG = vkrnl.exe +KERNEL_IMG = vmkrnl.efi .PHONY: error error: diff --git a/dev/kernel/arm64-desktop.make b/dev/kernel/arm64-desktop.make index 153389ed..7ae4d9f8 100644 --- a/dev/kernel/arm64-desktop.make +++ b/dev/kernel/arm64-desktop.make @@ -23,7 +23,7 @@ LDFLAGS = -subsystem:efi_application -entry:hal_init_platform /nodefaultlib LDOBJ = obj/*.obj # This file is the Kernel, responsible of task management and memory. -KERNEL = vkrnl.exe +KERNEL = vmkrnl.efi .PHONY: error error: diff --git a/dev/kernel/kernel_rsrc.rsrc b/dev/kernel/kernel_rsrc.rsrc index 4694ee31..ab149b31 100644 --- a/dev/kernel/kernel_rsrc.rsrc +++ b/dev/kernel/kernel_rsrc.rsrc @@ -13,7 +13,7 @@ BEGIN VALUE "FileVersion", KERNEL_VERSION VALUE "InternalName", "neoskrnl" VALUE "LegalCopyright", "(c) 2024-2025 Amlal El Mahrouss, all rights reserved" - VALUE "OriginalFilename", "vkrnl.exe" + VALUE "OriginalFilename", "vmkrnl.efi" VALUE "ProductName", "NeKernel" VALUE "ProductVersion", KERNEL_VERSION END diff --git a/dev/kernel/src/FS/NeFS.cc b/dev/kernel/src/FS/NeFS.cc index 3b7fb79e..6b73dc09 100644 --- a/dev/kernel/src/FS/NeFS.cc +++ b/dev/kernel/src/FS/NeFS.cc @@ -503,7 +503,7 @@ bool NeFileSystemParser::Format(_Input _Output DriveTrait* drive, _Input const L // Write a new EPM entry. constexpr auto kFsName = "NeFS"; - constexpr auto kBlockName = "ZkaOS:"; + constexpr auto kBlockName = "NeKernel:"; rt_copy_memory(reinterpret_cast<VoidPtr>(const_cast<Char*>(kFsName)), epm_boot->Fs, rt_string_len(kFsName)); |
