디바이스 드라이버 개발자가 되기 위해서는...

loveC의 이미지

어떻게 공부를 해야 할까요

저는 약 1년 반정도 C를 공부했습니다.

소켓, 시스템 프로그래밍도 공부를 했구요. c++과 어셈블리도 약간 공부했습니다.

이런 상황이라면 어떻게 공부해야 되나요?

사랑천사의 이미지

그냥 제 생각이라 도움이 되실지 모르겠으나.. 장치 구동기라면...
첫째, 어셈블리 공부를 좀 더 하셔야 겠고(조금 하셨다고 하셨으니까 좀 더 해 보세요.)
둘째, 어셈블리는 어셈블리인데 하드웨어 자체에 대한 이해가 있으셔야 겠죠. 어셈블리를 안다고 해도 8진수 제어 코드등이 있다고 알고 있는데 이런 것도 아셔야 겠죠. 근대 이건 하드웨어마다 다른 거니까 그 때 그 때 하드웨어 설계자와 논의 해야 하려나요 아무튼.
세 번째, 전산이 아닌 전자 회로에 대한 학문 하나 정도는 공부를 조금 해 두시는 것이 좋겠죠 음 펌웨어나 구동기는 좀 까다로울 테니까요.
네 번째, 시스템 중에서도 각 OS의 혹은 작업 하실 주 OS의 커널에 대해서 깊히 공부 해 보시는 것이.. 특히 입출력 부분이 중요하다고 사료되옵니다 흠흠.

뭐 제 생각이기 때문에 틀릴 지도 모르겠습니다. 전 하드웨어 중심적인 개발을 하는 사람이 아니고 초보 시스템 관리자이자 초보 프로그래머라고 저 스스로를 생각 하고 잇고 실력 향상에 더욱 노력 해야 하는 입장이라 큰 도움 되는 말씀 드릴 수는 없을 것 같아 대강 글을 오려 봅니다. 관련 분야 분들께서 더 좋은 조언 해 주시리라 생각합니다 그럼

행복하세요 ㅎㅎ.
----
일어나라! 싸워라! 그리고 이겨라!
다만!!! 의미 있는 것에 그 힘을!!!
그 능력과 노력을!!!

사람천사

phph의 이미지

회사들어가시면 다하게 됨다.
아무리 노력해도 회사에서 1년생활하는거에 비해서 30%도 완성하기 힘드실검다.
회사들어가서 1년생활해보심 이거 암것도 아닌것을 아시게 됨다.

chpjy의 이미지

디바이스 드라이버에 관계된 일을 하기 위해서는
정말 다양한 상황에서 당황하지 않고 용기를 가지고 천천히 접근할 수 있는
훈련이 무엇보다 중요하다고 생각됩니다.

저희 회사에서도 저와 다른 분이 D/D를 개발했는데 그분은 일을 한번 시키면 이런 단어를 많이
쓰더군요.

"굉장히" "오래" "많은 문서를 Study", "자세히 미리 살피고" "아주 어려움"등등..

결론은 미리 겁먹고 할 수 있는 일인데도 하지 못한다는 겁니다.
일을 맡기면 무조건 1달 이상은 소요되더군요..
그러면 일을 맡기지 못하죠 그분은 나중에 회사를 나가게 되더군요.

당황하지 않는 능력이 중요합니다. 겁먹지 말고..

겁만 먹지 않으면 많은 것을 할 수 있습니다. 생각보다 어렵지 않는 경우가 많습니다.

그리고 내가 맡은 일이 어느정도 skill 수준이 필요한지 알아야 하고
그래야 일정도 나오죠. 만약 일정과 만들 SKill 수준과 자신의 능력을 비교해 보는 능력도
필요합니다. 사실 이런것을 알기까지는 시간이 걸리기는 합니다.

자신의 Skill 수준이 않되면서 무조건 하겠다고 하면 나중에 거의 빈사상태까지 갑니다.

자신의 SKill수준과 만들 D/D에서 요구하는Skill 수준을 먼저 파악하는 능력이 필요. 이것이 절실히 필요한 능력입니다.

D/D는 제품개발에서 주로Support하는 입장이고Main은 될수 없습니다. 그렇기 때문에 일정에서 Delay되는 요인으로 보지 않더군요. 당연히 될것으로 생각합니다. 이게 정말 힘이 들죠.

