26 extern "C" [[maybe_unused]] EFI_STATUS EFIAPI
28 [[maybe_unused]] EFI_SYSTEM_TABLE *_system_table) {
29 EFI_STATUS status = EFI_SUCCESS;
30 uint64_t kernel_addr = 0;
33 EFI_LOADED_IMAGE *loaded_image =
nullptr;
34 status = LibLocateProtocol(&LoadedImageProtocol,
35 reinterpret_cast<void **
>(&loaded_image));
36 if (EFI_ERROR(status)) {
70 graphics.print_info();
79 kernel_addr = elf.load();
80 }
catch (
const std::exception &_e) {
82 return EFI_LOAD_ERROR;
87 uint64_t desc_count = 0;
88 EFI_MEMORY_DESCRIPTOR *memory_map =
nullptr;
90 uint64_t desc_size = 0;
91 uint32_t desc_version = 0;
92 memory_map = LibMemoryMap(&desc_count, &map_key, &desc_size, &desc_version);
93 if (memory_map ==
nullptr) {
95 throw std::runtime_error(
"memory_map == nullptr");
97 status = uefi_call_wrapper(gBS->ExitBootServices, 2, _image_handle, map_key);
98 if (EFI_ERROR(status)) {
99 debug << L
"ExitBootServices failed, Memory Map has Changed " << status
103 auto kernel_entry = (void (*)())kernel_addr;
static auto endl(ostream &_ostream) -> ostream &
static auto hex_X(ostream &_ostream) -> ostream &
static ostream debug
全局输出流
project_config 头文件,此文件由 cmake 自动生成,不要手动修改
EFI_STATUS EFIAPI efi_main(EFI_HANDLE _image_handle, [[maybe_unused]] EFI_SYSTEM_TABLE *_system_table)