Difference between r1.11 and the current
@@ -2,7 +2,29 @@
-- 김도집 [[DateTime(2005-09-21T05:50:34)]]
[[TableOfContents]]
== 개요 ==
마이크로소프트 윈도우즈 운영체제(특히 윈도우 2000 이후 버전)에서 디바이스 드라이버를 작성하는 방법에 대한 대략적인 내용을 다룬다.
=== 위키 내 관련 문서 ===
* [wiki:WdmApi WDM API]
* [wiki:김도집/LPT 병렬 포트]
== 개발 환경 ==
WDM를 개발하기 위해서는 다음과 같은 것들이 필요하다:
||DDK||디바이스 드라이버를 개발하기 위한 개발 도구 및 API들을 제공한다 (필수)||
||VC++ 6.0||디바이스 드라이버를 컴파일 하기 위하여 필요하다 (필수)||
||Platform SDK||기타 유용한 도구 및 API를 제공한다 (선택)||
||Compuware Driver Studio||드라이버 개발을 위한 통합 환경을 제공한다. (선택, 상용)||
== 기타 유용한 도구들 ==
||WinDbg||윈도우 디버거||
||WinObj||디바이스명과 심볼릭 링크 디바이스 명을 확인할 수 있다||
||OSRLoader||디바이스 파일을 적제/해제할 수 있는 도구이다||
== WinDbg ==
WinDbg는 마이크로소프트 웹사이트에서 다운 받을 수 있다.
* [http://www.microsoft.com]
=== VMWare + WinDbg ===
WinDbg는 VMWare의 "named pipe"라는 것을 이용하여 가상 머신과 통신할 수 있다.
1. VMWare의 가상 머신으로 윈도우를 설치한다.
@@ -21,10 +43,12 @@
1. 이제 가상 머신의 윈도우를 부팅한다.
1. 가상 머신의 C:\boot.ini를 다음과 수정같이 추가한다.
{{{
multi(생략0) disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000
Debug" /fastdetect /DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200
}}}
/!\ 위 내용은 한 줄에 모두 써야 하는 것이다.
1. VMWare의 가상 머신을 시작 한다.
@@ -36,7 +60,7 @@
}}}
1. WinDbg를 실행한다.
1. 이제 가상 머신의 윈도우를 시작하면 된다.
=== WinDbg 사용 ===
WinDbg를 실행한 후 처음으로 설정해야 하는 것들이 있다. 그중 하나가 심볼을 등록하는 것이다.
File->Symbol File Path.. 를 선택한 후 다음을 입력한다:
@@ -70,19 +94,31 @@
'''모듈에 포함된 심볼 확인하기'''
kd> 프롬프트에서 ''x'' 명령을 이용한다. 예를 들어 NTDLL에 포함된 심볼을 확인하고자 한다면 ''x NTDLL!''라고 입력한다.
'''브레이크 모드에서 빠져나오기'''
kd> 프롬프트에서 ''g''를 입력한다.
== 드라이버 스튜디오 ==
Compuware의 driver studio는 상용 도구이다. 이를 이용하여 드라이버를 쉽게 개발할 수 있으며 매우 강력하고 유용한 도구들을 제공한다.
* [wiki:/DriverStudio]
== 관련 서적 ==
다음은 WDM과 관련하여 도움이 되는 서적들을 나열한다.
=== WDM 서적 ===
||[[ISBN(8989975069,k,img=GIF)]]||[[ISBN(8980545290,k)]]||[[ISBN(8956741476,img=GIFk)]]||
=== 윈도우 내부 구조 이해 ===
||[[ISBN(0735619174)]]||[[ISBN(0735610215)]]||
Inside Microsoft Windows 2000 3/E는 절판 된 책으로 Windows Internals 4/E가 그 후속 판이라고 보면 된다.
== 유용한 온라인 사이트 ==
* KELP WDM 소모임 [http://www.kelp.or.kr[바로가기]]
* Korea Operating System Research(KOSR) [http://www.kosr.org[바로가기]]
* 데브피아라는 드라이버 개발자 포럼이다. [http://www.devpia.com/Forum/mdmIndex.aspx?forumname=DevPartner[바로가기]]
* OSR Online - 외국 사이트로 유용한 자료와 유틸들을 구할 수 있다. [http://www.osronline.com[바로가기]]
* A simple demo for WDM Driver development [http://www.codeproject.com/system/WDM_Driver_development.asp [바로가기]]
Windows Driver Model #
-- 김도집 2005-09-21 14:50:34
마이크로소프트 윈도우즈 운영체제(특히 윈도우 2000 이후 버전)에서 디바이스 드라이버를 작성하는 방법에 대한 대략적인 내용을 다룬다.
WDM를 개발하기 위해서는 다음과 같은 것들이 필요하다:
DDK | 디바이스 드라이버를 개발하기 위한 개발 도구 및 API들을 제공한다 (필수) |
VC++ 6.0 | 디바이스 드라이버를 컴파일 하기 위하여 필요하다 (필수) |
Platform SDK | 기타 유용한 도구 및 API를 제공한다 (선택) |
Compuware Driver Studio | 드라이버 개발을 위한 통합 환경을 제공한다. (선택, 상용) |
1.3 기타 유용한 도구들 #
?WinDbg | 윈도우 디버거 |
?WinObj | 디바이스명과 심볼릭 링크 디바이스 명을 확인할 수 있다 |
?OSRLoader | 디바이스 파일을 적제/해제할 수 있는 도구이다 |
?WinDbg는 마이크로소프트 웹사이트에서 다운 받을 수 있다.
1.4.1 ?VMWare + ?WinDbg #
?WinDbg는
?VMWare의 "named pipe"라는 것을 이용하여 가상 머신과 통신할 수 있다.
- ?VMWare의 가상 머신으로 윈도우를 설치한다.
- ?VMWare의 "Virtual Machine Setting"에서 "Hardware"탭을 선택하고 Serial Port를 추가하기 위하여 "Add" 버튼을 클릭한다.
- "Serial Port"를 선택한다.
- Serial Port Type에서 "Output to named pipe"를 선택한다.
- Specify Named Pipe에서 다음과 같이 입력한다.
\\.\pipe\vm_com
This end is the server
This other end is a virtual machine
Device status의 "Connect at power on"의 체크 박스를 선택한다.
- 이제 새 시리얼 포트가 하나 만들어졌다. 만들어진 시리얼 포트를 선택하면 "Hardware" 탭에 I/O mode에 "Yeild CPU on poll"라는 체크 박스를 선택한다.
- 이제 가상 머신의 윈도우를 부팅한다.
- 가상 머신의 C:\boot.ini를 다음과 같이 추가한다.
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000
Debug" /fastdetect /DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200
위 내용은 한 줄에 모두 써야 하는 것이다.
- ?VMWare의 가상 머신을 시작 한다.
- 이후 호스트 컴퓨터에 설치된 ?WinDbg의 단축 아이콘의 속성을 연다.
- 등록 정보창의 "바로가기"탭의 대상에서 다음과 같이 수정한다.
"windbg.exe" -k com:pipe,port=\\.\pipe\vm_com
- ?WinDbg를 실행한다.
- 이제 가상 머신의 윈도우를 시작하면 된다.
?WinDbg를 실행한 후 처음으로 설정해야 하는 것들이 있다. 그중 하나가 심볼을 등록하는 것이다.
File->Symbol File Path.. 를 선택한 후 다음을 입력한다:
srv*C:\WinDbgSymbols*http://msdl.microsoft.com/download/symbols
위의 내용 중 C:\
?WinDbgSymbols는 사용자가 직접 디렉토리를 만들어주어야 한다.
브레이크 설정하기
Ctrl+Break 키를 누르면 브레이크가 걸린다.
심볼 경로 확인하기
브레이크를 건 상태에서 kd> 프롬프트에
.sympath를 입력한다.
심볼이 정상적으로 로드되었는지 확인하기
kd> 프롬프트에서
lm를 입력한다.
특정 심볼 로드하기
kd> 프롬프트에서
ld 명령을 이용한다. hal 심볼을 로드하고자 한다면
ld hal이라고 입력한다.
모듈에 포함된 심볼 확인하기
kd> 프롬프트에서
x 명령을 이용한다. 예를 들어 NTDLL에 포함된 심볼을 확인하고자 한다면
x NTDLL!라고 입력한다.
브레이크 모드에서 빠져나오기
kd> 프롬프트에서
g를 입력한다.
1.5 드라이버 스튜디오 #
Compuware의 driver studio는 상용 도구이다. 이를 이용하여 드라이버를 쉽게 개발할 수 있으며 매우 강력하고 유용한 도구들을 제공한다.
다음은 WDM과 관련하여 도움이 되는 서적들을 나열한다.
1.6.2 윈도우 내부 구조 이해 #
Inside Microsoft Windows 2000 3/E는 절판 된 책으로 Windows Internals 4/E가 그 후속 판이라고 보면 된다.
1.7 유용한 온라인 사이트 #
- KELP WDM 소모임 [바로가기]
- Korea Operating System Research(KOSR) [바로가기]
- 데브피아라는 드라이버 개발자 포럼이다. [바로가기]
- OSR Online - 외국 사이트로 유용한 자료와 유틸들을 구할 수 있다. [바로가기]
- A simple demo for WDM Driver development [바로가기]