정보공간_1

디바이스 드라이버란? 본문

IT 놀이터/IT Storehouse

디바이스 드라이버란?

알 수 없는 사용자 2011. 11. 28. 23:11

안녕하세요. 대전멤버십에서 Winsys의 시그장을 맡고 있는 20-2기 양현철입니다.
오늘은 저희 시그에서 공부하고 있는 디바이스 드라이버에 대해 설명을 드리겠습니다.

디바이스 드라이버란?
운영체제는 커널모드와 사용자모드로 나눠집니다.


커널모드에서는 프린터드라이버나, 디스플레이드라이버, 키보드 드라이버 등 백그라운드에서 실행되는 파일들이 동작합니다. 반면 사용자모드에서는 한글, MS오피스 등 임의로 실행시킨 프로그램이 동작합니다. 그렇기 때문에 사용자모드에서는 커널모드에서 접근할 수 있는 메모리공간에 접근하지 못합니다.
응용프로그램에서 하드웨어를 제어할 때는 디바이스 파일을 이용합니다.
저수준의 파일 입출력함수를 사용 해 디바이스 파일에 접근하여 최종적으로 하드웨어가 제어됩니다.

개발툴 설치 & 예제소스 컴파일
디바이스 드라이버를 개발하기 위해서는 DDK(Dirver Development Kit)이라는 툴을 사용해야합니다.
다운로드 주소 :
http://download.microsoft.com/download/9/0/f/90f019ac-8243-48d3-91cf-81fc4093ecfd/1830_usa_ddk.iso
설치가 완료되면 시작메뉴에 Development Kit가 생성됩니다.

간단한 소스를 컴파일 하기 위해 폴더를 만들고 컴파일 해보겠습니다.


위와 같이 C\test 폴더를 만들고 test.c, makefile, source파일을 만듭니다.

[샘플소스]

[makefile, source]

“test.c”에는 샘플소스를 작성합니다.(DbuPrint()함수를 사용하여 Driver상태를 표시합니다)
“makefile”과 “source”을 만듭니다.(TARGETNAME에 만들 deriver의 이름을 넣고, sources에 컴파일할 SOURCE인 test.c파일을 입력합니다.)
작성이 완료되면 아래와 같이 build창을 열고, build명령인 “build -cegz"를 사용하여 빌드합니다.

[BUILD창]

[BUILD 성공]


BUILD가 성공되면 위와 같이 폴더와 파일이 생성됩니다.

생성된 “objfre_wxp_x86”폴더 안에 들어가면 SOURCE에서 설정한 TARGETNAME과 같은 이름인 “WinSysDriver.sys”파일이 있는것을 확인할 수 있습니다.


sys확장자인 드라이버를 로드하기 위해서는 “instdrv”프로그램을 사용하여 드라이버 파일을 로드합니다.
그리고 “Dbgview”프로그램을 사용하여 디버그 메시지를 확인합니다.
start를 누르면 Driver Load!!가 출력됩니다.
stop을 누르면 Driver unload!가 출력됩니다.
드라이버가 load & unload가 되는 것을 확인할 수 있습니다.