EDK2로 DXE 드라이버를 빌드하는 방법
EDK2 준비 중
sudo apt install build-essential uuid-dev iasl nasm git python python3-distutils python3-apt acpica-tools git clone https://github.com/tianocore/edk2.git cd edk2 및 git submodule update --init make -C BaseTool source edksetup.sh BaseTool은 UEFI 모듈을 빌드하고 모듈을 EFI_SECTION, FFS, FV 등으로 포맷하는 도구 세트입니다.
edksetup.sh 를 실행하면 'PATH'를 지정하지 않고 BaseTool에서 명령을 실행할 수 있습니다. BaseTools에 어떤 종류의 도구가 있고 어떤 종류의 인수를 지정할 수 있는지 알기 위해 링크를 간단히 살펴볼 수 있습니다.DXE 드라이버를 만들기 위한 EDK2 구성
1: target.txt 편집
edk2/Conf/target.txt 이렇게 수정하세요(댓글제외).ACTIVE_PLATFORM = MdeModulePkg/MdeModulePkg.dsc
TARGET          = DEBUG
TARGET_ARCH     = X64
TOOL_CHAIN_CONF = Conf/tools_def.txt
TOOL_CHAIN_TAG  = GCC5
BUILD_RULE_CONF = Conf/build_rule.txt
build에서 edk2/를 실행하고 - Done -를 반환하는지 확인할 수 있습니다. 이 시점에서 오류가 발생하면 edk2의 일부 구성이 잘못된 것입니다.2: 필요한 파일 만들기
내부에 DXE 드라이버용 폴더
edk2/MdeModulePkg/를 만들고 그 안에 다음과 같이 두 개의 파일을 준비합니다.MyDxe
├── MyDxe.c
└── MyDxe.inf
3: MdeModulePkg.dsc 편집
다음과 같이
[Component] 내부의 edk2/MdeModulePkg/MdeModulePkg.dsc 섹션 아래에 모듈을 추가하십시오.[Components]
  MdeModulePkg/MyDxe/MyDxe.inf # add only this
  MdeModulePkg/Application/HelloWorld/HelloWorld.inf
  MdeModulePkg/Application/DumpDynPcd/DumpDynPcd.inf
  MdeModulePkg/Application/MemoryProfileInfo/MemoryProfileInfo.inf
MyDxe.inf 구성
[Defines]
  INF_VERSION                    = 0x00010006
  BASE_NAME                      = MyDxe
  FILE_GUID                      = <put your GUID generated by uuidgen>
  MODULE_TYPE                    = DXE_DRIVER
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = MyDxeEntry
[Sources]
    MyDxe.c
[Packages]
    MdePkg/MdePkg.dec
    MdeModulePkg/MdeModulePkg.dec
[LibraryClasses]
    UefiDriverEntryPoint
    UefiRuntimeServicesTableLib
    UefiLib
    PrintLib
[Protocols]
[Depex]
    TRUE
이 DXE 드라이버에서 프로토콜을 사용하지 않으므로
[Protocols]를 비워 두었습니다. 이 DXE 드라이버를 특정 프로토콜을 설치한 후 실행해야 한다면 [Depex] 에 넣어야 하는데 저는 프로토콜을 사용하지 않기 때문에 그냥 TRUE 를 넣습니다. 자세한 내용은 CodeRush's post in Win-Raid Forum에서 확인할 수 있습니다.DXE 드라이버의 소스 코드(MyDxe.c)
#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/PrintLib.h>
#include <Library/UefiDriverEntryPoint.h>
#include <Library/UefiRuntimeServicesTableLib.h>
EFI_STATUS EFIAPI MyDxeEntry(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable) {
    UINT32 myvarSize      = 30;
    CHAR8  myvarValue[30] = {0};
    CHAR16 myvarName[30]  = L"MyDxeStatus";
    EFI_TIME time;
    // 11223344-5566-7788-99aa-bbccddeeff00
    EFI_GUID myvarGUID = { 0x11223344, 0x5566, 0x7788, { 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00 }};
    gRT->GetTime(&time, NULL);
    AsciiSPrint(myvarValue, 12, "%2d/%2d %2d:%2d", time.Month, time.Day, time.Hour, time.Minute);
    gRT->SetVariable(
            myvarName,
            &myvarGUID,
            EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
            myvarSize,
            myvarValue);
    return EFI_SUCCESS;
}
이렇게 하면 "MyDxeStatus"라는 UEFI 변수가 생성되고 런타임 서비스에서
GetTime 함수로 파생된 현재 시간이 저장됩니다. 형식 문자열을 준비하기 위해 다음에서 AsciiSPrint를 사용했습니다.PrintLib 라이브러리.
DXE 드라이버 빌드
build를 실행하여 이 드라이버를 빌드할 수 있습니다. 오류가 없으면 끝에 Done가 표시되고 출력 파일은 edk2/Build/MdeModule/DEBUG_GCC5/X64/MdeModulePkg/MyDxe/MyDxe/OUTPUT에서 찾을 수 있습니다.DXE 드라이버에서 FFS 파일 생성
이 DXE 드라이버를 BIOS 이미지에 추가하려면 FFS(Fimware FileSystem) 형식으로 변환해야 합니다. FFS는 EFI_SECTION 파일로 구성되며 대부분의 경우 4개 섹션 이하입니다.
이와 관련된 정보는 EDK2 Build Specification을 참조할 수 있습니다. 그러나 어쨌든 먼저 이러한 섹션 파일을 생성한 다음 결합하여 FFS 파일을 구성해야 합니다. 섹션 파일 생성은 BaseTools에서
GenSec 명령을 사용하여 수행할 수 있습니다. 또한 이를 FFS 파일로 결합하기 위한 BaseTools의 명령GenFfs이 있습니다.edk2/Build/MdeModule/DEBUG_GCC5/X64/MdeModulePkg/MyDxe/MyDxe/OUTPUT/ 내부에 "FFS"폴더를 만들고 거기에 생성된 파일을 넣었습니다. 섹션 파일은 다음 명령으로 생성됩니다.GenSec MyDxe.efi -S EFI_SECTION_PE32 -o FFS/MyDxe.pe32
GenSec MyDxe.efi -S EFI_SECTION_USER_INTERFACE -o FFS/MyDxe.ui -n "MyDxe"
GenSec MyDxe.efi -S EFI_SECTION_VERSION -o FFS/MyDxe.ver
cd FFS
GenFfs -t EFI_FV_FILETYPE_DRIVER -d 1 -g "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" -i MyDxe.pe32 -i MyDxe.ui -i MyDxe.ver -o MyDxe.ffs
이 FFS에 대한 GUID를 생성하고
GenFfs에 지정해야 합니다. 이 DXE Driver에서는 DEPEX를 사용하지 않아서 넣지 않았지만, 있다면 GenSec MyDxe.depex -S EFI_SECTION_DXE_DEPEX -o FFS/MyDxe.depex를 실행(MyDxe.depex는 이미 OUTPUT 폴더에 build 명령으로 빌드되어 있음) 지정하면 됩니다. -i 명령에 GenFfs 옵션이 있습니다.
                Reference
이 문제에 관하여(EDK2로 DXE 드라이버를 빌드하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/machinehunter/how-to-build-dxe-driver-by-edk2-11h8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)