C++로 UEFI 프로그램 시작하기
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;
};
결실
Reference
이 문제에 관하여(C++로 UEFI 프로그램 시작하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/code2545Light/items/b1f5b04087df50306111
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#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);
}
}
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;
};
Reference
이 문제에 관하여(C++로 UEFI 프로그램 시작하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/code2545Light/items/b1f5b04087df50306111텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)