만들었다고 수고했다고 하지도 않는 경우가 만죠. APP하는 사람들이나 H/W기술자들이 주가 됩니다. D/D는 이들을 Support하는 일입니다.

처음에 들어갈때는 연봉을 많이 받을 수 있지만 회사에서는 자신의 영역을 넓히고 기여할 수 있는 부분이 제한되어 있는 것이 현실이죠.

서론이 길어졌네요.

D/D개발 초기에는 간단한 Char 드라이버에서 시작해서 나중에는 USB나 IEEE1394등.. 여러
Layer를 가진 드라이버까지 영역이 넓습니다.

일반적으로 회사에서 USB나 IEEE1394등 여러 Layer와 연동해서 돌아가는 드라이버등은 외주나 구입하게 됩니다. 사실 이런 D/D는 개발할 H/W에 맞추어서 수정하면 됩니다.

이런 것을 쌩짜로 만든다는 것은 쉽지 않죠.

생짜로 만드는 것은 Char나 기타 단독으로 움직이는 D/D를 만들게 됩니다. 이것은 Datasheet를 자세이 읽고 만드면 가능합니다.

그래서 먼저 Datasheet를 통해서 Device의 기본동작을 파악하고 드라이버의 기본 뼈대를 만들고 Device 초기화 코드를 만들고 Test를 합니다. 이 부분이 시간이 많이 걸립니다

왜냐 하면 H/W도 검증이 되지 않았기 때문에 H/W 기술자와 많은 언쟁(?)을 하면서 H/W의 문제점을 증명하고 S/W의 내용도 보완해가야 합니다. 친절한 H/W 기술자면 일하기 쉽죠. 무슨 문제가 발생하면 먼저 자기 것부터 살피게 되니까요. 그런데 험악한 사람을 만나면 S/W에서 문제가 없고 H/W에서 문제가 있다는 것을 증명하기 까지는 절대 도와 주지 않습니다. 이러면 집게 가기 어렵게 됩니다. --;;

어째는 H/W기본적인 검증과 초기화 코드가 만들어 졌으면 D/D 전체 작업에 거의 50%가 끝난것이나 마찬가지 입니다.

이제부터는 기능만 추가하고 이것을 Test하고 User API를 만들어주는 일만 남은 것입니다. 이것은 난해한 것보다 시간만 투자하면 되는 경우가 많습니다.

그래서H/W관련 서적이나 문서와 간단하게나마 회로도를 볼줄 알아야 합니다. address map이나 read, write방법 memory종류와 다루는 법, 등등...

할께 많습니다.

만약에 캐릭터(char)디바이스가 아닌 여러 Layer를 가진 D/D를 만든다면 즉 USB나 IEEE1394등을 만들게 된다면 가능하다면 구입하거나 공급받는 식으로 하는게 좋습니다.

이거 만들기 어렵습니다. 먼저 USB의 스펙, USB 디바이스 Datasheet, 커널 USB layer등등.. 작업하기 전에 분석할 내용이 많습니다.

그래서 저도 이부분에 대한 일을 하게 되면 왠만하면 돈주고 사는 것이 낮다고 애기합니다.

전공한 내용이 전산쪽도 아니고 전자쪽이라 코딩은 잘 못합니다. 그래도 D/D는 만들있습니다.

코딩능력보다 다양한 상황에서 작업할 실마리를 찾고 시작해서 날짜에 맞추는 것이 중요합니다.

그리고 D/D만들고 나서 Test하는 기간도 반드시 일정에 넣어야 되죠..

요즘은 D/D말고 APP까지 하라고 하네요.. 요즘은 QT쪽을 좀 보고 있습니다.

그래도 좋은 것은 만들고 나면 APP하는 사람만 Support하면 일이 별로 없어서 편하게 지낼때도 있습니다.

이때가 가장 한가하죠..

먼저 회사에 취직하세요. 그리고 맡겨진 일을 당황하지 않고 할 수 있다라는 생각으로
해 보시고 그러면 내공이 점점 쌓입니다.

써보니 말이 길어 졌군요..

loveC의 이미지

위 세분 모두 감사드립니다.
특히 마지막 분의 성의있는 답변에 감동까지 받았죠.^^
좋은 정보 얻어 갑니다. 감사합니다.
아자아자!! 파이팅!!!!!!!!!!!!!!!!!!!!!!!!!!