2005년 02월 04일
디바이스 드라이버 개발자 로드맵...#1
얼마전에 동아리 선배로부터 부탁을 하나 받은 적이 있다.
부탁받은 내용은 SI개발자가 소위 말하는 고급개발자가 되기 위해서는
어떤 단계를 밟아야 하는가에 대한 것이다. 이미 잘 작성되어진
도표를 보내주시고는 다른 개발자의 관점에서 이 도표가 잘 작성되었는지
여부를 검토해달라는 것이었다. 아마도 제가 SI쪽이 아닌 보안분야이다보니
이런 부탁이 들어온것같다. 그 도표를 보면서 과연 디바이스 드라이버 개발자는
어떤 과정을 거쳐서 고급개발자가 될수 있을까 ? 라는 생각이 들었다.
특히 요즘엔 디바이스드라이버에 대한 관심도가 많아져서
여기저기 많은 사람들이 시도를 해보는 것같다. 하지만 이럴타한
자료가 많지않기 때문에 시작도 해보지 못하고 포기하는 경우가 다반사인듯하다.
이끌어줄 사람 한명만 있어도 그렇게 어려운 분야는 아닌 것을...
그래서 나름대로 훌륭한 디바이스드라이버 개발자가 되기 위해서는
어떤 과정을 거쳐야할까? 나름대로 생각해 보았다.
물론 본인은 아직도 신출내기 개발자이며 지금의 내생각은 앞으로도
많이 변경될 수 있을 것이다. 시간이 지나 내가 작성한 이글을 다시 보았을때
부디 이런 엉터리 글을 남겼었단 말이야? 라는 말을 하게 되길 바란다.
1. C언어 학습
디바이스드라이버는 C언어로 작성된다. C++로 작성되는 경우도 있지만
디버깅의 어렵고 드라이버모듈자체가 작기 때문에 C++의 사용이 필요없는 것이 사실이다.
C언어의 기본적인 문법부터 시작해서, 자료구조(링크디리스크, 큐, 스택 등..), 알고리즘 등을
익혀야 할것이다. 처음부터 윈도우즈 어플리케이션을 만들려고 생각하지말고
콘솔기반프로그램으로 이러한 내용을 익히면 도움이 될 것이다. 콘솔기반 프로그램을
작성할때에도 Visual C++ 과 같은 툴의 도움을 받지않고 Platform SDK 에 포함되어있는
CL.EXE등의 컴파일러를 이용해 직접 컴파일 옵션 등을 설정해가며 C언어 학습을한다면
언어와 컴파일러의 관계, 컴파일러와 툴의 관계에 대해 좀더 명확하게 이해할 수 있을 것이다.
보통 컴파일러, 언어, 툴 이 3가지를 구분못하는 사람들이 꽤 있다.
2. 윈도우즈 어플리케이션..
기본적으로 디바이슥드라이버개발을 시작하기 전에 윈도우즈가 어떻게 운영되는지
알아야 한다. 그러기 위해서는 한번쯤 윈도우즈 어플리케이션을 만들어보는것이좋다.
MFC와 같은 라이브러리를 사용하는 것보다는 커널에서 제공하느 Win32api 를 통해서
간단한 응용프로그램을 만들어보면서 프로세스, 메모리관리, 파일 I/O, 네트워크, 보안,
레지스트리 등 다양한 주제에 대해서 공부해보자. Win32API 는 꽤 커널단에 근접해 있기
때문에 윈도우즈를 이해하는 것에 대한 첫걸음이 될것이다.
디바이스드라이버 개발자에 있어서 고난도의 응용프로그램 개발경험은 필요없을듯하다.
단지 윈도우즈를 좀더 이해하기 위한 보조수단정도로 생각하면 되겠다.
아마 관련 책으로 가장 유명한 책은 jeffrey richter 의 Programming Applications for Microsoft Windows 4nd edition 일 것이다. 이책을 마스터했다면
디바이스드라이버 개발을 위한 준비운동은 끝났다고 할 수 있다.
3. 디바이스 드라이버 시작....
디바이스 드라이버는 크게 2가지로 나뉠 수 있다. 실제 하드웨어와 통신을 하는 드라이버와
응용프로그램의 기능을 좀더 돋보이게 해주는 드라이버로 나뉠 수 있다. 전자에는 USB드라이버, PCI드라이버, 프린터 드라이버 등 우리가 일반적으로 보는 드라이버일것이고 후자는 안티바이러스에서 사용되는 실시간감시기, 실시간암복호화드라이버 등의 보안관련 드라이버이다.
본인은 후자에 가까운 드라이버 개발자이기 때문에 뒷쪽에 초점을 맞추어서 로드맵을
진행해 나가겠다.
4. 디바이스 드라이버의 구조 학습
윈도우즈에서는 생각보다 다양한 종류의 드라이버들이 있다. 그중에서 NT Style Driver라고
하는 형태의 드라이버의 구조에 대해 명확히 알아야한다.
다른 구조의 드라이버보다 형태가 간단하기 때문에 공부하기가 수월할 것이다.
또한 디바이스 드라이버개발은 콘솔에서 커맨드를 직접 입력하여 드라이버를 빌드하는것에
먼저 익숙해져야 한다. 아마 첫번째에서 제시한 방법으로 공부하였다면 이런 방법들이 그렇게
놀라운 일도 아닐 것이다. 시중에서 쉽게 볼수있는 드라이버 개발툴의 사용은
적극 배제하는 것이 좋타. 그러한 툴을 사용하는 것보다 콘솔에서 드라이버를 직접빌드하는
것이 더욱 편하다는 것을 느끼게 될 것이다.
다음에 계속....
p.s. 쓰다보니 글이 길어져서 다음 포스트로 나머지 글을 넘겨야할 것같네요
쓰다보니 할말들이 왜이리 많은지... 전 잔소리쟁이인가봅니다.
부탁받은 내용은 SI개발자가 소위 말하는 고급개발자가 되기 위해서는
어떤 단계를 밟아야 하는가에 대한 것이다. 이미 잘 작성되어진
도표를 보내주시고는 다른 개발자의 관점에서 이 도표가 잘 작성되었는지
여부를 검토해달라는 것이었다. 아마도 제가 SI쪽이 아닌 보안분야이다보니
이런 부탁이 들어온것같다. 그 도표를 보면서 과연 디바이스 드라이버 개발자는
어떤 과정을 거쳐서 고급개발자가 될수 있을까 ? 라는 생각이 들었다.
특히 요즘엔 디바이스드라이버에 대한 관심도가 많아져서
여기저기 많은 사람들이 시도를 해보는 것같다. 하지만 이럴타한
자료가 많지않기 때문에 시작도 해보지 못하고 포기하는 경우가 다반사인듯하다.
이끌어줄 사람 한명만 있어도 그렇게 어려운 분야는 아닌 것을...
그래서 나름대로 훌륭한 디바이스드라이버 개발자가 되기 위해서는
어떤 과정을 거쳐야할까? 나름대로 생각해 보았다.
물론 본인은 아직도 신출내기 개발자이며 지금의 내생각은 앞으로도
많이 변경될 수 있을 것이다. 시간이 지나 내가 작성한 이글을 다시 보았을때
부디 이런 엉터리 글을 남겼었단 말이야? 라는 말을 하게 되길 바란다.
1. C언어 학습
디바이스드라이버는 C언어로 작성된다. C++로 작성되는 경우도 있지만
디버깅의 어렵고 드라이버모듈자체가 작기 때문에 C++의 사용이 필요없는 것이 사실이다.
C언어의 기본적인 문법부터 시작해서, 자료구조(링크디리스크, 큐, 스택 등..), 알고리즘 등을
익혀야 할것이다. 처음부터 윈도우즈 어플리케이션을 만들려고 생각하지말고
콘솔기반프로그램으로 이러한 내용을 익히면 도움이 될 것이다. 콘솔기반 프로그램을
작성할때에도 Visual C++ 과 같은 툴의 도움을 받지않고 Platform SDK 에 포함되어있는
CL.EXE등의 컴파일러를 이용해 직접 컴파일 옵션 등을 설정해가며 C언어 학습을한다면
언어와 컴파일러의 관계, 컴파일러와 툴의 관계에 대해 좀더 명확하게 이해할 수 있을 것이다.
보통 컴파일러, 언어, 툴 이 3가지를 구분못하는 사람들이 꽤 있다.
2. 윈도우즈 어플리케이션..
기본적으로 디바이슥드라이버개발을 시작하기 전에 윈도우즈가 어떻게 운영되는지
알아야 한다. 그러기 위해서는 한번쯤 윈도우즈 어플리케이션을 만들어보는것이좋다.
MFC와 같은 라이브러리를 사용하는 것보다는 커널에서 제공하느 Win32api 를 통해서
간단한 응용프로그램을 만들어보면서 프로세스, 메모리관리, 파일 I/O, 네트워크, 보안,
레지스트리 등 다양한 주제에 대해서 공부해보자. Win32API 는 꽤 커널단에 근접해 있기
때문에 윈도우즈를 이해하는 것에 대한 첫걸음이 될것이다.
디바이스드라이버 개발자에 있어서 고난도의 응용프로그램 개발경험은 필요없을듯하다.
단지 윈도우즈를 좀더 이해하기 위한 보조수단정도로 생각하면 되겠다.
아마 관련 책으로 가장 유명한 책은 jeffrey richter 의 Programming Applications for Microsoft Windows 4nd edition 일 것이다. 이책을 마스터했다면
디바이스드라이버 개발을 위한 준비운동은 끝났다고 할 수 있다.
3. 디바이스 드라이버 시작....
디바이스 드라이버는 크게 2가지로 나뉠 수 있다. 실제 하드웨어와 통신을 하는 드라이버와
응용프로그램의 기능을 좀더 돋보이게 해주는 드라이버로 나뉠 수 있다. 전자에는 USB드라이버, PCI드라이버, 프린터 드라이버 등 우리가 일반적으로 보는 드라이버일것이고 후자는 안티바이러스에서 사용되는 실시간감시기, 실시간암복호화드라이버 등의 보안관련 드라이버이다.
본인은 후자에 가까운 드라이버 개발자이기 때문에 뒷쪽에 초점을 맞추어서 로드맵을
진행해 나가겠다.
4. 디바이스 드라이버의 구조 학습
윈도우즈에서는 생각보다 다양한 종류의 드라이버들이 있다. 그중에서 NT Style Driver라고
하는 형태의 드라이버의 구조에 대해 명확히 알아야한다.
다른 구조의 드라이버보다 형태가 간단하기 때문에 공부하기가 수월할 것이다.
또한 디바이스 드라이버개발은 콘솔에서 커맨드를 직접 입력하여 드라이버를 빌드하는것에
먼저 익숙해져야 한다. 아마 첫번째에서 제시한 방법으로 공부하였다면 이런 방법들이 그렇게
놀라운 일도 아닐 것이다. 시중에서 쉽게 볼수있는 드라이버 개발툴의 사용은
적극 배제하는 것이 좋타. 그러한 툴을 사용하는 것보다 콘솔에서 드라이버를 직접빌드하는
것이 더욱 편하다는 것을 느끼게 될 것이다.
다음에 계속....
p.s. 쓰다보니 글이 길어져서 다음 포스트로 나머지 글을 넘겨야할 것같네요
쓰다보니 할말들이 왜이리 많은지... 전 잔소리쟁이인가봅니다.
# by | 2005/02/04 09:43 | 트랙백 | 덧글(1)






☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
늦었지만 이제 와서 이런글을 보게 됐어요 ㅠㅠ
이 글에 쓰셨던 내용처럼 저에게는 해보고 싶은 분야이기에 관심은 많이 가지만 정작 들어가기 위한 입구를 헤매고 있는 실정이에요, 누군가 입구에 마중나와주진 않더라도 입구가 어디에 있어요! 라고 말을 해주는 사람이 있었다면 하는 생각을 많이 했었는데 오늘에서야 이글을 보게 되어 너무 후회스럽고 한편으로 너무 다행스러워요 ^^
다음 글에서도 조금의 빛이라도 더 느끼고 싶어요 ~