본문 바로가기

programming/WDM

디바이스 드라이버란? - 펌

앞으로 직장에서 내가 주된 업무가 WDM이라고 한다. 생소하기만하다. 언능언능 알아야가야겠다. 기초부터 차근차근 다져야겠다.

디바이스 드라이버란 ?

 요즘에 PC 를 구입하게 되면 사용자들은 특별한 작업 없이 바로 컴퓨터를 사용할 수 있다. 예전에 필자가 처음 조립식 IBM PC 를 구매했던 시절에는 PC 와 주변 기기 (모뎀, 사운드 카드, VGA 카드 등등)를 사면 처음에 꼭 해야 할 일이 있었다.
 
주변 장치 별로 같이 포함되어 오는 플로피 디스크 또는 CD 에 들어있는 프로그램들을 설치하는 작업이다. 그 당시에 나는 이 프로그램들이 뭔지 모르고 설명서에 있는 대로 설치하고, 장치들을 연결해 사용했다가끔 PC 를 포맷할 경우에는 이 작업을 다시 해야 하는데, 이 때 플로피디스크나 CD 를 잃어버려 같은 기종의 주변기기를 사용하는 친구에게 프로그램을 복사해오거나, PC 통신 등을 통해 필요한 프로그램들을 어렵게 구하던 추억이 생각나기도 한다
.
 
그 후에, 필자는 그때 설치한 프로그램이 디바이스 드라이버라는 것을 알게 되었고, 현재는 그것에 재미를 느껴서 디바이스 드라이버 개발자가 되었다

 
이번 컬럼에서는 이렇게 사용자들에게는 존재감이 크게 느껴지는 프로그램은 아니지만, 중요한 역할을 담당하는 디바이스 드라이버에 대해서 알아보려고 한다.

먼저, 디바이스 드라이버 (Device Driver)’ 의 의미부터 알아보자. 단어 자체의 의미로만 해석하면, 장치 제어자 (운영자) 라고 해석이 된다그리고, 좀 더 의미를 분석해보면 운영체제로부터의 입출력 명령에 따라 주변기기 사이의 입출력 제어라는 의미를 가진다따라서, 애플리케이션에서 주변기기를 제어하기 위해서는 디바이스 드라이버를 통해 제어를 해야 하고, 각각의 디바이스 드라이버는 기기의 종류 및 인터페이스에 맞게 동작을 제어하게 된다. 또한, 실제 장치를 제어할 목적이 아닌 운영체제에서 지원되지 않는 서비스를 확장하기 위한 용도로도 디바이스 드라이버를 만들어 사용하기도 한다. , 기존 API 를 통해서는 커널에 대한 작업이 불가능 하므로, 이런 작업을 위해 별도의 디바이스 드라이버를 만들어서 API 를 새로 만들기도 한다.
운영체제가 윈도우냐, 리눅스냐, MAC OS X 이냐, 유닉스냐에 따라 운영체제의 내부 커널구조나 동작 방식 등이 달라지게 된다. 이에 따라 디바이스 드라이버도 다른 구조를 가지게 되며, 개발시에도 서로 다른 방법으로 개발을 하게 된다
.

윈도우가 설치된 PC 에서 작업을 하는 도중에 갑자기 화면이 파란색이 되면서 PC가 재부팅 되는 경우가 있다. 이럴 경우, 대부분의 사용자는 이 블루스크린의 원인을 윈도우 운영체제를 만든 마이크로소프트사가 발생시킨다고 생각한다. 하지만, 마이크로소프트사에서 발표한 블루스크린에 대한 분석결과를 보면문제발생의 70 ~ 80 % IHV (Independent Hardware Vendor)또는 ISV (Independent Software Vendor)가 만든 디바이스 드라이버의 문제 때문이라고 한다. 그래서, 마이크로소프트사는 이런 디바이스 드라이버 이슈를 사전에 방지하기 위해 Windows Logo 인증이라는 인증 제도를 두고, 디바이스 드라이버 및 하드웨어에 대한 사전 검증 시스템 재공하고 있다
.
 
