Download presentation
Presentation is loading. Please wait.
Published by무생 동 Modified 8년 전
2
Windows 디바이스 드라이버 Update 정 우식 개발부장 ㈜열린기술
3
내용 드라이버 개발자 입장에서 본 XP XP DDK Update 64- 비트 이슈 디바이스 설치 USB 드라이버 스택 디버깅 및 기타 도구들
4
드라이버 개발자가 보는 XP NT 버전 : Win2K WinXP OS: 5.0. 5.1 WDM: 1.1 1.2 커널의 안정성 및 신뢰성 향상 대폭적으로 개선된 드라이버 개발 환경 새로운 DDK Verifier 의 기능 향상 디버깅 및 기타 도구들
5
커널 개선 사항 새로운 Cancel Queue 취소 작업과 관련된 기능을 커널에서 처리 예제 : \src\general\cancel 저 메모리 상황에서의 성능 개선 “must succeed” 형태의 메모리 할당 금지 ExAllocatePoolxxx, MmGetSystemAddressForMdlSafe
6
커널 개선 사항 시스템 복구 Sr.sys: 파일 시스템 필터 드라이버 IFS Kit 에 새로운 지원 루틴 포함 새로운 DMA 기능 DEVICE_DESCRIPTION_VERSION2 CalculateScatterGatherList, BuildScatterGatherList, BuildMdlFromScatterGatherList
7
커널 개선 사항 추가된 DDIs IoSetCompletionRoutineEx IoFreeErrorLogEntry IoIs32bitProcess, … 기타 커널 개선 사항 Logical Prefetcher – 신속한 부트 시스템 PTE 수의 증가 레지스트리 – 사용 공간 확대, 신속한 Query Headless Support
8
XP DDK Update 내용 및 구성면에서 개선된 도큐먼트 Stand-alone 개발 툴 VC++ 필요 없음 VC7 컴파일러 포함 64- 비트 개발 환경 지원 새롭게 추가되고 기능이 개선된 도구들 Driver Verifier ChkINF, GenINF PnP 테스트 유틸리티, Sleeper, …
9
XP DDK Update 힌트 대상 플랫폼에 맞는 DDK 선택 WinNT4 – NT4 DDK WinXP DDK – WinXP, Win2K, WinMe, Win98 WDM Win2K SP2 의 신뢰성 있는 드라이버 개발을 위해서는 WinXP DDK 사용 또는 참조
10
XP DDK Update 힌트 Set DEPRECATE_DDK_FUNCTIONS=1 폐기된 DDI 를 사용하는 경우 컴파일시 경고 메시지 \test\xxx.c(111): error C4996: ‘RtlExtendecIntegerMultiply’ was declared deprecated “Not Supported” – 향후에 정상적으로 작동하지 않을 것임 Supported/unsupported 여부가 특별히 명시되지 않은 내용 – 아직 충분이 테스트되지 않은 기능들
11
XP DDK Update XP DDK 얻는 방법 MSDN XP DDK Suite 구입 웹을 통한 다운로드 지원계획 없음 (‘ 현재 ’) Toaster 샘플 %winddk%\src\general\toaster 가상의 버스, function, 필터 드라이버 Power.c – bug fixed!
12
XP DDK 구조
13
64 – 비트 이슈 WOW64 thunking layer Win64 시스템에서 32- 비트 응용 프로그램 구동 Win32 함수 호출시, pointer-precision 파라미터를 fixed-precision 으로 변경하여 Win64 커널에 전달 – ‘thunking’ 32- 비트 드라이버는 Win64 시스템에서 지원되지 않는다.
14
Thunking 의 필요성 HANDLE Event UNICODE_STRING ObjectName USHORTLength USHORT Maximum_Length PWSTRBuffer 32 bit (4 bytes) 16 bit (2 bytes) 16 bit (2 bytes) 32 bit (4 bytes) 32- 비트 : sizeof(DRIVER_DATA) = 12 HANDLE Event UNICODE_STRING ObjectName USHORTLength USHORT Maximum_Length Structure Padding PWSTRBuffer 64 bit (8 bytes) 16 bit (2 bytes) 16 bit (2 bytes) 32 bit (4 bytes) 64 bit (8 bytes) 64- 비트 : sizeof(DRIVER_DATA) = 24
15
Thunking 의 필요성 typedef struct _DRIVER_DATA32 { VOID *POINTER_32Event; UNICODE_STRING32ObjectName; } DRIVER_DATA32; POINTER_32 Event UNICODE_STRING32 ObjectName USHORTLength USHORT Maximum_Length ULONGBuffer 32 bit (4 bytes) 16 bit (2 bytes) 16 bit (2 bytes) 32 bit (4 bytes) 64- 비트, 32- 비트 : sizeof(DRIVER_DATA32) = 12
16
64- 비트 포팅 체크 리스트 Win32 응용 프로그램의 I/O 요청 DeviceIoControl 에서 pointer-precision 변수가 포함된 구조체의 주소를 InputBuffer 또는 OutputBuffer 의 인수로 사용하는 경우 IoIs32bitProcess DDI 사용 thunking 구현 #if defined(_WIN64) if (IoIs32bitProcess(Irp) { DRIVER_DATA32 Buffer32;... } else { #endif
17
64- 비트 포팅 체크 리스트 Structure Alignment struct xxx { DWORD NoOfPointers; PVOID Pointers[1]; } Malloc(sizeof(DWORD)+100*sizeof(PVOID)); DWORD 뒤에 alignment 를 위해 4 byte 를 추가로 padding Malloc(FIELD_OFFSET(struct xx, Pointers) +100*sizeof(PVOID));
18
64- 비트 포팅 체크 리스트 포인터 연산 -1 != 0xFFFFFFFF ULONG len; Len = ptr2 – ptr1; 포인터를 ULONG, DWORD 등의 형태로 캐스팅하지 않는다.
19
디바이스 설치 64- 비트 새로운 64- 비트 플랫폼 확장자 사용 -.ntia64 기존의 다른 확장자와 동일한 사용 방법 -.ntia64,.nt IA64 시스템의 INF 파일 탐색 순서 .ntia64 .nt undecorated
20
디바이스 설치 Include 와 Need 설치하려는 드라이버가 Windows “in- box” INF 파일에 의해 생성되는 드라이버 / 레지스트리 설정 등의 내용에 영향을 받는 경우 … include= 와 needs= 지시자 사용 [ToasterFilter.NT] Include=toaster.infNeeds=Toaster_Device.NT
21
디바이스 설치 OS 버전 OS 버전에 따른 INF 파일의 구분 기존 버전의 OS 에 INF 파일이 설치되는 것을 방지
22
디바이스 설치 OS 버전 – XP solution Decorated [Model] 섹션 %mfg name%=models-section-name [,TargetOsVersion] [,TargetOsVersion]… NT[Architecture][.[OSMajorVersion] [.OSMinorVersion][.[ProductType] [.SuiteMask]]]]
23
디바이스 설치 OS 버전 – XP solution 예 1 [Manufacturer] “Foo Corp” = FooMfg, NT….0x80, NT “ABC Inc.” = ABCMfg, NTia64, NTx86 [FooMfg.NT….0x80];XP & later Data Center [FooMfg.NT];All other XP & later [FooMfg];Windows 2000 [ABCMfg.NTia64];XP & later ia64 [ABCMfg.NTx86];XP & later x86 [ABCMfg];Windows 2000
24
디바이스 설치 OS 버전 – XP solution 예 2 [Manufacturer] “Foo Corp” = FooMfg, NT.6.0, NTx86.5.1 [FooMfg.NT.6.0]; NT 6.0 과 그 이후 버전을 지원 ; Empty model section 하지 않음 [FooMfg.NTx86.5.1];NT 5.1 및 이후 버전 ( 단, NT 6.0 이후는 지원하지 않음 ) 이후는 지원하지 않음 ) [FooMfg];Win9x/NT4/2K 는 지원하지 않음 ; Empty model section
25
디바이스 설치 멀티펑션 디바이스 멀티펑션 디바이스는 펑션별로 하나씩, 여러 개의 서로 다른 Devnode 를 설치 서로 다른 디바이스 셋업 클래스에 속하므로 복수의 INF 파일 필요 CopyINF [DDInstall] CopyINF=filename1.inf [,filename2.inf]…
26
USB 드라이버 스택 Win2K USB Hub (Bus) Driver usbhub.sys USB Client Device Driver Host Controller Driver usbd.sys Miniport Driver uhcd.sys Miniport Driver openhci.sys
27
USB 드라이버 스택 WinXP USB Client Device Driver USB Generic Parent Driver usbccgp.sys USB Hub (Bus) Driver usbhub.sys USB Client Device Driver USB Client Device Driver Host Controller Driver usbport.sys Miniport Driver usbuhci.sys Miniport Driver usbohci.sys Miniport Driver usbehci.sys
28
디버깅 및 기타 도구들 Driver Verifier Enhanced I/O Verification DMA Verification Deadlock Detection SCSI Verification
29
디버깅 및 기타 도구들 PnP 드라이버 테스트 %WinDDK%\tools\pnpdtest PnP IRP 를 전송하여 드라이버의 작동 상태를 검사 검사 항목 Removal Surprise Remove Rebalance Stress Demo
30
디버깅 및 기타 도구들 DeviceTree %WinDDK%\tools\devicetree 시스템에 설치 되어 있는 모든 드라이버와 PnP 디바이스 스택의 관계를 보여 주는 도구 드라이버 뷰 / PnP 뷰 Demo
31
디버깅 및 기타 도구들 전원 관리 %WinDDK%\tools\acpi\pmte %WinDDK%\tools\acpi\speeper 전원 상태 변경 검사 Demo
32
디버깅 및 기타 도구들 DevCon %WinDDK%\tools\devcon %WinDDK%\src\setup\devcon 텍스트 모드 디바이스 콘솔 장치관리자의 역할을 수행 Setup API, CfgMgr32 API 사용 Demo
33
디버깅 및 기타 도구들 디버깅 IEEE 1394 포트를 사용한 Host/Target 시스템 연결 드라이버 파일의 맵핑 커널 모드 드라이버 파일을 Host 에서 제공 많은 확장 명령어의 추가 및 버그 fix
34
디버깅 및 기타 도구들 디버깅 힌트 Host/Target 시스템 연결 Host – free build, 디버거 (WinDbg, Kd) Target – checked build Driver Verifier 가동 상태에서 테스트 모든 코드 / 실행 패쓰에 대해서 테스트 pnpdtest, sleeper emulator
35
Windows 디바이스 드라이버 Update Wrap up “ 마이크로소프트는 당신이 드라이버 개발 작업을 성공적으로 수행할 수 있기를 * 진심으로 * 원하고 있습니다.”
36
© 2001 Microsoft Corporation. All rights reserved.
Similar presentations