Mercurial > hg > Gears > UEFIloader
view gnu-efi-3.0.12/apps/bootloader.c @ 1:cbcaeba32076
add shellscript
author | nana |
---|---|
date | Tue, 11 Apr 2023 11:50:25 +0900 |
parents | bootloader.c@f434d6ab8db1 |
children | c2a38c3c71ab |
line wrap: on
line source
#include<efi.h> #include<efilib.h> EFI_STATUS efi_main(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) { EFI_DEVICE_PATH *Path; EFI_LOADED_IMAGE *LoadedImageParent; EFI_LOADED_IMAGE *LoadedImage; EFI_HANDLE Image; CHAR16 *Options = L"root=/dev/sda2 rootfstype=btrfs rw quiet splash"; EFI_STATUS Status=EFI_SUCCESS; InitializeLib(ImageHandle, SystemTable); Print(L"Hello, EFI!\n"); Status = uefi_call_wrapper(BS->OpenProtocol, 6, ImageHandle, &LoadedImageProtocol,(void**)&LoadedImageParent, ImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL); if (EFI_ERROR(Status)) { Print(L"Could not get LoadedImageProtocol handler %r\n", Status); return Status; } Print(L"Hello,2!\n"); Path = FileDevicePath(LoadedImageParent->DeviceHandle, L"\\OS"); if (Path == NULL) { Print(L"Could not get device path."); return EFI_INVALID_PARAMETER; } Print(L"Hello,3!\n"); Status = uefi_call_wrapper(BS->LoadImage, 6, FALSE, ImageHandle, Path, NULL, 0, &Image); if (EFI_ERROR(Status)) { Print(L"Could not load %r", Status); FreePool(Path); return Status; } Print(L"Hello,4!\n"); Status = uefi_call_wrapper(BS->OpenProtocol, 6, Image, &LoadedImageProtocol, (void**)&LoadedImage, ImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL); if (EFI_ERROR(Status)) { Print(L"Could not get LoadedImageProtocol handler %r\n", Status); uefi_call_wrapper(BS->UnloadImage, 1, Image); FreePool(Path); return Status; } Print(L"Hello,5!\n"); LoadedImage->LoadOptions = Options; LoadedImage->LoadOptionsSize = (StrLen(LoadedImage->LoadOptions)+1) * sizeof(CHAR16); Print(L"Hello,6!\n"); Status = uefi_call_wrapper(BS->StartImage, 3, Image, NULL, NULL); uefi_call_wrapper(BS->UnloadImage, 1, Image); FreePool(Path); Print(L"Hello,7!\n"); return EFI_SUCCESS; }