OS에 대한 지식없이 Device Driver를 짜는 것이 가능한가요??

gokore의 이미지

교수님께서 디바이스 드라이버를 공부해보라고 권유해주셔서 디바이스 드라이버를 보고있는데요

아무리 봐도 무슨이야기인지 잘모르겠습니다.

그래서 교수님께 제가 OS에 대한 지식이 없어서 잘 이해를 못하고 있다라고 했더니

교수님께서

OS를 몰라도 할 수 있다고 하셨습니다.

그런데 3개월을 공부해본 지금 이게 정말 사실일까라는 의문이 드네요 ;;

다른 분들의 생각은 어떠신가요??

neweapon의 이미지

누군가에게 조언을 할 때의 흔히 볼 수 있는 오류 중 하나는, 어떠한 대상을 볼 때, 나는 100 정도로 보이지만, 그게 상대방에겐 1000으로 보일 수 있단 사실을 염두에 두지 못하는 경우가 있습니다.
고수에게는 하부구조나 메커니즘은 추상화되어 하나의 방식으로 정리되어있을 수 있지만, 하수에겐 그것들이 모두 다 다르게 보이기도 합니다.

아마 gokore님의 교수님이 하신 말씀도 저런 뉘앙스가 아닐까 싶습니다.
가장 단순한 character DD 작성 따라하기 수준이라면 OS에 대해 잘 몰라도 되지만,
실질적으로 무언가 기능을 구현하고자 할 때엔 OS에 대한 기본 없이는 좀 무리라 보이는군요.

익명 사용자의 이미지

좋은 답변입니다. 잘보고갑니다^^

gokore의 이미지

답변 정말감사합니다

그러면 혹시 그나마 초보자가 쉽게 접근할 수 있는 디바이스 드라이버하나만 소개 해 주실수 있으신가요??

neweapon의 이미지

(정확하게 검색하지 않고 머릿속 정보만으로 적습니다.)

<유영창 / 한빛미디어 / 리눅스디바이스드라이버> 추천해 드립니다. 2.4 커널도 다루는 등 좀 지난 얘길 하게 되었지만 가장 쉽습니다. 단, 커널 자체의 깊이를 같이 맛보기엔 무리이며 실무에 적용에도 한계가 있습니다.

< O'reilly / Linux Device Driver > 커널까지 깊이있게 보고자할 때 좋습니다만, 초보자가 막 보기엔 좀 어렵습니다.

< Prentice Hall / Essential Linux Device Drivers > 실제 개별 장치 드라이버의 구체적인 모습까지 볼 수 있고 어느 정도 기초적인 내용도 있습니다만, 전체적인 커널과 드라이버에 대한 그림을 그리기보다는 실무적 차원의 개별드라이버 및 서브시스템 참조에 좋습니다.

이상은 제 개인적인 생각이니 너무 절대적으로 의지하진 마시길 바라며 조금이나마 도움 되었으면 좋겠습니다. ^^;

neweapon의 이미지

.

aruee의 이미지

아마 device driver도 종류에 따라 패턴이 많이 다른걸로 알고 있습니다. 원하시는 디바이스를 정하시는게 도움이 되실듯 합니다.
전 windows 에서 filesystem 쪽만 잠깐 들여다 봤었는데, 참조할수 있는 번역서는 아에 없었고.. 원서도 국내엔 팔지도 않었더랬죠.

태훈의 이미지

타겟 아키텍처에 대한 지식이 있으면 디바이스 드라이버 작성하시기에 수월합니다. 사실 OS도 이론에만 그치지 않고 실제로 구현 하려고 하면 타겟 아키텍처에 대한 깊은 이해가 없으면 불가능합니다.

펌웨어 레벨에서 하드웨어를 제어하는 코드를 작성 할 수 있으면 디바이스 드라이버는 단지 해당 OS에서 제공해주는 API를 이용한다는 것만 다르기 때문에 훨씬 쉽게 접근가능합니다.

아키텍처 공부는 아키텍처 이론서 -> AVR -> ARM -> x86 순으로 추천 해 드리겠습니다. 해당 타겟에서 펌웨어 코드를 작성 해 보세요. (프로그래밍은 아는게 아니고 익히는 겁니다.)

