2014-01-16 2 views
1

Visual Studio 2012 프로젝트를 사용하여 EDK2 SDK로 UEFI 드라이버를 작성하는 방법에 대한 조언을 찾고 있습니다. 나는 정적으로 UefiLib.lib를 링크하려고 시도하지만 비참하게 실패합니다. 링커 아래에 추가 종속성에 lib를 추가했습니다.Visual Studio를 사용하여 UEFI 드라이버 빌드

#include <Uefi.h> 
#include <Library/UefiLib.h> 

EFI_STATUS 
EFIAPI 
UefiMain (
    IN EFI_HANDLE  ImageHandle, 
    IN EFI_SYSTEM_TABLE *SystemTable 
) 
{ 
Print((CHAR16 *)L"Welcome to the world of EDK II.\n"); 
return EFI_SUCCESS; 
} 

오류 그러나 그렇지 수출 또는 수입으로하지만, archivemember로 존재, 지금은 인쇄 lib 디렉토리에 있는지 확인하기 위해 DUMPBIN을 사용했습니다

test.obj : error LNK2001: unresolved external symbol "unsigned __int64 __cdecl Print(unsigned short const *,...)" ([email protected]@YA_KPEBGZZ) 

입니다. 나는 그것이 문제인지 여부를 확신하지 못한다.

답변

2

UEFI 드라이버 또는 응용 프로그램을 별도로 빌드 할 수 없으므로 EDK2 구성 요소를 컴파일하고 링크하는 데 필요한 많은 헤더 파일과 라이브러리가있는 EDK2 소스 트리에서 수행해야합니다. EDK2 구성 요소는 EDK2 빌드 도구로 빌드해야하며 C 컴파일러/링커는 EDK2 빌드 프로세스의 한 단계에 불과합니다. 명령 줄을 사용하여 빌드를 시작하여 환경 설정이 제대로되었는지 확인한 다음 개발할 구성 요소를 Visual Studio로 가져올 수 있습니다.

Visual Studio에서 Makefile Project를 만드는 것으로 시작할 수 있습니다. 이것은 모든 사용자 지정 빌드 단계를 지정하는 데 필요합니다. 예를 들어 프로젝트의 속성 페이지에서 구성 속성 -> NMake -> 일반 -> 명령 줄 빌드로 이동하십시오. 빌드 명령 줄에 다음 코드를 입력하십시오. 빌드하려고하는 Hello 앱을 포함하는 전체 AppPkg 패키지를 빌드 할 수 있습니다. 당신은 단지 안녕을 구축하려면

cd C:\src\edk2 
call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" x86 
call edksetup.bat 
build.exe -p c:\src\edk2\AppPkg\AppPkg.dsc -t VS2012x86 -b DEBUG 

, 당신은 AppPkg 패키지를 빌드하는 데 사용되는 AppPkg.dsc 파일을 사용자 정의해야합니다. build.exe 유틸리티로 고급 명령 줄 스위치를 사용하여 빌드 프로세스를 조정할 수있는 방법이 있습니다. TianoCore.org에서 제공하는 EDK2 설명서를 검토해야합니다.

위의 단계는 Visual Studio 내에서 UEFI 응용 프로그램/드라이버를 만드는 데 도움이되지만 강력한 IntelliSense 및 디버깅 기능을 위해 Visual Studio를 사용하려고합니다. 이렇게하려면 Windows에서 EFI 에뮬레이트 환경을 만드는 Nt32Pkg 패키지를 작성해야하며 코드를 단계별로 실행하고 UEFI 드라이버/응용 프로그램을 일반 Windows 응용 프로그램으로 디버깅 할 수 있습니다. Phoenix Core Architect와 같은 모든 작업을 자동으로 자동화하는 UEFI 개발을 위해 특수 VS 확장을 사용하지 않는 한 Visual Studio 프로젝트를 설정하는 것은 약간 까다 롭습니다. 그러나 수동으로 수행 할 수도 있습니다. EDK2 소스의 파일/폴더 구조의 일부 또는 전부를 직접 VS Solution Explorer에 가져와야합니다. Nt32Pkg 빌드의 결과는 C : \ src \ edk2 \ Build \ NT32IA32 \ DEBUG_VS2012x86 \ IA32 \ SecMain.exe Windows 응용 프로그램입니다. Windows 환경에서 시작하고 UEFI를 소개해야합니다.

+0

"UEFI 드라이버 나 응용 프로그램을 별도로 만들 수는 없으므로 EDK2 소스 트리에서 완료해야합니다"- 사실이 아닙니다. Visual Studio 2015 (EDK2없이)를 사용하여 UEFI File System 드라이버를 구축하고 있습니다 (https://github.com/pbatard/efifs). 필요한 것은 하위 모듈로서 gnu-efi뿐입니다. – Akeo

+0

질문은 특히 EDK2 SDK 및 VS2012가있는 UEFI 드라이버에 관한 것이므로 그 맥락에서 대답했습니다. 문구를 문맥 밖으로 가져 가면 확실합니다. 그래도 EDK2 트리에서 가져온 헤더가있는 환경이 필요합니다. gnu-efi를 사용하면 이처럼 사용자 지정 트리에서 EFI 구성 요소를 직접 만들었습니다. BTW, EfiFs 드라이버는 EDK2 구성 요소 (예 : INF 파일이 아님)처럼 보이지 않으며 질문의 UefiLib.lib와 같은 EDK2 라이브러리와 연결되지 않으며 EDK2 빌드 도구도 사용하지 않습니다. – sun2sirius

+0

아, 내 잘못이야. 나는 OP가 EDK2를 사용하지 않고도 VS를 사용하여 EFI 드라이버를 만들려고 노력 중이며 그렇게하는 데 문제가 있다고 생각했습니다. – Akeo

관련 문제