또한, 아래 윈도우 운영체제의 아키텍처에서 보듯이 디바이스 드라이버와 운영체제는 서로 밀접한 관계를 가지고 있고, 커널모드 환경에서 작동 한다. , 커널모드 환경은 운영체제의 커널 및 드라이버가 동작되는 환경으로 이 환경에서 잘못된 동작을 하게 되면, 전체 시스템에 영향을 주기 때문에 디바이스 드라이버는 신중히 작성 되어져야 한다.
 
 
디바이스 드라이버의 실체는 파일로 존재 내용을 확인할 수 있는데, 윈도우 환경 (윈도우NT/2000/2003/VISTA 계열) 이라면 windows 설치폴더\system32\drivers 폴더에서 드라이버 파일을 접할 수 있을 것이다

지금까지는 디바이스 드라이버의 개념에 대해서 알아봤다. 그럼 실제 이 디바이스 드라이버가 어떤 분야들에 쓰이는지 알아보도록 하자
.

디바이스 드라이버는 기반 기술이 되는 분야로 이 기술을 응용해 다양한 분야에 활용 되고 있다.

1. H/W 제조사
 주변기기를 만드는 제조사들은 사용자가 사용할 수 있도록 해당 기기를 제어하는 디바이스 드라이버를 필수적으로 제작해야 한다. 그래서, 하드웨어 제조사들은 이런 디바이스 드라이버 개발을 중요하게 다루고 있다. 그러나 요즘은 디바이스 드라이버 개발을 하지 않아도 되는 장치들이 있다. 대표적인 예가 USB 이동식 디스크다. USB 이동식 디스크를 PC 에 연결하면 특별한 드라이버 설치 없이도 바로 인식되면서 디스크처럼 사용할 수 있다. 이것은 USB 이동식 디스크가 장치 스펙에 맞게 만들어지고, 해당 USB 이동식 디스크 드라이버 ( USB Mass storage driver ) 가 운영체제에 포함되어져서 사용자의 특별한 드라이버 설치 없이도 장치사용이 가능하도록 되었기 때문이다. 하지만, 부가 기능들을 위해서는 디바이스 드라이버의 추가적인 개발이 필요한 경우도 있다.

2. 보안 분야
최근 보안 분야의 이슈인 금융권 사이트에서 사용되는 키보드 보안이나 회사의 정보 유출 방지를 위한 매체 제어 (CD-RW, USB 이동식 디스크 등) 보안, 그리고, 게임 보안에 이르기까지 다양한 보안 분야들에서 이미 디바이스 드라이버 기술이 사용되고 있다. 해킹기술이 점점 응용프로그램 레벨에서 커널모드 레벨로 내려오고, 장치를 통한 정보유출들이 많아지면서 보안 프로그램도 점점 디바이스 드라이버 기술를 사용해야 할 필요성이 생기게 되었다. 하지만, 잘못된 보안 프로그램의 오동작 및 보안 프로그램들간의 드라이버 충돌로 인해 문제가 생기기도 한다. 그래서 이런 보안 관련 디바이스 드라이버 개발시에는 세심한 주의가 필요하다.

3. 응용 프로그램
일반 응용 프로그램에서도 디바이스 드라이버 기술이 사용된 예는 많다. 가상 CD-ROM , 가상 프린터 등의 프로그램에서는 겉으로 보기에는 드라이버 기술이 사용되지 않는 것처럼 보이지만, 실제 내부적으로는 일반적인 응용 프로그램 수준에서 구현되기 어려운 부분에 대해서 디바이스 드라이버 기술을 응용해 구현들을 하고 있다. 특히 기존에 없는 기능들을 구현할 경우에는 디바이스 드라이버 기술을 이용해 기존 운영체제의 API 서비스를 확장하는 용도로도 사용되기도 한다.

이처럼 디바이스 드라이버가 사용되는 분야는 다양하고, 앞으로도 무궁무진 할 것이다. 디바이스 드라이버 분야가 일반 애플리케이션이나 게임처럼 눈에 쉽게 결과가 드러나지 않다 보니 아직까지 일반 사용자들뿐만 아니라, 개발자들에게도 어렵게 느껴지는게 사실이며, 아직까지 개발자 저변도 넓지 않지 않는 상황이다.
하지만 기반 기술이 되는 디바이스 드라이버 분야는 없어서는 안될 중요한 기술이고, 앞으로 기술의 가치는 더욱 더 빛날 것이다. 그리고, 개발자들에게는 디바이스 드라이버 기술를 알게 되면 다른 개발분야들에도 많은 도움이 될거라 본다


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