Just do it!

익명 사용자의 이미지

이야..
프로그래밍은 아는게 아니고 익히는거라...

가끔 뭔가 프로그래밍을 한다는것이 배운다는것이 무엇인가? 질문을 갖었었는데 , 명쾌한 답이되었네요 감사합니다.

지리즈의 이미지

디바이스 드라이버와 커널간의 인터페이스가 있기 때문에
이 규약만 지켜주면 작성할 수 있는 디바이스 드라이버들도 많습니다.

그렇지만, 인터럽처리가 크리티컬한 장치이거나
대부분 디버그하기가 매우 힘들기 때문에 배경지식이 부족하면 크게 어려움을 겪을 수도 있습니다.

커널(OS) 전체에 대해서 이해하고 디바이스 드라이버를 작성하는 것이 좋지만,
반면, 디바이스 드라이버를 작성해 가면서 겪는 문제를 통해 OS를 이해하는 것도 방법입니다.

물론 후자라도 어느 정도 이해 수준이 갖춰 지면, 커널 전체에 대한 공부를 한번정도 해줘야 겠죠.
이 때는 아무것도 모르고 커널을 보는 것보다는 훨씬 잘 이해가 됩니다.

There is no spoon. Neo from the Matrix 1999.

hurtak의 이미지

실제로 이것이 맞게 썼느냐에 대한 것은 다른 것이지만,
간단한 Driver는 작성하는 것이 힘들지 않습니다.

제가 생각했을 때는, 처음부터 Kernel을 보겠다고 달려드는 사람은 많지만,
이 중에서 95%는 다 지쳐서 쓰러지고....그 중에는 특출난 5%가 있기는 있더군요.... - -
자존심 상하는 일이기는 하지만, 머리 구조가 컴퓨터처럼 생각해서 돌아가는 사람들이 있더군요... ;;;

평범한 일반인이라면...
Driver를 처음보는 것으로 시작해서, 필요에 의해서 Kernel까지도 조금씩 영역을 넓히면서 보는 경우가 많더군요...저도 이런 경우이고요....
그렇다보니 필요한 부분만 알고 전체적인 커널은 유기적으로 모르는... - -

-_- _-_ -_-

freemckang의 이미지

DD를 (제대로) 하려면 OS를 알아야 하지 않을까 싶습니다.

물론, 많은 분들이 말씀하신 것처럼 단순한 것이라면 (LED on/off?) OS에 대한 개념 없이도 가능하겠습니다만..

예를 들면 ISR을 다루게 되고, ISR을 효율적으로 처리하기 위한 지연처리 등을 어떻게 구현하느냐에 따라 시스템의 성능에 큰 차이가 오지 않을까... 판단되네요. 모듈 단위의 작업을 한다면 다른 사람의 작업에도 영향을 미칠 수 있는 부분이구요...

학업에 정도가 있겠습니까마는, OS의 기본 개념과 작업을 하게 될 OS에 대해 개론 정도?는 익히고 시작하는게 좋지 않을까... 감히 생각해봅니다 :)

句日新, 日新 日新 又日新.

태훈의 이미지

네트웍만 봐도 top half/bottom half, NAPI 등의 개념을 모르고는 드라이버를 작성 할 수 없으니
제대로 공부 하실려면 커널 공부도 병행 하셔야 겠네요.

Just do it!

Stand Alone Complex의 이미지

글은 아무나 쓸 수 있지만, 좋은 글은 아무나 쓰지 못합니다.
Device Driver도 마찬가지입니다.

RET ;My life :P

lmk378의 이미지

제 생각에 교수님은 OS 자체를 말씀하신거 같고
글쓴님께서는 타겟으로 하는 OS를 몰라서 물어본것 같네요.
교수님께 OS에 대한 지식이 없어서 힘들다보다 리눅스(리눅스 디바이스 드라이버라 가정해서^_^;;)에 대한
지식이 없어서 힘들다고 하시면 과연 리눅스 몰라도 할 수 있다고 하실까용??