C++로 UEFI 프로그램 시작하기

4129 단어 UEFIC++

C++로 UEFI 프로그램 시작하기


개요


이전
어셈블러로 시작하는 프로그램을 써 보아라.MayBoot
이런 기사를 소개했다.
그러나 현대의 유도로 BIOS는 시대에 뒤떨어졌다
UEFI(Unified Extensible Firmware Interface)가 표준인 것 같습니다.
나는 거기에 UEFI에서 배를 젓는 프로그램을 썼다.
갑자기 64비트로.
또한 C와 C++(Rust에 상관없이) 안내 부분에 대해 기술할 수 있다.

환경을 이용하다


Ubuntu"VERSION="20.10 (Groovy Gorilla)
QEMU emulator version 5.0.0 (Debian 1:5.0-5ubuntu9.2)
clang version 8.0.1-10build1 (tags/RELEASE_801/final)
LLD 8.0.1

소스 코드


C도 괜찮지만, 특별히 extern "C"를 만듭니다. {C++로 쓰여 있습니다
main.cc

#include <stdint.h>
#include"uefi.h"


extern "C" {
void efi_main(void *ImageHandle __attribute__ ((unused)),
          struct EFI_SYSTEM_TABLE *SystemTable)
{
    SystemTable->ConOut->ClearScreen(SystemTable->ConOut);
    SystemTable->ConOut->OutputString(SystemTable->ConOut,
                      L"Hello UEFI!\n");
    while (1);

}
}


uefi.h

struct EFI_SYSTEM_TABLE {
    //本当は、前半60バイトにも意味がある値があるが、今回はTEXT_OUTPUT しか使わないので位置調整だけにchar[60]宣言
    char _buf[60];
    struct EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL {
        uint64_t _buf;
        uint64_t (*OutputString)(
            struct EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
            const wchar_t* String);
        uint64_t _buf2[4];
        uint64_t (*ClearScreen)(
            struct EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This);
    } *ConOut;
};

결실


좋은 웹페이지 즐겨찾기