윈도우 디바이스 드라이버(2,4)

Download Report

Transcript 윈도우 디바이스 드라이버(2,4)

윈도우 디바이스 드라이버
청강문화산업대
컴퓨터정보과
이 봉 석 교수
Chapter 2. 세상에서 가장 간단한
디바이스드라이버 작성하기
문맥의 의미
• 윈도우의 소프트웨어모듈활용에 대한 대
전제
“재활용할 수 있는 소프트웨어 모듈은 반
드시 재활용한다”
• 문맥이란 CONTEXT 를 의미한다
“코드(Code)는 공유하고 데이터(Data)는
각각 사용하는 목적에 맞도록 사용하게 하
기 위하여 이를 관리하기 위한 핸들 혹은
구분자역할을 담당한다”
DEVICE_OBJECT와
DeviceExtension
DeviceExtension
Device Object
Device Object
Device Object
DeviceExtension
DeviceExtension
Device Extension #2
Device Extension #3
Device Extension #1
DeviceExtension의 응용
Device
Object(B:)
Device Object(A:)
DeviceExtension
ControllerContext
DeviceExtension
ControllerContext
IOPort = XXX
Device Extension
Device Extension
Controller Context
SIMPLE 드라이버와 구성파일
드라이버생성을 위한 환경창열기
환경창의 환경변수정의
환경창에서 드라이버 빌드하기
드라이버설치작업
드라이버설치작업
드라이버설치작업
드라이버설치작업
드라이버설치작업
드라이버설치작업
드라이버설치작업
드라이버설치작업
드라이버설치작업
드라이버설치결과 확인
드라이버설치결과 확인
드라이버설치결과 확인
드라이버설치결과 확인
드라이버설치결과 확인
드라이버설치결과 확인
드라이버설치결과 확인
드라이버설치결과 확인
Chapter 4. 디바이스 스택
(Device Stack)
버스구조의 추상적인 모습
Mouse
PCI BUS
CPU
MEMORY
Root Root
Hub Hub
USB Host
Controller
PCI
Bridge
PCI
Bridge
PCI BUS는 USB Host
Controller 를 구동시킨다
Root Hub는 연결된 Mouse
를 구동시킨다
Network
Card
PCI BUS
PCMCIA
Controller
USB Host Controller는
Root Hub를 구동시킨다
USB Host Controller와 RootHub
Root Hub
PDO
Root Hub
PDO
Root Root
Hub Hub
USB Host
Controller
USB Host Controller
Driver(DriverObject)
USB Host Controller
FDO
USB Host Controller와 RootHub
Root Hub
FDO
Root Hub
PDO
PCMCIA
Controller
DeviceStack
PCI Bus
FDO
IDE Controller
USB Host Controller
PDO
DeviceStack
Audio Chip
Network Card
USB Host Controller
FDO
DeviceStack
DeviceStack
Root Hub
FDO
Root Hub
PDO
장치관리자의 연결순서별 보기
307-00
ACPI 다중 프로세서 PC
Microsoft ACPICompliant System
PCI 버스
Intel® 82801G …
USB Host Controller
USB 루트 허브
USB 휴먼
인터페이스 장치
HID 규격 마우스
디바이스스택과
연결순서별 보기의 비교
307-00
PCI FDO
PCI.SYS
PCI PDO
ACPI.SYS
UHost FDO
USBUHCI.SYS
USBHUB FDO
USBHUB.SYS
UHost PDO
ACPI 다중 프로세서 PC
Microsoft ACPICompliant System
PCI 버스
USBHUB PDO
Intel® 82801G …
USB Host Controller
USBHID FDO
USBHID PDO
USB 루트 허브
HIDUSB.SYS
MOUCLASS.SYS
HIDMOUSE FiDO
MOUHID.SYS
HIDMOUSE FDO
HIDMOUSE PDO
USB 휴먼
인터페이스 장치
HID 규격 마우스
PCI버스를 부모로 하는 모습
307-00
ACPI 다중 프로세서 PC
Microsoft ACPICompliant System
PCI 버스
Intel® 82801G …
USB Host Controller
Microsoft UAA BusDriver
For High Definition Audio
PCI FDO
PCI.SYS
PCI.SYS
PCI PDO
USBUHCI.SYS
ACPI.SYS
HDAUDBUS.SYS
UHost FDO
UAA BusDriver FDO
UHost PDO
UAA BusDriver PDO
“모뎀”장치와 장치인스턴스ID
서비스와 장치하위필터
“모뎀”과 디바이스스택
MODEM.SYS
TOSHIBA Software Modem AMR FDO
TOSHIBASOFTMODEM.SYS
TOSHIBA Software Modem AMR FiDO
PCI.SYS
TOSHIBA Software Modem AMR PDO
“모뎀”과 시스템레지스트리
클래스상위필터
“모뎀”과 시스템레지스트리
클래스하위필터들
“다른종류”의 디바이스스택과
구성요소
설치파일에 의해서
제공되는 장치상위필터
???서비스드라이버
기능층 Functional Device Object(FDO)
PFC서비스드라이버
Class LowerFilter Device Object(FiDO)
BsStor서비스드라이버
Class LowerFilter Device Object(FiDO)
PxHelp20 서비스드라이버
Class LowerFilter Device Object(FiDO)
설치파일에 의해서
제공되는 장치하위필터
???서비스드라이버
BusDriver Physical Device Object(PDO)
“모뎀”과 시스템레지스트리
설치파일에서 기능층서비스드라이버를
제공하지 않는 경우에 사용되는 디폴트
서비스드라이버가 명시되어 있다
“PS/2 키보드”과 디바이스스택
KBDCLASS서비스드라이버
Class UpperFilter Device Object(FiDO)
i8042prt서비스드라이버
기능층 Functional Device Object(FDO)
ACPI서비스드라이버
BusDriver Physical Device Object(PDO)
“PS/2 키보드”과 디바이스스택
NULL
AttachedDevice KBDCLASS서비스드라이버
Class UpperFilter Device Object(FiDO)
StackSize = 7
AttachedDevice
i8042prt서비스드라이버
기능층 Functional Device Object(FDO)
StackSize = 6
AttachedDevice
ACPI서비스드라이버
BusDriver Physical Device Object(PDO)
StackSize = 3
FDO->StackSize값이
PDO->StackSize값보다 크기만
하면 된다. 그 차이값은 중요하지
않다!
“PS/2 키보드”발견과
디바이스스택구성순서
ACPI 버스
1
ACPI버스드라이버
PS/2 컨트롤러(주포트)발견
PNP관리자에게 PDO 전달
3
PDO 생성
2
NULL
AttachedDevice
ACPI서비스드라이버
BusDriver Physical Device Object(PDO)
StackSize = 1
4
시스템레지스트리(하드웨어키)
레지스트리정보획득
PNP관리자(OS)
디바이스스택을 구성하기
위한 상위드라이버호출준비
“PS/2 키보드”발견과
디바이스스택구성순서
시스템레지스트리
2 그다음 호출한다
PNP관리자(OS)
1 먼저 호출한뒤,
디바이스스택구성을 위한
드라이버호출순서결정
1. 기능층서비스드라이버(i8042prt)를 먼저 호출해야한다!
2. 클래스상위필터서비스드라이버(KBDCLASS)를 그다음 호출해야 한다!
I8042prt서비스드라이버’s AddDevice()함수
KBDCLASS서비스드라이버’s AddDevice()함수
“PS/2 키보드”발견과
디바이스스택구성순서
PNP관리자(OS)
DeviceObject생성
1
I8042prt서비스드라이버’s AddDevice()함수
NULL
StackSize값 변경
AttachedDevice i8042prt서비스드라이버
기능층 Functional Device Object(FDO)
StackSize = 2
2
DeviceObject연결
AttachedDevice
ACPI서비스드라이버
BusDriver Physical Device Object(PDO)
StackSize = 1
3
“PS/2 키보드”발견과
디바이스스택구성순서
PNP관리자(OS)
NULL
KBDCLASS서비스드라이버’s AddDevice()함수
1 DeviceObject생성
DeviceObject생성
AttachedDevice KBDCLASS서비스드라이버
Class UpperFilter Device Object(FiDO)
FDO와의 연결
StackSize = 3
2
3
StackSize
변경작업
AttachedDevice i8042prt서비스드라이버
기능층 Functional Device Object(FDO)
StackSize = 2
AttachedDevice
ACPI서비스드라이버
BusDriver Physical Device Object(PDO)
StackSize = 1
SIMPLE 장치를 위한 디바이스스택
SIMPLE Functional Device Object(FDO)
BusDriver Physical Device Object(PDO)
SIMPLE 디바이스스택 확인작업
StackSize
PDO
FDO
키보드 디바이스스택 확인작업
ACPI버스드라이버
PDO
FDO
FiDO(Class)
디스크 디바이스스택 확인작업
클래스상위필터 FiDO
주서비스 FDO
버스드라이버 PDO
디스크 디바이스스택 확인작업
ATAPI버스드라이버
PDO
???
FDO
FiDO
ACPI가 개입된
디바이스스택의 특수성
NULL
PARTMGR 서비스드라이버가
생성한 FiDO
DISK 서비스드라이버가 생성한
FDO
NULL
ACPI 서비스드라이버가 생성한
FiDO
ACPI 서비스드라이버가 생성한
FiDO
ATAPI 버스드라이버가 생성한
PDO
ATAPI 버스드라이버가 생성한
PDO
생성된 디스크드라이브DeviceStack
해제된 디스크드라이브DeviceStack