본문 바로가기

programming/WDM

윈도우 디바이스 드라이버 개발환경 구축 - 펌

윈도우 디바이스 드라이버 개발환경 구축


디바이스 드라이버가 처음이신 분들이라면 , 아직 개념 및 용어 이해에 어려움이 있었을 것으로 본다 . 그것은 아마도 실제 개발을 해보지 않은 상태에서 이론적인 내용만 가지고 이해하려다 보니 어려웠을 것으로 보인다 . 그래서 , 이번 컬럼에서는 디바이스 드라이버를 실습해 볼 수 있는 개발 환경 구축에 대한 내용을 다뤄 보도록 하겠다 . 글의 내용은 윈도우 디바이스 드라이버 개발에 필요한 개발 툴 소개 , 개발 환경 구축 , 실제 컴파일 예 순서로 내용을 살펴보겠다


1.
윈도우 디바이스 드라이버 개발 툴 소개

Driver Development Kit ( DDK )
( http://www.microsoft.com/whdc/DevTools/ddk/default.mspx )
:
윈도우 디바이스 드라이버를 하기 위해 필수적인 준비해야 하는 툴로 , 드라이버 개발에 필요한 컴파일러 , 라이브러리 , 헤더 파일 이외에 도움말 문서 , 샘플 코드 , 그리고 유용한 유틸리티 등이 함께 제공된다 . DDK Windows 버전마다 출시가 되고 , 현재 Vista 가 출시된 이후로는 WDK 로 통합되었다 . DDK 버전 중에 2003 SP1 DDK 는 웹을 통해 무료로 다운로드 받을 수 있고 , 다른 버전들은 MSDN 을 통해 구할 수 있다 .


Windows Driver Kit (WDK)
( http://www.microsoft.com/whdc/DevTools/WDK/aboutWDK.mspx )
: WDK
는 기존 DDK 의 업그레이드 된 버전으로 , Windows Vista 출시에 맞춰서 나왔다 . WDK 구성 요소를 보면 기존 DDK 내용에 WDF 모델 , IFS Kit, 검증 툴 , 배포 기능 , 윈도우 로고 인증 테스트 툴 등이 추가되었다 . 하나의 툴로 개발 , 테스트 , 인증 , 디버깅을 통합하려는 목적으로 만들어졌다 . 하지만 , 용량이 커져서 설치하는데 시간이 좀 걸리는 불편함이 있다 . 현재 WDK 는 웹을 통해 무료로 다운로드 받을 수 있다 .


Windows Logo Kit ( WLK )
( http://www.microsoft.com/whdc/DevTools/WDK/aboutWDK.mspx )
(
http://www.microsoft.com/whdc/winlogo/default.mspx )
:
윈도우 로고 인증을 위한 테스트 툴들을 묶어놓은 키드이다 . ( Driver Test Manager : DTM 등등 ). 원래는 WDK 에 포함되었으나 , 사용자들의 요구로 인해 별도의 키트로 분리되었다 . 만약 여러분이 윈도우 로고 인증을 받고자 한다면 , WLK 를 설치해 테스트 결과를 가지고 윈도우 로고 프로그램을 진행하면 된다 .


Installable File System (IFS) Kit
( http://www.microsoft.com/whdc/DevTools/IFSKit/default.mspx )
:
윈도우 커널 모드 파일시스템과 파일 시스템 필터 드라이버 모델을 개발할 수 있는 키트이다 . 파일시스템 관련 샘플 소스 및 다양한 문서들을 제공하고 있다 .


WinDbg
( http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx )
:
윈도우 커널 및 디바이스 드라이버 그리고 , 애플리케이션을 디버깅할 수 있는 디버거 이다 . Microsoft 에서 무료로 배포되며 , 강력한 윈도우 커널 디버깅 기능을 제공해준다 . 기존에 Soft-ICE 라는 디버거가 있을 때는 WinDbg Soft-ICE 가 윈도우 커널 디버거의 양대산맥 이었으나 , 2006 년 이후로 Soft-ICE 가 단종되는 바람에 , WinDbg 가 최강의 디버거가 되었다 .

WinDbg 를 이용한 디버깅 방법은 2 대의 PC ( 디버깅 당하는 PC , 디버깅 하는 PC ) 가 필요하고 , remote 로 연결 해 디버깅을 하게 된다 . 처음에는 PC 2 개가 필요하고 , 설정과정도 여러 단계를 거쳐야 해서 복잡하게 느껴질 수 있지만 , 설정만 잘 해 놓으면 , 그 다음부터는 디버깅 하는 데 크게 어려움이 없을 것이다 .

참고적으로 , WinDbg Windows 9x( 95/98/ME ) 계열은 지원하지 않는다 . 그래서 Windows 9x 계열은 아직도 Soft-ICE 를 사용해야 하는 상황이다 . 이유는 Microsoft 에서 Windows 9x 계열을 지원하는 제대로 된 디버거 가 없기 때문이다 . 그래서 필자도 Windows 9x 계열을 디버깅할 때는 Soft-ICE 를 사용하고 있다 .

위와 같은 개발 툴을 이해했으면 이제 툴들을 준비하자 .

필수적으로 준비할 툴들은 WDK ( or DDK ), WinDbg 툴이 될 것이다 . 그리고 소스 편집을 위한 소스에디터 정도만 있으면 드라이버 개발에 필요한 환경은 준비되었다고 볼 수 있다 .
그럼 , 이제 본격적으로 개발 툴 설치 및 실제 개발 환경에 대해서 알아보기로 하겠다 .

 

Microsoft 에서는 윈도우 버전에 따른 추천하는 driver kit, test kit 종류들을 제시하고 있다 .
(
http://www.microsoft.com/whdc/driver/foundation/WhichDDK.mspx )


If you write drivers for…

Use this driver kit

Use this test kit

Microsoft Windows Vista
( x86, x64, AMD64 )

Windows Vista WDK

Windows Logo Kit 1.0c

Microsoft Windows 2003 SP1
( x86, x64, AMD64 )

Windows Vista WDK

Windows Logo Kit 1.0c

Windows XP 64bit Edition 2003
( Itanium only )

Windows Vista WDK

Windows Logo Kit 1.0c

Windows XP 64bit Edition

Windows Vista WDK

Windows Logo Kit 1.0c

Windows XP family
( including Service Pack 2 )

Windows Vista WDK

Windows Logo Kit 1.0c

Windows 2000 family

Windows Vista WDK

Windows Logo Kit 1.0c


위의 표에서 보듯이 대부분의 윈도우 버전에서 WDK 를 사용해 드라이버를 개발하도록 권장하고 있다 . 이것은 WDK DDK 보다 새 버전의 컴파일러 및 라이브러리 지원 그리고 기타 내용들이 최신내용으로 업데이트 되었기 때문이다 . 그렇다고 예전 DDK 를 사용해 드라이버를 개발 못 하는 건 아니다 . 만약 , 지금 시점에서 처음 디바이스 드라이버 개발을 시작한다면 WDK 를 사용하길 바란다 .

 

2. WDK 설치 및 컴파일  

1) WDK 다운로드 및 설치 ( http://www.microsoft.com/whdc/DevTools/WDK/WDKpkg.mspx )
- Connect
사이트 로그인
- WDK
프로그램 등록
- WDK
다운로드 받
다운로드 받은 파일은 ISO 파일이므로 Virtual CD 디스크를 생성하거나 , CD 로 구운 후에 설치 작업을 하면 된다 .

•  디바이스 드라이버 빌드
우선 , 디바이스 드라이버를 만들기 필요한 파일 내용들을 살펴보고 , 빌드 순서에 따라 드라이버를 만들어보자


구분

내용

Sources 파일

드라이버 컴파일 설정 내용이 들어있는 파일이다 . 내용은 스크립트 형태로 만들고 , 드라이버 생성될 파일이름 , 생성 폴더 위치 , 컴파일 할 파일 목록 등의 내용이 들어간다 .
(
http://msdn2.microsoft.com/en-us/library/ms792417.aspx )

MAKEFILE 파일

드라이버 컴파일 때 사용되는 파일이지만 개발자가 이 파일에 내용을 수정할 일은 없다 . 다른 샘플 소스의 내용을 복사해서 사용해도 무방하다 .
(
http://msdn2.microsoft.com/en-us/library/ms791617.aspx )

디바이스 드라이버 소스
파일 ( *.c, *.h )

디바이스 드라이버에 실제 소스에 해당되는 파일들이다 .

Resource File ( *.rc )

드라이버 버전 정보가 들어갈 리소스 파일이다 .


- Build
순서

(1) 디바이스 드라이버 관련 파일 생성
파일을 만드는 방법은 특정 툴을 사용해 파일을 만드는 것이 아니라 , 여러분이 사용하는 편집기를 통해 위의 표에 있는 파일들을 작성하시면 됩니다 .

(2) WDK ( or DDK ) 빌드 환경 선택
WDK
툴에서는 두 가지 형태의 다양한 O/S, CPU 구조에 따른 빌드 환경을 제공한다 . 디바이스 드라이버를 어떤 형태로 만들지에 따라 빌드 환경이 선택되는데 크게 2 가지 환경으로 나눠 볼 수 있다 .

 Checked ( Debug ) 빌드 환경
: 개발자용으로 드라이버를 만들 때 사용하는 환경이고 , 컴파일 할 때 드라이버에 디버깅 정보가 추가되어진다 .


 Free ( Release )
빌드 환경

: Checked
빌드와 반대로 실제 사용자들에게 배포할 때 사용되는 빌드 환경으로 , 개발 후 최종 버전을 만들 때 이용한다 .

여러분이 개발하려는 형태에 따라 2 가지 빌드 환경 중에 한 가지를 선택하시면 된다 .

그리고 , 좀 있다가 실제 빌드 환경 화면 내용을 보겠지만 , WDK 에서는 제공되는 빌드 환경은 Visual Studio 같은 화려한 GUI 통합 개발 환경을 제공하지 않는다 . 대신 간단한 Command 창이 생성되고 , UNIX LINUX 처럼 text 모드로 명령들을 입력하는 형태이다 .

기존 GUI 개발 환경에 익숙한 개발자 분들은 불편하게 느껴질지 모르겠다 . 그래서이런 불편함을 해결하고자 Visual Studio IDE 개발 환경과 연동해서 빌드 하는 방법을 사용하고 있다 .
(
http://blog.naver.com/process3.do?Redirect=Log&logNo=20031377259 )
하지만 , 이번 컬럼 에서는 IDE 연동 환경이 아닌 기본적인 WDK 빌드 환경을 이용하겠다 .

 

(3) Build 프로그램 실행

빌드 환경을 선택하신 후에 , 디바이스 드라이버 소스가 있는 폴더로 이동한다 . 그리고 , WDK build.exe 프로그램을 실행시켜 빌드를 하게 된다 . 빌드 과정에서 컴파일 및 링킹 과정이 이루어지고 디바이스 드라이버 파일이 sources 파일에 명시된 폴더에 생성이 된다 . 만약 컴파일이나 링킹 과정에서 에러가 나오면 error 로그 내용을 분석해 수정을 하면 된다 .

참고사항으로 , build.exe 프로그램은 여러가지 옵션을 제공하고 있으니 , 필요에 따라 옵션을 선택해 빌드를 해도 된다 .

아래 그림은 이 과정을 WDK 예제 소스를 가지고 실행한 화면입니다 .



3.
디버깅 환경 구축

마지막으로 , 디버깅 환경 구축에 대해 알아보자 .간단히 환경에 대해서 설명을 하자면 , 윈도우 드라이버 디버깅 환경은 그림처럼 , Host Target 에 해당하는 PC cable remote 로 연결하고 , WinDbg 를 설치하고 설명하면 디버깅 환경 구축은 끝나게 된다 .

구분

Host ( Debugger )

Target ( Debuggee )

목적

디버깅하는 PC

디버깅 당하는 PC 디버깅할 디바이스 드라이버가 작동

작업

WinDbg 설치

Debug Mode 로 작동하도록 셋팅


그럼 , 실제 구축방법은 어떻게 되는지 하나하나 내용을 살펴보자 .

1) 사전 준비사항

a) 케이블
2
대의 PC 를 연결하기 위한 케이블을 준비해야 한다 . 현재 WinDbg 에서 지원하는 Interface Serial, 1394, USB Null Modem Serial Cable 또는 1394 Cable 사용자의 환경에 따라 Null Modem Serial Cable 또는 1394 Cable 를 준비하면 된다 .

b) WinDbg
WHDC
사이트를 통해 최신 WinDbg 버전을 다운받아 Host 컴퓨터에 설치한다 . http://www.microsoft.com/whdc/devtools/debugging/default.mspx


2) WinDbg
설정

WinDbg 설정 관련해서는 제가 직접 설명하는 것보다 , 자세히 설명된 사이트를 소개하겠다 . 참고 사이트들의 내용을 보고 , WinDbg 셋팅을 하시면 디버깅 환경 구축은 끝나게 된다 . http://blogs.technet.com/sankim/archive/2007/08/20/remote-live-debugger.aspx http://snoya.ye.ro/driver/windbg/windbg.html http://www.driveronline.org/bbs/view.asp?tb=cjhnim&GotoPage=1&s_bulu=memo&s_key=vista&no=19 http://www.driveronline.org/bbs/view.asp?tb=tipbbs&GotoPage=1&s_bulu=title&s_key=virtual&no=42 http://www.codeproject.com/debug/windbg_part1.asp



다음 시간에는 실제 디바이스 드라이버의 개념들에 대한 이론적인 내용들 및 실습 내용으로
찾아뵙도록 하겠습니다
.

출처: http://www.driveronline.org/bbs/view.asp?tb=begin&GotoPage=1&s_bulu=&s_key=&no=6
   (디바이스 드라이버 개발자 커뮤니티  - subsub)