현직자가 알려주는 펌웨어(임베디드) 개발 시작하기, 펌웨어 개발 방법, MCU에서 펌웨어 개발하기

728x90
반응형

(이 글을 누가 볼까 싶었는데 조회수가 조금 나와서(그래봐야 일주일에 10회 정도지만) 더 많은 내용을 전달해 보고자 수정한다. [수정날짜]2023.02.26)
(어라? 생각보다 많은 사람들이 본다. 아마 이 글을 보는 사람들은 취준생이거나 펌웨어 개발에 관심이 있거나 창업을 준비하는 분들이 아닐까 싶다. 그래서 내용을 좀 더 보강해보려고 한다.)

포스팅에 앞서 본 내용은 약 10년간 현업에서 느낀 점, 생각과 노하우를 정리한 내용이고 MCU를 활용한 펌웨어 개발자와 직업에 대해 설명하고자 한다. (본 포스팅 내용은 개인적인 생각임을 참고하길 틀리거나 다른 부분이 있을 수도 있다.) 

 

 

1. 펌웨어란?

펌웨어(Firmware)란 "특수한 목적을 달성하기 위한 하드웨어(장치, 디바이스, 장비 등 를 제어하기 위한 소프트웨어"라고 정의할 수 있다. "하드웨어를 제어하기 위한 소프트웨어"는 무엇일까? MCU(MicroController Unit)라고 하는 소형이면서 제어를 하기 위한 아주 작은 컴퓨터에서 동작하는 소프트웨어를 펌웨어라고 한다. 펌웨어는 MCU를 중심으로 구성된 특정 목적을 가진 하드웨어를 동작시키는 역할을 한다. 이 MCU를 과거에는 마이컴, 마이콤이라고 불렀는데 현재는 거의 대부분 MCU라고 한다. 

 

2. 펌웨어 개발 분류

펌웨어 개발은 제어대상이 어떤 것이냐에 따라 분류된다고 볼 수 있다. 예를 들어 디지털 체온계를 개발한다고 가정해 보자. 디지털 체온계는 사람의 체온을 센서로 측정해서 작은 LCD에 표시해 주는 역할을 하는 장치다. 여기서 제어 대상은 체온을 측정하는 센서, 센서를 통해 취득한 체온을 표시해 주는 LCD 그리고 체온계의 동작 모드를 결정하는 버튼이 있을 것이다. 이와 같은 경우는 소형 MCU를 이용해 OS를 사용하지 않고도 충분히 구현이 가능할 것이다. 그럼 이와 반대로 안마의자를 생각 보자. 안마의자는 수십 개의 모터를 이용해 기구물을 제어해야 하고 다양한 동작모드에 따라 모터의 동작을 달리 구현해야 한다. 이와 같은 경우는 체온계에 비해 제어해야 할 대상이 더 많고, 복잡한 동작을 수행해야 하기 때문에 체온계에 적용한 MCU와 같은 소형 모델로는 어려울 것이다. 이와 같은 경우는 더 고사양의 MCU를 사용하거나 한 단계 위로 올라가 MPU, CPU 사용을 고려해봐야 한다. 

개발에 사용하는 언어는 거의 대부분 C언어라고 봐도 무방하다. 최근 들어 C++, RUST 등을 사용한 펌웨어 개발이 시도되고 있지만 아직 보편화되지는 않았다.
리눅스를 이용한 펌웨어 개발에서는 C++ 이 사용되기도 하지만 RTOS나 Baremetal 펌웨어 개발에서는 잘 사용되지 않는다. OS사용 여부에 따라 OS가 없는 상태로 펌웨어를 개발하기도 하는데 이와 같은 펌웨어 개발을 Baremetal 펌웨어 라고 한다.

Process MCU MPU or CPU, SOC
언어 C C, C++
운영체제 운영체제 없음
RTOS
Linux
Windows CE 등 임베디드 운영체제
Peripheral 직접 구현
SDK 활용
Kernel
SDK활용 

MCU 또는 MPU의 주변장치를 제어하는 소프트웨어를 디바이스 드라이버라고 하는데 보통 IC제조사에서 SDK(Software Development Kit)로 제공한다. Linux에서는 Kernel에 포함되어 있다. 여기서 나오는 Kernal, SDK 등 용어는 위키백과에 자세히 나와있다. 그럼 개발을 시작하기 위한 순서를 알아보자.

일반적으로 디바이스 드라이버는 SDK를 사용하지만 사용자가 원하는 기능을 제공하지 않는 경우 직접 구현해 사용하기도 한다. SDK를 직접 구현하기 위해서는 하드웨어에 대한 전반적인 시작과 MCU에 대한 기초지식이 바탕이 되어야 구현이 가능하다. 

 

 

반응형

 

 

3. 펌웨어 개발 순서

가장 먼저 어떤 장치(제품)를 만들 것인지 결정해야 한다. 기획 단계에 해당하는데 이런 것들은 다 생략하고 개발자의 입장에서만 생각해 보면 우선 MCU 또는 MPU, SOC를 선정해야 한다. 구현하고자 하는 장치에 따라 MCU를 사용할 것인지 MPU를 사용할 것인지 더 상위 레벨의 SOC를 사용할 것인지 골라야 한다. 

