본문으로 바로가기
728x90
반응형

 주변에서 전자 좀 한다하면 쉽게 접할 수 있는 말이 펌웨어라는 말이 있다. 전자 제품이 고급화 되면서 이 펌웨어가 안들어간 제품을 찾기 힘들 정도로 많은데 정작 펌웨어를 한다는 말이 무슨 말인지 모르는 경우가 많다.

 사실 뭐 펌웨어라고 딱히 내가 정의를 배우거나 하지는 못했지만 난 현재 펌웨어 엔지니어라고도 볼 수 있다. 주력으로 하는 일이 펌웨어를 짜는 일이니까.....뭐 여튼 배웠어도 시험 보고 나면 까먹는게 정의인지라 내가 일하면서 느낀 펌웨어라는 개념을 좀 설명하겠다.

 이게 뭐 설명할 일도 아니지만 내가 처음 프로세서를 배우거나 FPGA를 학교에서 배우거나 할 때 힘들었던 것이 이걸 어디다가 쓰는 것인가? 어떤 경우에 필요하지? 라는 근본적인 개념이 탑재되어 있지 않았다. 결국 하라는데로 하는데 급급하고 학점은 좋은데 대체 어떠 써먹는 것인지...... 학교 공부가 좀 나쁜 점이 이것인거 같다. 사실 뭘 배울때 역사 정의 이런거 부터 배우는데 중요하긴 한데 굳이 알필요 있나? 이게 어디에 어떻게 쓰고 뭘 만들려고 할 때 쓰고 또 비슷한 거랑 뭐가 다르고 나중에 이걸 배워서 무슨 직업을 가지게 될 지가 제일 중요하다고 본다.

 잡설은 그만하고 펌웨어는 프로그램이다. 하지만 우리가 프로그램하면 떠오르는 그런 프로그램이면서도 좀 다르다. C, MFC, JAVA 이런거 다 프로그램인데 펌웨어는 이 프로그램으로 짜는 하드웨어 코딩이라고 보면 된다. 그러니까 펌웨어는 C로도 짤 수도 있고 C++로도 짤 수 있고, VB로도 할 수 있고, JAVA로도 할 수 있다. 물론 C로 짜는 펌웨어가 있고 JAVA로 짜는 프로그램이 있어 호환은 좀 다른 문제다. 

 여튼 실제적인 예를 들면 스마트폰 게임을 만들었다고 하면 이건 펌웨어가 아니다. 하지만.....오락실에서 망치로 두두려 잡는 두더지 게임을 프로그램하면 그건 펌웨어다. 뭐가 다른지 감이 오는가? 펌웨어는 주변 장치 또는 직접적으로 하드웨어를 제어해서 동작을 만들어내는 것이다. 

 개념이 애매하긴 한데 직접적인 하드웨어의 제어가 있으면 그것이 곧 펌웨어이다. 그러기에 펌웨어를 만들면 하드웨어의 동작이 변한다. 모터를 오른쪽으로 돌리는 펌웨어를 양쪽으로 돌리게 고칠는 것도 펌웨어를 수정해서 만들 수 있다. 

 이런 특성으로 펌웨어 엔지니어는 하드웨어까지 같이 다루게 된다. 이 펌웨어 프로그램에 따라 하드웨어가 변경이 될 수 있고 직접적으로 하드웨어를 제어해야 하기 때문에 하드웨어를 모르고서는 펌웨어 프로그램을 짤 수가 없다. 하지만 응용프로그램을 짜는 사람은 그 하드웨어에 대해 잘 몰라도 된다.

 예를 들어, 스마트폰에 모터를 1초에 한번 돌리는 프로그램을 짠다고 가정하자. 일단 펌웨어는 이 스마트폰에 있는 모터를 돌리기 위해 하드웨어를 직접 제어하여 모터를 구동하는 프로그램을 만든다. 모터의 제어선이 4개라고 하면 그 제어선 4개에 신호를 그에 맞게 제어해서 모터를 돌린다. 응용프로그램은 이 펌웨어를 이용하여 모터를 돌린다. 만들어진 펌웨어에 명령을 줘서 모터를 돌리라고 명령한다. 이게 펌웨어와 응용프로그램의 차이다. 즉, 펌웨어 프로그램을 만들려면 모터 제어선에 어떤 신호를 어떻게 넣어야 돌아가는지를 알아야하고 그에 맞게 그 신호 자체를 제어해야 한다. 응용프로그래머는 만들어진 명령이 있으면 그걸 활용해서 기능을 만든다. 즉 응용프로그래머는 모터의 동작 원리나 동작할 때 어떤 신호를 보내야 하는지 어떤 모터를 사용하는지 몰라도 된다.

 뭐 최근이라고 하기도 그렇지만 요새 거의 모든 전자제품에는 작든 크든 거의 대부분 펌웨어가 존재한다. 제어를 프로그램을 할 수 있는 제어 소자들(MCU,FPGA,DSP 등등)의 가격이 많이 저렴해졌기 때문에 요즘은 엄청난 저가가 아닌 이상에야 제어가 들어가기 때문에 펌웨어 프로그래머가 많이 필요한 실정이다.

 개인적으로 펌웨어 프로그램은 재미가 있다. 만드는 과정이 좀 힘들지만 그 과정에서 생성되는 결과물이 대부분 직관적이면서 내 프로그램으로 변화하는 걸 실험을 하면서 하다보니 첨에 설계는 힘들지만 설계가 끝나고 프로그램을 하는 과정은 재미있는 경우가 많다. 예전에 내가 가전제품에 제어보드를 만들었을 때 정수기나 인덕션, 고데기, 식품건조기 등등 많은 걸 해봤는데 내가 프로그램하는 것에 따라 동작이 변화하니 상당히 재미있게 작업했었다.

 내 글이 좀 뻘글이긴 하지만 펌웨어 프로그램에 관심이 있는 초보들한테 그냥 약간의 도움이 되었으면 한다.

728x90
반응형