diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-10-12 22:05:13 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-10-12 22:05:13 +0200 |
| commit | 7bd97fee4c9d470aeaa1a83fea23fff8b6952130 (patch) | |
| tree | 4169d12ae28d324f1188c2586af47305c8d15c8e | |
| parent | c7b637d7b68d9b7e271e70a5a5cc0c4fcf9172de (diff) | |
IMP: A WiP bootloader backend for ARM64.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
| -rw-r--r-- | dev/zba/amd64-efi.make | 2 | ||||
| -rw-r--r-- | dev/zba/arm64-efi.make | 2 | ||||
| -rw-r--r-- | dev/zba/src/HEL/AMD64/BootMain.cxx | 73 | ||||
| -rw-r--r-- | dev/zba/src/HEL/ARM64/BootMain.cxx | 6 |
4 files changed, 43 insertions, 40 deletions
diff --git a/dev/zba/amd64-efi.make b/dev/zba/amd64-efi.make index 00427303..efe528e7 100644 --- a/dev/zba/amd64-efi.make +++ b/dev/zba/amd64-efi.make @@ -49,7 +49,7 @@ REM_FLAG=-f FLAG_ASM=-f win64 FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mno-red-zone -D__NEWOSKRNL__ -D__NEWOSLDR__ \ -DEFI_FUNCTION_WRAPPER -I./ -I../zka -I../ -c -nostdlib -fno-rtti -fno-exceptions \ - -std=c++20 -D__HAVE_ZKA_APIS__ -D__ZKA_AMD64__ -D__ZKA__ + -std=c++20 -D__HAVE_ZKA_APIS__ -D__ZKA_USE_FB__ -D__ZKA_AMD64__ -D__ZKA__ BOOT_LOADER=newosldr.exe KERNEL=minoskrnl.exe diff --git a/dev/zba/arm64-efi.make b/dev/zba/arm64-efi.make index e546989d..aae20a2b 100644 --- a/dev/zba/arm64-efi.make +++ b/dev/zba/arm64-efi.make @@ -45,7 +45,7 @@ REM_FLAG=-f FLAG_ASM=-f win64 FLAG_GNU=-fshort-wchar -c -ffreestanding -MMD -mno-red-zone -D__ZKA_ARM64__ -fno-rtti -fno-exceptions -I./ \ -target aarch64-unknown-windows \ - -std=c++20 -D__FSKIT_USE_NEFS__ -D__NEWOSKRNL__ -D__NEWOSLDR__ -D__HAVE_ZKA_APIS__ -D__ZKA__ -I../ -I../zka + -std=c++20 -D__FSKIT_USE_NEFS__ -D__STANDALONE__ -D__NEWOSKRNL__ -D__NEWOSLDR__ -D__HAVE_ZKA_APIS__ -D__ZKA__ -I../ -I../zka BOOT_LOADER=newosldr.exe KERNEL=minoskrnl.exe diff --git a/dev/zba/src/HEL/AMD64/BootMain.cxx b/dev/zba/src/HEL/AMD64/BootMain.cxx index 3c5e80a3..5aa26b03 100644 --- a/dev/zba/src/HEL/AMD64/BootMain.cxx +++ b/dev/zba/src/HEL/AMD64/BootMain.cxx @@ -8,6 +8,7 @@ #include <modules/FB/FB.hxx> #include <modules/FB/Text.hxx> #include <FirmwareKit/EFI.hxx> +#include <FirmwareKit/EFI/API.hxx> #include <FirmwareKit/Handover.hxx> #include <KernelKit/MSDOS.hxx> #include <KernelKit/PE.hxx> @@ -32,7 +33,7 @@ /** Graphics related. */ STATIC EfiGraphicsOutputProtocol* kGop = nullptr; -STATIC UInt16 kStride = 0U; +STATIC UInt16 kGopStride = 0U; STATIC EfiGUID kGopGuid; EXTERN_C Void rt_reset_hardware(); @@ -41,7 +42,7 @@ EXTERN_C Void rt_reset_hardware(); @brief Finds and stores the GOP. */ -STATIC Void InitVideoFB() noexcept +STATIC Void boot_init_fb() noexcept { kGopGuid = EfiGUID(EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID); kGop = nullptr; @@ -50,7 +51,7 @@ STATIC Void InitVideoFB() noexcept BS->LocateProtocol(&kGopGuid, nullptr, (VoidPtr*)&kGop); - kStride = 4; + kGopStride = 4; for (SizeT i = 0; i < kGop->Mode->MaxMode; ++i) { @@ -92,21 +93,21 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle, UInt32 rev_desc = 0; #ifdef __ZKA_USE_FB__ - InitVideoFB(); ///! Init the GOP. + boot_init_fb(); ///! Init the GOP. for (SizeT indexVT = 0; indexVT < SystemTable->NumberOfTableEntries; ++indexVT) { - Char* vendorTable = reinterpret_cast<Char*>( + Char* vendor_table = reinterpret_cast<Char*>( SystemTable->ConfigurationTable[indexVT].VendorTable); /// ACPI's 'RSD PTR', which contains hardware tables (MADT, FACP...) - if (vendorTable[0] == 'R' && vendorTable[1] == 'S' && - vendorTable[2] == 'D' && vendorTable[3] == ' ' && - vendorTable[4] == 'P' && vendorTable[5] == 'T' && - vendorTable[6] == 'R' && vendorTable[7] == ' ') + if (vendor_table[0] == 'R' && vendor_table[1] == 'S' && + vendor_table[2] == 'D' && vendor_table[3] == ' ' && + vendor_table[4] == 'P' && vendor_table[5] == 'T' && + vendor_table[6] == 'R' && vendor_table[7] == ' ') { - handover_hdr->f_HardwareTables.f_VendorPtr = (VoidPtr)vendorTable; + handover_hdr->f_HardwareTables.f_VendorPtr = (VoidPtr)vendor_table; break; } } @@ -155,7 +156,7 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle, handover_hdr->f_HardwareTables.f_MultiProcessingEnabled = cnt_enabled > 1; // Fill handover header now. - Boot::BDiskFormatFactory<BootDeviceATA> checkPart; + Boot::BDiskFormatFactory<BootDeviceATA> partition_factory; // ---------------------------------------------------- // // The following checks for an exisiting partition @@ -163,7 +164,7 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle, // format the disk. // ---------------------------------------------------- // - if (!checkPart.IsPartitionValid()) + if (!partition_factory.IsPartitionValid()) { Boot::BDiskFormatFactory<BootDeviceATA>::BFileDescriptor root; root.fFileName[0] = kNeFSRoot[0]; @@ -171,7 +172,7 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle, root.fKind = kNeFSCatalogKindDir; - checkPart.Format("FileSystem (A:)", &root, 1); + partition_factory.Format("FileSystem (A:)", &root, 1); rt_reset_hardware(); } @@ -187,14 +188,14 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle, // A simple loop which finds a usable memory region for us. //-----------------------------------------------------------// - SizeT lookIndex = 0UL; + SizeT lookup_index = 0UL; - for (; struct_ptr[lookIndex].Kind != EfiMemoryType::EfiConventionalMemory; ++lookIndex) + for (; struct_ptr[lookup_index].Kind != EfiMemoryType::EfiConventionalMemory; ++lookup_index) { ZKA_UNUSED(0); } - cDefaultMemoryMap = lookIndex; + cDefaultMemoryMap = lookup_index; //-----------------------------------------------------------// // Update handover file specific table and phyiscal start field. @@ -215,22 +216,22 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle, handover_hdr->f_FirmwareCustomTables[0] = (VoidPtr)BS; handover_hdr->f_FirmwareCustomTables[1] = (VoidPtr)ST; - Boot::BFileReader readerSysChk(L"syschk.sys", ImageHandle); - readerSysChk.ReadAll(0); + Boot::BFileReader reader_syschk(L"syschk.sys", ImageHandle); + reader_syschk.ReadAll(0); - Boot::BThread* loaderSysChk = nullptr; + Boot::BThread* syschk_thread = nullptr; // ------------------------------------------ // // If we succeed in reading the blob, then execute it. // ------------------------------------------ // - if (readerSysChk.Blob()) + if (reader_syschk.Blob()) { - loaderSysChk = new Boot::BThread(readerSysChk.Blob()); - loaderSysChk->SetName("System Check SYS."); + syschk_thread = new Boot::BThread(reader_syschk.Blob()); + syschk_thread->SetName("System Check SYS."); } - loaderSysChk->Start(handover_hdr); + syschk_thread->Start(handover_hdr); // nullify these fields, to avoid being reused later. @@ -251,27 +252,27 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle, // Assign to global 'kHandoverHeader'. - Boot::BFileReader readerKernel(L"minoskrnl.exe", ImageHandle); + Boot::BFileReader reader_kernel(L"minoskrnl.exe", ImageHandle); - readerKernel.ReadAll(0); + reader_kernel.ReadAll(0); - Boot::BThread* kernel_loader = nullptr; + Boot::BThread* kernel_thread = nullptr; // ------------------------------------------ // // If we succeed in reading the blob, then execute it. // ------------------------------------------ // - if (readerKernel.Blob()) + if (reader_kernel.Blob()) { - kernel_loader = new Boot::BThread(readerKernel.Blob()); - kernel_loader->SetName("Minimal Kernel."); + kernel_thread = new Boot::BThread(reader_kernel.Blob()); + kernel_thread->SetName("Minimal Kernel."); - handover_hdr->f_KernelImage = readerKernel.Blob(); + handover_hdr->f_KernelImage = reader_kernel.Blob(); } else { #ifdef __ZKA_USE_FB__ - CGDrawString("NEWOSLDR: PLEASE RECOVER YOUR MINKRNL IMAGE.", 30, 10, RGB(0xFF, 0xFF, 0xFF)); + CGDrawString("NEWOSLDR: PLEASE RECOVER YOUR KERNEL IMAGE.", 30, 10, RGB(0xFF, 0xFF, 0xFF)); #endif // __ZKA_USE_FB__ } @@ -291,15 +292,15 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle, handover_hdr->f_ChimeSz = chimeWav.Size(); handover_hdr->f_StartupImage = readerSysDrv.Blob(); handover_hdr->f_StartupSz = readerSysDrv.Size(); - handover_hdr->f_KernelImage = readerKernel.Blob(); - handover_hdr->f_KernelSz = readerKernel.Size(); + handover_hdr->f_KernelImage = reader_kernel.Blob(); + handover_hdr->f_KernelSz = reader_kernel.Size(); handover_hdr->f_TTFallbackFont = urbanistTTF.Blob(); handover_hdr->f_FontSz = urbanistTTF.Size(); } else { #ifdef __ZKA_USE_FB__ - CGDrawString("NEWOSLDR: ONE OR MORE SYSTEM COMPONENTS ARE MISSING, PLEASE REFORMAT THE OS.", 30, 10, RGB(0xFF, 0xFF, 0xFF)); + CGDrawString("NEWOSLDR: ONE OR MORE SYSTEM COMPONENTS ARE MISSING, PLEASE REINSTALL THE OS.", 30, 10, RGB(0xFF, 0xFF, 0xFF)); #endif // __ZKA_USE_FB__ } @@ -314,9 +315,7 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle, // Finally load Kernel, and the cr3 to it. // ---------------------------------------------------- // - kernel_loader->Start(handover_hdr); - - EFI::Stop(); + kernel_thread->Start(handover_hdr); CANT_REACH(); } diff --git a/dev/zba/src/HEL/ARM64/BootMain.cxx b/dev/zba/src/HEL/ARM64/BootMain.cxx index ff26b14c..2033b74b 100644 --- a/dev/zba/src/HEL/ARM64/BootMain.cxx +++ b/dev/zba/src/HEL/ARM64/BootMain.cxx @@ -5,6 +5,8 @@ ------------------------------------------- */ #include <FirmwareKit/EFI.hxx> +#include <BootKit/Thread.hxx> +#include <BootKit/BootKit.hxx> EXTERN EfiBootServices* BS; @@ -15,6 +17,8 @@ EXTERN EfiBootServices* BS; EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle, EfiSystemTable* SystemTable) { + SystemTable->ConOut->OutputString(SystemTable->ConOut, L"NEWSOLDR, (C) ZKA TECHNOLOGIES, ALL RIGHTS RESERVED.\r\n"); + SystemTable->ConOut->OutputString(SystemTable->ConOut, L"NEWSOLDR: BOOTING KERNEL...\r\n"); - return 0; + CANT_REACH(); } |