선정이 완료됐으면 OS를 선정해야 한다. MCU 레벨에서 개발이 이루어진다면 RTOS 사용 여부를 결정하면 된다. MPU나 SOC를 사용할 경우 리눅스는 필수적으로 사용되어야 한다. 물론, 리눅스 없이도 개발이 가능하지만 현업에서는 대부분 Linux를 사용한다. 

IC 선정과 운영체제 선정이 완료되었으면 개발환경을 구축해야 한다. 개발환경 구축이라는 것은 컴파일러 선정을 의미한다. 컴파일러도 다양한 선택지가 있다. 상용 컴파일러(IAR, Keil)를 구매해 사용하는 방법과 제조사에서 제공하는 컴파일러를 사용하는 방법, GCC를 다운로드하여 직접 컴파일하는 방법 이렇게 세 가지다. 이건 회사마다 다른데 상용 컴파일러를 사용하는 회사가 더 많은 것 같다. 이 내용을 순서대로 다시 정리해 보면

 

1. Process 선정 :  MCU, MPU, SoC
2. 운영체제 선택 : None OS, RTOS, Linux
3. 디바이스 드라이버 선택 :  SDK or Kernel, 직접 구현
4. 컴파일러 선택 : 상용(IAR, Keil), 제조사 제공 컴파일러, GCC 

이렇게 4가지를 선택하고 개발환경을 구성하면 된다. 현재 블로그에는 MCU 펌웨어 개발에 대한 다양한 포스팅이 있으니 참고 바란다. 

 

2022.03.31 - [Hardware&Firmware/STmicroelectronic(STM)] - [STM32] 1. STM32, B-L475E-IOT01A1 개발보드 알아보기(STM32L475VGT6)

 

[STM32] 1. STM32, B-L475E-IOT01A1 개발보드 알아보기(STM32L475VGT6)

MCU 제어 관련 포스팅을 시작해보려 한다. 본 포스팅에서 사용하는 개발 보드는 STM32L475VGT6이 내장된 B-L475E-IOT01A1 보드다. 개발 보드는 IOT를 위한 개발 보드라고 말할 수 있다. 보드에는 BLE 4.1, Wi-Fi

vuzwa.tistory.com

2022.09.26 - [Software/FreeRTOS] - 1. Free RTOS(with STM32L475VGT, B-L475E-IOT01A1)

 

1. Free RTOS(with STM32L475VGT, B-L475E-IOT01A1)

RTOS를 포스팅해야지 하고 이론적 배경만 쓰고 잠시 쉬었다. 다시 RTOS를 다뤄야 할 일이 생길 수도 있어서 하나씩 정리해보려고 한다. 우선 RTOS에 대한 이론적 배경은 이전 포스팅을 참고하면 되

vuzwa.tistory.com

 

 

4. 펌웨어 개발자, 펌웨어 엔지니어 처우

 

취준생들이 가장 궁금해할 내용이겠지? 우리나라 산업 제조업이 상당히 많은 비중을 차지하고 있다.(https://www.copyright.or.kr/information-materials/statistics/GDPByIndustry/index.do)

2021년 자료다. 제조업이 압도적이다. 어떠한 물건을 만들어서 판매를 한다는 이야기다. 제조업에서 펌웨어 엔지니어는 필수다. 중소기업부터 대기업(현기차, 삼성, SK 등등)까지 제조업을 하는 거의 모든 회사에는 펌웨어 엔지니어가 존재한다고 봐도 무방하다. 그렇다면 펌웨어 엔지니어로 취업은 쉬울까? 이건 본인이 어떤 회사를 지원하냐 따라 달리질 것이다. 중소기업을 지원한다면 쉬울 것이고, 대기업을 목표로 한다면 어려울 것이다. 이건 뭐 당연한 거니까. 그렇다면 처우는? 역시 마찬가지다. 중소는 대졸기준 최소 2800~부터 시작하는 것 같다.(취업준비한 지 너무 오래돼서 잘 모름 ㅎㅎ) 대기업은 뭐.. 이 또한 회사마다 다르겠지. 여태까지 내가 만나본 사람들을 기준으로 평균을 내보면(보통 학사, 석사 급) 신입은 약 4000, 대리급은  4~5천? 과장급은 되어야 5~7천 사이의 연봉을 받는 것 같다. 부장급 정도되면 억대연봉을 받는 것 같다.(이건 정말 개인의 능력치에 따라 다르다.)

펌웨어(임베디드) 개발자는 우리 산업에 필수인력은 확실하다. 하지만 접근이 너무 어렵고 어떤 방향으로 공부를 해야 할지도 모르겠고, 가장 중요한 건 처우다. 처우가 너무 쓰레기다. 잦은 야근, 과도한 업무.. 제품개발에 대한 거의 모든 책임.. 등등 너무 힘들기 때문에 인력이 점점 줄어드는 게 아닌가 싶다. 그렇지만 경력을 쌓기 시작하면 처우가 조금씩 개선이 되고, 본인이 원한다면 프리랜서도 가능한 직업군이기 때문에 나름 괜찮다고 생각한다. 


혹시 펌웨어 관련 취준, 이직에 대해 궁금하신 내용이 있으면 댓글 달아 주세요~

 

 

의식의 흐름대로 작성했습니다. 큰 의미를 두지는 말아 주세요

 



- 끝 -

 

728x90
반응형

'Hardware&Firmware' 카테고리의 다른 글

ARM 개발에서 컴파일러 비교 Keil vs IAR vs GCC  (4) 2023.03.12