Visual Studio로 드라이버 개발하기

@codemaru · July 31, 2011 · 5 min read

빌 조이는 vi로 vi를 개발하고, 리차드 스톨만 아저씨는 emacs를 emacs로 개발한다는 전설같은 무용담들이 있지만, 우리같은 쪼렙 개발자들에게는 에디터보다는 편리한 툴들이 필요합니다. 전 그간 드라이버를 개발할 때에는 소스 인사이트라는 프로그램을 사용했는데, 혼자 개발할 때에는 그럭 저럭 편했는데 여러 명이 개발하게 되니깐 좀 불편하더군요. 그래서 여차저차해서 Visual Studio로 개발 환경을 모두 통합하게 되었습니다. 물론 이제는 Visual Studio에 드라이버 개발 프로젝트가 빌트인된 시대지만 아직까지 구시대적인 개발 방법도 필요한지라 정리해놓습니다.

#0.

제일 먼저 필요한 도구는 ddkbuild입니다. ddkbuild.bat 파일만 있으면 끝입니다. 해당 파일을 Visual Studio 프로젝트 파일이 있는 폴더에 같이 복사해 둡니다. 깔았냐, 머 설치해라 이런말 안해도 되서 여러모로 편합니다. 근데 ddkbuild를 어디서 다운 받냐구요? 여기서 받으시면 됩니다.

#1.

ddkbuild 설명서를 보면서 sources 파일을 수정하면 한 군데서 막힐 텐데요. 브라우저 정보를 생성하는 부분이죠. 아래와 같이 브라우저 정보를 생성하도록 source 파일을 수정하면 오류가 발생할 겁니다.

sources

BROWSER_INFO=1

BSCMAKE_FLAGS=$(BSCMAKE_FLAGS) -n

BROWSERFILE=$(TARGETNAME).bsc

오류가 생기는 원인은 ddk 때문에 그런 건데요. ddk 설치 폴더를 간 다음 verify.src 파일의 아래 줄들을 주석 처리해 주시면 해당 오류가 발생하지 않도록 만들 수 있습니다. 브라우저 정보는 왜 생성하냐구요? 여러분이 F12를 눌렀을 때 정의된 곳으로 이동시켜 주기 위해서 생성한답니다. 그 기능을 사용하고 싶으시다면 이 작업을 하시고, 필요 없다면 안하셔도 됩니다. 하지만 하시는게 좋을 거예요.

C:\WinDDK\7600.16385.1\bin\verify.src

#!if defined(BROWSER_INFO) && !defined(USER_ENV_BROWSER_INFO)

#!error BLD1007 : BROWSER_INFO defined in sources file – this is a user environment setting ($(MAKEDIR))

#!endif

#2.

요즘은 64비트를 지원하는게 필수기 때문에 대부분 한 드라이버 프로젝트에서 32, 64 빌드가 모두 나옵니다. 그런데 이 때 32, 64 구성 파일이 모두 동일하다면 상관 없는데 아마도, 종종, 제법 심하게 자주 구성 파일 한 두개가 서로 다른 시츄에이션이 발생할 겁니다. 현란한 전처리기를 사용해서 그것들을 처리하는 것도 한 방법이긴 하지만 별로 추천해 드리고 싶지는 않군요. 제가 추천해 드리고 싶은 방법은 속편하게 sources 파일을 두 개 만들라는 겁니다. sources_x86, source_x64 이렇게 두 개를 만들어 두세요.

#3.

이제 빌드 배치 파일을 만들어 봅시다. 이 배치 파일들이 하는 일은 32, 64 빌드에 따른 sources 파일 교체 및 인증서 서명, 그리고 최종적으로 빌드된 파일을 Dist 폴더로 복사해주는 역할을 합니다. 이 마법같은 배치 파일은 다음과 같이 작성하면 됩니다.

build_x64_release.bat

set name=%1

copy sources_x64 sources

call ddkbuild.bat -WIN7A64 -oacr free .  -cZg

call sign.bat objfre_win7_amd64\amd64%name%64.sys

mkdir Dist

copy objfre_win7_amd64\amd64%name%64.sys Dist

copy objfre_win7_amd64\amd64%name%64.pdb Dist

del sources

build_x86_release.bat

set name=%1

copy sources_x86 sources

call ddkbuild.bat -WIN7 -oacr free .  -cZg

call sign.bat objfre_win7_\i386%name%32.sys

mkdir Dist

copy objfre_win7_x86\i386%name%32.sys Dist

copy objfre_win7_x86\i386%name%32.pdb Dist

del sources

sign.bat

signtool sign /a /v /ac MSCV-VSClass3.cer /s my /n “인증서이름” /t “http://timestamp.verisign.com/scripts/timestamp.dll” %1

#4.

다시 정리하면 이렇습니다. 드라이버 프로젝트 폴더에는 ddkbuild.bat, sources_x86, sources_x64, build_x64_release.bat, build_x86_release.bat, sign.bat 파일이 있는 겁니다.

#5.

이제 Visual Studio에서는 make 프로젝트로 프로젝트를 생성하시고 프로젝트 빌드 커맨드로는 build_x86_release.bat 드라이버명, build_x64_release.bat 드라이버명 이렇게 만드시면 됩니다.

 4  0

 

@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중