900 likes | 1.98k Views
Device Driver 란 무엇인가 ?. 1.Device Driver 의 개요. 2.Windows Device Driver 의 구조. 협우인포테크㈜ www.hyubwoo.com. 3.Embedded NT Device Driver 의 개요. Device Driver 의 개요. 교차 플랫폼 Device Driver 개발 툴. ISA - PCI - USB - PCMCIA Windows 95/98/2000/NT/CE. HW 를 Software 에 연결. DOS 시대 . 더 많은 드라이버를 가질수록 -
E N D
Device Driver란 무엇인가? 1.Device Driver의 개요 2.Windows Device Driver의 구조 협우인포테크㈜ www.hyubwoo.com 3.Embedded NT Device Driver의 개요
교차 플랫폼 DeviceDriver개발 툴 ISA - PCI - USB - PCMCIA Windows 95/98/2000/NT/CE
HW를 Software에 연결 DOS 시대... 더 많은 드라이버를 가질수록 - 더 많이 활용할 수 있습니다! 귀하의 App (EXE / DLL) 어플리케이션 BUS 하드웨어
HW를 Software에 연결 요즘... 귀하의 App (EXE / DLL) 어플리케이션 커널 모드 드라이버 (SYS or VxD) 드라이버 하드웨어
새로운 아키텍쳐의 장점: • 모든 어플리케이션이 하드웨어를 지원할 필요가 없음. • 시스템 혼란 가능성 감소. • 개발 노력 절감. • 어플리케이션 보호(가상 메모리).
Windows 디바이스 드라이버 Windows 95 VxD Windows NT SYS Windows 98 VxD / SYS (WDM) Windows 2000 SYS (WDM)
2. 계층적인 드라이버 3. Miniport 드라이버 • 단일 • 드라이버 어플리케이션 어플리케이션 어플리케이션 귀하의 드라이버 MINIPORT 귀하의 드라이버 귀하의 드라이버 드라이버 하드웨어 하드웨어 하드웨어 드라이버의 유형
디바이스 드라이버 작성 시도 • OS Internals 학습 • OS API (DDK, DDI, ..) 학습 • 운영체계간 드라이버가 호환되지 않음. • 커널 레벨 디버깅(WinDBG, WinDK,…) –“블루 스크린 에러” • 테스트되지 않은 하드웨어 취급
디바이스 드라이버 작성 시도 • 드라이버 안정성 • Microsoft사는 드라이버가 Windows NT를 불안정하게 만드는 주요 원인이라고 주장합니다. • Win NT 및 2000이 항상 호환되는 것은 아닙니다. • WDM은 Windows 98 및 2000간의 모든 호환성 문제를 해결하지는 못합니다. • 어떤 바이오스들은 호환성 문제를 일으키는 것으로 알려져 있습니다.
예상 개발 시간 드라이버당 1 – 4개월 모든 운영체계 마다...
Roadmap – Part I • 디바이스 드라이버 플랫폼 호환성 • WDM의 새로운 기능 • Plug and Play 드라이버의 작성 • WDM 드라이버의 Power Management • Windows Management Instrumentation (WMI) • Class/ Minidriver 개요 • Windows 2000와 Windows 98간의 호환성 • WDM 드라이버의 개발 및 테스트에 사용되는 DDK 툴
Windows 디바이스 드라이버아키텍쳐 –플랫폼 지원 Win 3.x Win 95 Win 98 VxD VxD+PnP VxD/PnP + WDM Win 2000 NT 3.x NT 4.x KMD + PnP + WDM KMD KMD VxD = Virtual x Device KMD = Kernel Mode Driver WDM = Windows Driver Model
Windows 디바이스 드라이버아키텍쳐 –핵심적인 차이점 • VxD (Windows 3.x 및 Windows 9x) • Windows 386 core 기반 • KMD (Windows NT 및 Windows 2000) • Windows NT core 기반 • WDM (Windows 98 및 Windows 2000) • Windows NT core 기반 • Plug and Play, Power Management, WMI 추가 • NT 보안은 포함되지 않음 • 파일 시스템, 네트워크, 비디오 지원되지 않음 • API 및 Class Drivers 모두 지원
WDM그 호환성의 신화 • 바이너리 호환으로 의도되었지만, Windows 2000용 WDM은 Windows 98 버전에서 발전된 것입니다. • 호환성 유지가 가능하지만, 개발자들은 주의할 필요가 있습니다.
Windows 2000의 새로운 기능 • Plug and Play • Power Management • WMI • WDM Class Drivers • 기타 (현재 사용하지 않음)
Windows 2000의 새로운 드라이버 기술 © Microsoft Corporation
Windows 2000의 새로운 드라이버 기술 © Microsoft Corporation
핵심 기능 및 이점 • Plug and Play • 하드웨어를 추가 및 삭제할 때 사용자의 수고를 덜어줌 • 휴대용 컴퓨터 장착 및 분리 지원 • 프로그램적인 하드웨어 리소스 할당 • 자동으로 적절한 해당 드라이버 로드
핵심 기능 및 이점 • Power Management • 밧데리 수명 연장 • 전원 요구량 절감 • 대기 및 재시작 지원 • Class/Minidriver 아키텍쳐 • 드라이버 계층화 가능 • 디바이스 특정 코드 분리 • Common 컨트롤 인터페이스
핵심 기능 및 이점 • Windows Management Instrumentation (WMI) WMI은 다음을 가능케 합니다 . . . • 디바이스 관리의 표준화 • 근거리 또는 원격 디바이스 관리 • 드라이버로부터 비동기적인 경고를 수신하는 어플리케이션 • 지능적인 데이터 수집 정책
WDM와 KMD 드라이버의 차이점 요약 • 버스 계산시 하드웨어를 감지하면 시스템이 PnP 드라이버를 설치. • 시스템이 Physical DEVICE_OBJECT (PDO)를 사용하여 구성 및 전원 관리를 위한 디바이스를 설계. • 드라이버가 Function DEVICE_OBJECTS (FDOs)를 PDO에 첨부. • 대부분의 하드웨어 상호작용은 HAL이 아닌 시스템 버스 드라이버에 의해 처리됨. . . . 계속
WDM와 KMD 드라이버의 차이점 요약 • DriverEntry 수정 • DriverUnload 수정 • 다음을 위한 IRP핸들러 • IRP_MJ_PNP • IRP_MJ_POWER • IRP_MJ_SYSTEM_CONTROL • 새로운 AddDevice 함수
; MyDevice.INF; install information for my device [version]signature="$Windows NT$“Class=ToasterProvider=%MyCorp% [Manufacturer]MyCorp=“MyCorp” [MyCorp]SuperToast=Toast_Inst,TBUS\777f_8888 . . . Class Installer WDM 드라이버 -INF 파일에 의한 설치 • INF 파일을 필요로 하는 PnP 드라이버의 설치 • INF 파일의 구성: • Device Class • 제조업체 • Hardware ID • 드라이버 파일명 • 하드웨어 리소스
Upper Filter Function Driver Lower Filter Bus Driver Hardware WDM 드라이버 -세가지 종류의 드라이버 • Bus Drivers (PDO) • Functional Drivers (FDO) • Filter Drivers
Bus Drivers (PDO) • 버스 계산 • Plug and Play 및 Power Management IRP에 반응 • 필요시 버스를 다중 억세스 • Microsoft가 USB, PCI, SCSI, PnpISA를 위한 드라이버 제공 Upper Filter Function Driver Lower Filter Bus Driver Hardware
FunctionDrivers (FDO) • 디바이스를 위한 메인 드라이버 • 기초 I/O 연산 관리 • 디바이스 지정 전원 요구량 관리 Upper Filter Function Driver Lower Filter Bus Driver Hardware
Filter Drivers • 값을 추가하거나 디바이스의 상태를 수정하는 선택적인 드라이버 • 드라이버 스택 내의 Function Driver 상위 또는 하위에 존재 Upper Filter Function Driver Lower Filter Bus Driver Hardware
WDM 드라이버 –일반적인 메시지 순서 • PnP 드라이버의 일반적인 이벤트 순서는 다음과 같습니다: • DriverEntry • AddDevice • LEGACY_BUS_INFORMATION • QUERY_RESOURCE_REQUIREMENTS • FILTER_RESOURCE_REQUIREMENTS 연결된 USB 디바이스 • START_DEVICE • QUERY_CAPABILITIES • QUERY_PNP_DEVICE_STATE • QUERY_DEVICE_RELATIONS • QUERY_DEVICE_RELATIONS 디바이스 시작 및 사용 준비 • QUERY_REMOVE • REMOVE • Unload 사용자가 디바이스 제거 요청
WDM 드라이버 –DriverEntry • 드라이버를 처리하는 IRP를 위한 Dispatch Routine 설정 • 전역 변수 초기화 • 디바이스 오브젝트를 생성하지 않음 – AddDevice 호출 대기
WDM 드라이버 –AddDevice • 디바이스가 감지될 때마다 모든 디바이스 요청 • Functional Device Object (FDO) 생성 • FDO를 PDO에 첨부 • Symbolic Link 또는 디바이스 인터페이스 인스턴스를 선택적으로 생성 • 그 디바이스를 위한 전원 상태 설정 • 실제 하드웨어를 억세스하지 않을 수도 있음 – IRP_MN_START_DEVICE 대기
WDM 드라이버 –Plug and Play IRPs • 그 다음 메시지 셋은 IRP_MJ_PNP의 하위 함수입니다 : • LEGACY_BUS_INFORMATION • 내부적으로 사용됨. 스택내의 다음 디바이스로 전달. • QUERY_RESOURCE_REQUIREMENTS • 대부분의 Function 드라이버들이 이 IRP를 버스 드라이버상에 전달. • FILTER_RESOURCE_REQUIREMENTS • 하위 디바이스로부터 리턴되는 이 IRP를 수정하여, Function 드라이버는 디바이스의 리소스 요구량을 조정할 수 있음.
WDM 드라이버 –IRP_MN_START_DEVICE • 디바이스가 준비되었을 때 드라이버로 전송됨 • 디바이스에 할당된 하드웨어 리소스가 드라이버로 전달됨 • 드라이버가 디바이스에 전원 공급 • 드라이버가 인터럽트를 연결하고 다른 장치의 초기화 수행.
WDM 드라이버 –다른 Plug and Play IRP들 • IRP_MN_QUERY_CAPABILITIES • 스택 내의 모든 드라이버들이 디바이스 성능을 확인합니다. • IRP_MN_QUERY_PNP_DEVICE_STATE • 드라이버는 디바이스가 존재, 제거, 또는 사용 불가 되었는지 등을 반드시 지시해야 합니다. • IRP_MN_QUERY_DEVICE_RELATIONS • 버스 상에 어떤 디바이스가 존재하는지 알리기 위해서 버스 드라이버에 의해 처리됩니다.
WDM 드라이버 –디바이스 제거 • IRP_MN_QUERY_REMOVE • 디바이스가 제거될 수 있는지 확인하기 위해 시스템에 의해 전송됨. • 드라이버는 남아있는 IRP들을 몰아내고 새로운 요청을 거부. • IRP_MN_REMOVE_DEVICE • 디바이스가 제거됨 • 드라이버는 모든 리소스를 해제해야 합니다. • Unload • DriverEntry 기간 동안 드라이버는 점유되었던 모든 리소스를 해제
귀하가 작성하는 드라이버의 유형에 따라, 처리해야 할 추가적인 메시지가 있습니다. : WDM 드라이버 –다른 PnP IRP들
Plug and PlayState Machine © Microsoft Corporation (see DDK)
WDM 드라이버-일반적인 PnP 핸들러 (DDK) case IRP_MN_QUERY_STOP_DEVICE: // // If we can stop the device, we need to set the HoldNewRequests flag, // so further requests will be queued. We don't care about processing // some old requests (if there are any), because we expect to be // started again in the future. // if (!fdoData->IsStarted) { // // If we aren't started, we'll just pass the irp down // A driver has no reason to veto a query when he // is stopped already. // IoSkipCurrentIrpStackLocation (Irp); status = IoCallDriver (fdoData->NextLowerDriver, Irp); SD_IoDecrement(fdoData); return status; } [continued]
WDM 드라이버-일반적인 PnP 핸들러 (DDK) // // We can't be removed at this point // ASSERT(!fdoData->IsRemoved); status = pSD_CanStopDevice(DeviceObject, Irp); Irp->IoStatus.Status = status; if (NT_SUCCESS(status)) { // // First, don't allow any requests to be passed down // fdoData->HoldNewRequests = TRUE; SD_DebugPrint((3, "Query - stop holding requests...\n")); // // Then, wait for the existing ones to be finished // (since we expect to give up our resources, we // can't allow such requests). First, we need to decrement // this very operation (and to keep in mind not to decrement // after the switch). // SD_IoDecrement(fdoData); [continued]
WDM 드라이버-일반적인 PnP 핸들러 (DDK) KeWaitForSingleObject( &fdoData->StopEvent, Executive, // Waiting for reason of a driver KernelMode, // Waiting in kernel mode FALSE, // No alert NULL); // No timeout IoSkipCurrentIrpStackLocation (Irp); status = IoCallDriver (fdoData->NextLowerDriver, Irp); goto exit; } else { // // The device can't be stopped, complete the request // IoCompleteRequest(Irp, IO_NO_INCREMENT); } break; [end]
Plug and Play 요약 • Windows 2000을 위한 완벽한 WDM 드라이버의 제작은 복잡합니다! • 만약 귀하의 드라이버가 시스템에서 동적으로 제거될 수 있다면, 새로운 드라이버를 작성하십시오. 몇 가지는 재사용이 가능합니다. • 제거할 수 없는 디바이스를 위한 Legacy 드라이버는 재작성할 필요없이 WDM용으로 갱신이 가능합니다.
Power Management • 적용 분야. . . • 다른 전원 레벨에서 동작하는 디바이스 • 외부 신호(전화 등)가 수신되면 휴지 상태의 시스템을 Wake up
전원 상태 • 두 가지 전원 상태 • 디바이스 전원 상태 • D0 – Fully powered (지원 필요) • D1 – Sleep 1 • D2 – Sleep 2 • D3 – Off (지원 필요) • 시스템 전원 상태 • S0 – On • S1 – Sleep 1 • S2 – Sleep 2 • S3 – Sleep 3 • S4 – Hibernate • S5 – Off
전원 관리 정책 소유자 • 전원 정책은 시스템 전원 상태를 디바이스 전원 상태에 매핑시킵니다. • 모든 물리적 디바이스에 대해, 디바이스의 전원 정책을 구현하는데 책임있는 드라이버는 하나가 존재합니다.
전원 정책 소유자 임무 • AddDevice 루틴 내에 디바이스의 초기 전원 상태 설정 • 시스템 상태 변경시 디바이스 전원 상태 수정 • 디바이스가 유휴상태인 것을 감지하면, 대기 상태로 전환 • 적절한 때가 되면 디바이스에 모든 전원을 리턴 • Wake-Up 신호가 발생한 것을 감지하고, 그 디바이스를 Wake Up
전원 관리 IRP들 • IRP_MJ_POWER의 하위 함수: • Power Manager에 의해 전송 • QUERY_POWER • SET_POWER • 전원 정책 소유자에 의해 전송 • WAIT_WAKE (시스템을 Wake Up시키는 디바이스에 의해 사용됨) • POWER_SEQUENCE (전원 상태 변화 최적화를 위해 사용됨)
전원 관리 책임 • 시스템 • 적절한 시스템 전원 상태 결정 • 시스템 상태를 드라이버에 공지 • 전원 관리 정책 소유자 • 시스템 상태에 근거하여 올바른 디바이스 전원 상태 결정 • SET_POWER IRP 요청 • 전원이 꺼진 상태에서는 IRP 프로세싱 연기 • 모든 WDM 드라이버 • POWER IRP가 디바이스 스택을 전달할 수 있도록 함
전원 관리 요약 • 전원 관리는 WDM 아키텍쳐의 중요한 컴포넌트입니다. • 전원 모델은 시스템 전원 상태와 디바이스 전원 상태를 사용합니다. • 전원 정책 관리자는 시스템 상태와 디바이스 상태를 매핑시킵니다. • 만약 귀하의 디바이스가 낮은 전원 상태를 가지고 있지 않고, 시스템을 Wake Up시킬 수 없다면, 전원 IRP를 디바이스 스택에 전달하기만 하면 됩니다.