유니버설 Windows 드라이버 시작
[일부 정보는 상업용으로 출시되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 명시적 또는 묵시적 보증을 하지 않습니다.]
유니버설 Windows 드라이버는 Windows 드라이버에서 사용할 수 있는 인터페이스의 하위 집합을 사용합니다. 이 항목에서는 Windows 10용 유니버설 Windows 드라이버를 빌드, 설치, 배포 및 디버그하는 방법에 대해 설명합니다.
유니버설 Windows 드라이버 소개
Windows 10은 여러 Windows 버전에서 공통인 API 및 DDI 인터페이스 집합을 제공합니다. 이 인터페이스 집합을 UWP(유니버설 Windows 플랫폼)라고 합니다.
유니버설 Windows 드라이버는 데스크톱용 Windows 10 버전(Home K, Pro K 및 Enterprise K) 및 Windows 10 Mobile와 같은 UWP 기반 Windows 10 버전에서 설치되고 실행되는 커널 모드 또는 사용자 모드 드라이버 이진입니다.
유니버설 Windows 드라이버는 UWP의 일부인 DDI(장치 드라이버 인터페이스)만 호출합니다. 이러한 DDI는 해당 MSDN 참조 페이지에 범용으로 표시됩니다.
기존 드라이버가 UWP 외부의 인터페이스를 호출하는지 확인하려면 드라이버를 유니버설 Windows 드라이버로 다시 컴파일하세요. 드라이버가 UWP의 일부가 아닌 인터페이스를 호출하면 컴파일러에 ApiValidator 오류가 표시됩니다. 경우에 따라 이러한 호출은 데스크톱 전용 DDI에 대한 MSDN 참조 페이지에 나열되는 다른 DDI로 바꿀 수 있습니다. 적절한 대체 인터페이스를 찾을 수 없는 경우 피드백을 제출하세요.
또는 적당한 대체 인터페이스가 없는 경우 코딩으로 해결해야 할 수 있습니다. 필요한 경우 통합 WDK의 드라이버 템플릿에서 시작하여 새 유니버설 Windows 드라이버를 작성합니다.
범용 INF 파일을 사용하지 않는 경우 컴파일러에 INF 유효성 검사 오류가 표시될 수도 있습니다.
유니버설 Windows 드라이버는 KMDF, UMDF 2 또는 WDM(Windows Driver Model)을 사용할 수 있습니다.
유니버설 Windows 드라이버 빌드
WDK(Windows 드라이버 키트) 10과 함께 Microsoft Visual Studio 2015를 사용하여 데스크톱용, 모바일용 또는 유니버설 드라이버를 빌드할 수 있습니다. Windows 하드웨어 개발자 센터에서 키트 및 도구를 다운로드할 수 있습니다.
대부분의 경우 드라이버가 사용자 모드 구성 요소와 작동하지 않으면 Windows 8.1에서 실행되는 기존 커널 모드 드라이버를 유니버설 Windows 드라이버로 다시 컴파일할 수 있습니다. Windows 8.1에서 작동하는 WDM 및 KMDF 드라이버는 변환 없이도 Windows 10을 대상으로 하는 유니버설 Windows 드라이버로 다시 컴파일할 수 있습니다.
반면, 기존 사용자 모드 드라이버는 유니버설 Windows 드라이버로 컴파일하려면 수정이 필요할 수 있습니다. 특히, 드라이버 패키지에 UWP 외부 종속성이 없어야 합니다. 예를 들어 Win32 API의 일부만이 UWP에 속합니다.
기존 드라이버 프로젝트를 유니버설 Windows 드라이버 프로젝트로 변환
- Visual Studio 2015에서 기존 드라이버 프로젝트를 엽니다.
- 솔루션 탐색기 창에서 솔루션을 마우스 오른쪽 단추로 클릭하고 구성 관리자를 선택합니다. 대상 운영 체제를 Windows 10으로 설정합니다.
- 드라이버 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 구성 속성->드라이버에서 대상 플랫폼이 범용으로 설정되었는지 확인합니다. 다른 선택 항목으로는 데스크톱용 Windows 10 버전에서만 실행되는 드라이버를 빌드하는 데스크톱, Windows 10 Mobile에서만 실행되는 드라이버를 빌드하는 모바일이 있습니다.
- 드라이버를 빌드합니다. 링커 오류가 표시될 수 있습니다.
- 오류 로그를 검토하며 오류를 하나씩 수정합니다. 개별 참조 페이지에서 대체 가능한 API가 있는지 확인합니다. 대체 API가 있다면 드라이버를 다시 설계해야 할 수 있습니다.
Microsoft Visual Studio에서 새 유니버설 Windows 드라이버 프로젝트 만들기
템플릿에서 새 드라이버를 만들고(파일>새 프로젝트->템플릿->Visual C++->Windows 드라이버->WDF) 사용자 모드 드라이버(UMDF V2) 또는 **커널 모드 드라이버(KMDF)**를 선택합니다.
프로젝트를 만든 다음 솔루션 탐색기 창에서 솔루션을 마우스 오른쪽 단추로 클릭하고 구성 관리자를 선택합니다. 활성 솔루션 구성을 원하는 대상 Windows 버전으로 설정하고 활성 솔루션 플랫폼을 Win32 또는 x64로 설정합니다. ARM이 나열되지 않으면 **<새로 만들기...>**를 선택하여 ARM에 대해 빌드합니다.
Windows 10을 선택하면 드라이버 모델이 범용으로 기본 설정됩니다.
드라이버 모델을 수동으로 변경하려면 드라이버 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 구성 속성-드라이버 > 설정-> 일반 아래에서 대상 플랫폼 항목을 찾습니다. 범용, 데스크톱 또는 모바일을 선택합니다. Visual Studio가 이 설정을 사용하여 연결할 라이브러리를 결정합니다.
참고 Windows 10 이전의 Windows 버전용 유니버설 Windows 드라이버는 빌드할 수 없습니다.
나중에 INF 파일의 Strings 섹션에서 확장되는 %ManufacturerName% 토큰으로 지정된 공급자를 지정하려면 .inf 파일을 수정해야 할 수 있습니다. . 예:
Provider="Contoso"
이제 솔루션을 빌드할 수 있습니다. Visual Studio가 필요한 라이브러리를 링크하고 .cat 파일, .inf 파일 및 드라이버 이진을 생성합니다.
드라이버를 빌드할 때 Visual Studio에서 사용할 수 있는 구성 설정에 대한 자세한 내용은 WDK를 사용하여 드라이버 빌드를 참조하세요.
유니버설 Windows 드라이버 설치
참고 SetupAPI 구성 요소는 UWP의 일부가 아니므로 유니버설 Windows 드라이버가 이 API 집합에서 함수를 호출할 수 없습니다.
데스크톱용 Windows 10 버전을 실행하는 장치에서 유니버설 Windows 드라이버를 설치하려는 경우 몇 가지만 주의하면 INF 파일을 계속 사용할 수 있습니다. 유니버설 Windows 드라이버용 INF는 다음 중 어느 것도 포함할 수 없습니다.
- 보조 설치 관리자
- 클래스 설치 관리자
- RegisterDLL, DelFile 또는 DelReg 지시문
- 비 HKR AddReg 지시문
자세한 내용은 범용 INF 파일 사용(영문)을 참조하세요.
Windows 10에서 유니버설 Windows 드라이버를 설치하려는 경우 .spkg 파일을 사용할 수 있습니다. .spkg("패키지 파일")는 드라이버 패키지를 포함하는 독립 실행형 모듈입니다. Windows 10 Mobile에 배포하지 않을 경우 패키지 파일을 생성할 필요가 없습니다. 패키지 파일 없이도 유니버설 Windows 드라이버를 드라이버 소스 코드에 정의된 대로 계속 컴파일할 수 있습니다.
WDK 10에는 패키지 파일을 생성하는 도구인 PkgGen이 포함되어 있습니다. 드라이버를 빌드할 때 다음 절차를 사용하여 Visual Studio에서 PkgGen을 실행합니다.
PkgGen을 사용하여 패키지 파일 생성
- 드라이버 프로젝트를 마우스 오른쪽 단추로 클릭하고 추가->새 항목을 선택합니다. 그런 다음 Visual C++->Windows 드라이버에서 패키지 매니페스트를 선택합니다. 추가를 클릭합니다.
- Visual Studio가 Package.pkg.xml라는 파일을 드라이버 프로젝트에 추가합니다. 파일을 마우스 오른쪽 단추로 클릭하고 속성을 선택하여 항목 유형이 PkgGen인지 확인합니다. (나중에 이 드라이버 프로젝트를 빌드하고 패키지 파일을 생성하지 않으려는 경우 같은 속성 페이지에서 빌드에서 제외를 예로 설정할 수 있습니다.) 확인을 클릭합니다.
- 드라이버 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 구성 속성에서 PackageGen 노드를 열고 버전을 원하는 값으로 변경합니다.
- 작업을 저장하고 관리자 권한으로 Visual Studio를 다시 시작합니다.
- 드라이버를 빌드합니다. Visual Studio가 필요한 라이브러리를 링크하고 .cat 파일, .inf 파일, 드라이버 이진 및 .spkg 파일을 생성합니다.
패키지 파일의 내용을 보려면 파일 이름에 .cab 접미사를 추가하고 Windows 탐색기에서 cab 파일을 엽니다.
Visual Studio 외부에서 PkgGen 실행에 관해 알아보려면 패키지 만들기를 참조하세요.
모바일 드라이버 패키지(.spkg 파일) 설치 방법은 두 가지입니다.
- 대상 시스템에서 기존 패키지를 업데이트하거나 대상으로 새 패키지를 추가하는 경우 IUTool.exe를 사용하여 .spkg 드라이버 패키지를 설치합니다.
- 모바일 OS 이미지에 패키지를 결합할 경우 ImgGen를 사용하여 모바일 장치에 플래싱될 수 있도록 FFU(전체 플래시 업데이트) 이미지에 .spkg 드라이버 패키지를 추가합니다.
IUTool을 사용하여 모바일 드라이버 패키지(.spkg)를 실행 중인 장치에 추가
IUTool.exe는 WDK 10의 \tools\bin\<architecture> 하위 디렉터리에 있습니다.
모바일 장치를 PC에 연결합니다. 그런 다음 관리자 권한 명령 프롬프트에서 다음 명령을 실행합니다.
IUTool -p MyKmdfDriver.spkg
자세한 내용은 IUTool.exe: 휴대폰에서 패키지 업데이트 및 테스트 이미지에 드라이버 추가를 참조하세요.
ImgGen을 사용하여 드라이버 패키지(.spkg)를 모바일 OS 이미지(.ffu)에 추가
- Visual Studio 설치 후 시작 화면에서 Visual Studio 2015 폴더를 클릭합니다. VS2015용 개발자 명령 프롬프트를 마우스 오른쪽 단추로 클릭하고 관리자 권한으로 실행을 선택합니다.
- ImgGen에 대한 자세한 내용은 ImgGen.cmd를 사용하여 휴대폰 이미지 작성을 참조하세요.
모바일 OS 이미지(.ffu) 플래시
장치에 이미지를 플래시하려면 Microsoft에서 제공한 FFUTool을 사용하거나 사용자 지정 OEM 플래시 도구를 개발합니다. 자세한 내용은 .FFU 이미지 파일에서 패키지 업데이트를 참조하세요.
유니버설 Windows 드라이버 디버그
Windows 10부터는 Inflight Trace Recorder를 통해 추가 드라이버 디버깅 정보를 얻도록 KMDF 또는 UMDF 드라이버를 빌드할 수 있습니다. 유니버설 Windows 드라이버는 이 기능을 활용할 수 있습니다.
또한 Visual Studio KMDF 템플릿을 사용한 경우 드라이버가 추적 메시지 작성에 Windows WPP(소프트웨어 추적 전처리기)를 사용합니다. 드라이버는 공급자 GUID를 포함한 ETW 공급자입니다.
드라이버에서 추적 메시지를 보내려면 다음 코드를 사용합니다.
TraceEvents(TRACE_LEVEL_INFORMATION, TRACE_DRIVER, "%!FUNC! Entry");
휴대폰에서 TShell 도구를 통해 Tracelog를 사용하거나 디버거 세션에서 !wmitrace를 사용하여 ETW 로그에 액세스할 수 있습니다.
휴대폰에서 Tracelog를 사용하려면
호스트 컴퓨터와 휴대폰 간에 커널 모드 디버깅 세션을 설정합니다.
호스트 컴퓨터에서 TShell에 다음 명령을 입력합니다.
exec-device tracelog -addautologger MyLogger05 -guid c:\SteveGuid.txt -level 4 -flag 0xF –kd
휴대폰을 다시 부팅하고 디버거의 추적 메시지를 확인합니다.
모든 기존 커널 모드 디버그 전송은 데스크톱용 Windows 10 버전에서 계속 작동합니다. 그러나 사용자 모드 드라이버와 커널 모드 드라이버 둘 다 KDNET을 통한 원격 디버거 세션을 사용하여 Windows 10 Mobile을 테스트해야 합니다. 자세한 내용은 Visual Studio에서 네트워크 케이블을 통해 수동으로 커널 모드 디버깅 설정을 참조하세요.
관련 항목
유니버설 Windows 드라이버용 Windows 10 버전
템플릿을 기반으로 한 유니버설 Windows 드라이버(UMDF 2) 작성
템플릿을 기반으로 한 유니버설 Windows 드라이버(KMDF) 작성