임베디드 시스템

PC나 서버 쪽과 달리 임베디드 시스템은 용어가 딱히 정형화되어 있지 않음.

그냥 가장 친숙한 걸로 설명하면 핸드폰이 대표적인 임베디드 시스템임. 핸드폰도 결국 프로세서, 메모리, 저장장치, 입출력 I/O로 구성된 컴퓨터임. PC랑 구성 자체는 똑같음.

범위를 좀 더 넓히면, 기계식으로 돌아가는 거 빼고 전기로 동작하면서 뭔가를 제어하거나 연산하는 장치면 임베디드 시스템이라고 봐도 됨. 냉장고, 에어컨, 자동차 ECU, 의료 기기 전부 여기 들어감.


MCU와 SoC의 차이

임베디드를 이해하려면 칩 종류부터 잡고 가는 게 편함.

우리가 PC에서 쓰는 CPU가 있는데, 이걸 작게 만든 게 **MPU(Microprocessor)**임. MPU는 연산 코어만 있고 주변 장치(메모리, I/O 등)는 외부에 따로 붙임.

이 MPU를 제어에 특화되게, 그리고 주변 장치까지 한 칩에 몰아넣은 게 **MCU(Microcontroller Unit)**임. 저전력, 저비용, 실시간 제어가 필요한 곳에 씀.

MPU는 단독으로 쓰는 경우는 드물고 보통 SoC(System on Chip) 형태로 묶어서 씀. SoC는 CPU 코어에 GPU, 메모리 컨트롤러, 통신 모듈 같은 걸 한 칩에 통합한 것. 스마트폰이나 태블릿처럼 고성능 연산이 필요한 기기에 들어감.

정리하면:

  • MCU → 제어 특화, 단순한 시스템 (세탁기, 센서, ECU 등)
  • SoC → 연산 특화, 복잡한 시스템 (스마트폰, 라즈베리파이 등)

임베디드와 ARM

PC CPU는 인텔이나 AMD에서 만들고, x86 아키텍처 기반임.

임베디드 쪽은 ARM 아키텍처가 사실상 독점적인 지위를 가지고 있음. x86보다 저전력에 특화되어 있어서 배터리로 돌아가거나 발열 관리가 중요한 기기에 적합함.

마이크로칩, STM, NXP, NVIDIA, TI, 르네사스, 애플, 삼성 같은 팹리스 회사들이 ARM에서 라이센스를 받아서 코어 설계도를 가져오고, 거기에 자기들만의 주변 장치와 기능을 얹어서 MCU나 SoC를 만듦. 제조는 TSMC 같은 파운드리에서 함.

ARM 코어 라인업은 Cortex-M, Cortex-A, Cortex-R 계열이 있는데, 각자 쓰임새가 다름. 여기서 다 설명하면 길어지니까 직접 찾아보는 걸 권함.

RISC-V라는 오픈소스 아키텍처도 있긴 한데, 아직은 알아만 두는 정도면 됨.


개발 영역과 계층 구조

웹 개발자라고 하면 프론트엔드, 백엔드로 나뉘듯이 임베디드도 개발 영역이 나뉨.

이걸 설명하는 제일 편한 방식이 계층 구조로 보는 거임. 그리고 이 계층 구조가 MCU 기반이냐 SoC 기반이냐에 따라 달라짐.


SoC 기반 시스템의 계층

SoC 기반 시스템은 계층이 두꺼움. 각 레이어가 역할이 명확하게 나뉘어 있음.

HW (하드웨어)
  ↓
FW (부트로더)
  ↓
OS (운영체제)
  ↓
Device Driver (디바이스 드라이버)
  ↓
Middleware (미들웨어)
  ↓
APP (애플리케이션)

HW: 프로세서, 메모리, 센서, 통신 모듈 등 물리적인 구성 요소 전부.

FW (부트로더): 전원이 켜지면 가장 먼저 실행되는 코드. 하드웨어를 초기화하고 OS를 메모리에 올려줌. U-Boot, Barebox 같은 게 여기 해당함.

OS: 하드웨어 자원을 추상화하고 멀티태스킹 환경을 제공함. Linux, Windows Embedded, RTOS 등.

Device Driver: 특정 하드웨어를 OS가 다룰 수 있도록 추상화한 코드. UART, I2C, SPI 드라이버 같은 것들.

Middleware: OS와 앱 사이에서 특정 기능을 제공하는 레이어. TCP/IP 스택, 그래픽 라이브러리, IoT 프레임워크 등.

APP: 실제 목적을 수행하는 소프트웨어. 카메라 제어, UI 렌더링 같은 것들.

계층 간 상호작용을 정리하면:

  • HW ↔ 부트로더: 레지스터 직접 제어
  • 부트로더 ↔ 드라이버: 하드웨어 추상화
  • OS ↔ 미들웨어: 자원 관리, 프로세스 간 통신
  • 미들웨어 ↔ APP: API 제공

SoC 기반은 계층마다 담당자가 따로 있는 경우가 많음. 부트로더 개발자, OS 포팅 엔지니어, 드라이버 개발자, 미들웨어 개발자, 앱 개발자가 각각 다른 사람임. 한 명이 저 계층 전부를 커버하긴 현실적으로 어렵고, 그래서 각 영역마다 담당 직무가 따로 생긴 거임.


MCU 기반 시스템의 구조

MCU 기반은 SoC에 비해 계층이 단순함. 어떻게 구성하느냐에 따라 크게 세 가지 형태로 나뉨.

가장 단순한 경우는 펌웨어 하나가 하드웨어 제어와 앱 로직을 통째로 담당하는 구조임.

HW → FW (제어 + APP)

세탁기, 전자레인지, 온도 센서 제어처럼 기능이 단순한 시스템에서 많이 씀.

태스크가 여러 개이거나 실시간 응답이 중요하면 RTOS를 얹기도 함.

HW → RTOS → APP

드론, 의료 기기, 산업용 로봇처럼 여러 작업을 동시에 처리해야 하는 시스템에서 씀.

OTA 업데이트나 안전 기능이 필요하면 부트로더를 별도로 두는 구조가 됨.

HW → FW(부트로더) → FW(APP)

자동차 ECU가 대표적인 경우임.

MCU 기반에서 이 FW 한 덩어리가 담당하는 범위는 SoC로 치면 OS, 드라이버, 미들웨어, APP 영역까지 다 커버하는 셈임. 시스템이 복잡해질수록 계층이 늘어난다고 보면 됨.


칩 제조사와 응용 개발사

기술 계층 말고 산업군 관점에서도 임베디드 엔지니어를 나눌 수 있음.

인하우스 칩을 만드는 쪽: 엔비디아, 퀄컴, 브로드컴, STM, TI, 삼성, 애플처럼 SoC나 MCU 자체를 설계하는 회사.

상용 칩을 가져다 응용하는 쪽: 만들어진 칩을 써서 특정 목적의 시스템을 만드는 경우. 차량, 방산, 로봇, 항공우주, 의료기기, 가전 등 응용 분야에 따라 다양하게 나뉨.

HW 엔지니어도 디지털/아날로그 회로, FPGA, RF 설계 등으로 세분화되어 있고, 이쪽은 전공이 따로 있을 만큼 각자의 영역이 깊음.


이 계층 구조가 임베디드 시스템의 절대적인 기준은 아님. 같은 SoC를 써도 시스템 요구사항에 따라 구성이 달라질 수 있고, MCU 기반도 복잡해지면 계층이 늘어남. 큰 그림을 잡는 용도로만 보면 됨.