나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2024-04-19 17:52:35

펌웨어

소프트웨어 관련 정보
{{{#!wiki style="margin: 0px -10px -5px"
{{{#!folding [ 펼치기ㆍ접기 ]
{{{#!wiki style="margin:-5px -2px -12px"
<colbgcolor=#64C3FA,#548FB2> 소프트웨어
<colcolor=#000,#fff> 기능에 따른 구분 시스템 소프트웨어(플랫폼)
응용 소프트웨어
유틸리티
펌웨어
권한에 따른 구분 사유 소프트웨어 프리웨어, 셰어웨어, 애드웨어
오픈 소스, 자유 소프트웨어
직업 프로그래머(개발자), 분석가, QA, DB Admin, 디자이너
목록 소프트웨어/목록
}}}}}}}}}||


1. 개요2. 상세3. 개발 방법4. 프로젝트의 예5. 관련 문서

1. 개요

Firmware

마이크로프로세서 등의 기본적인 구동을 맡는 소프트웨어이다.

일반적으로 ROM 메모리에 기록되었기 때문에 펌웨어를 롬으로 롬을 펌웨어로 부르는 경우가 꽤 많다. 그러나 최근 용량문제나 펌웨어 업데이트의 필요성이 커지면서 다시 쓰기 불가능하거나 어려운 롬 메모리 대신 값싼 플래시 메모리 모듈을 내장해 펌웨어를 저장하는 사례가 많아 기술적으로 보면 펌웨어=롬은 틀린 말이다.

이러한 펌웨어 저장모듈은 부품에 내장되어있기 때문에 펌웨어 자체를 부품 취급하기도 한다. 하드웨어소프트웨어의 중간 개념이라 할수있는데 일반적으로 하드웨어와 소프트웨어의 중간이라 할수있는 장치 드라이버보다 부품에 더 가깝다. 과거 프로그램까지 물리적으로 컴퓨터 부품을 갈아끼우며 프로그래밍하던 시대와 달리 지금은 부품과 부품끼리 통신하거나 호환을 위해서도 여러가지 프토토콜과 규약된 통신방법이 복잡하기 때문에 펌웨어에 내장된 S/W들은 이러한 부품끼리 통신과 제어에서도 반드시 필요한 장치이다.

펌웨어의 범위는 매우 넓다. 탑재되는 기기의 종류에 따라 휴대폰이나 PMP, 게임기 같은 기기의 경우 탑재된 운영체제를 펌웨어라고 말하기도 하며, 아주 단순한 마이크로프로세서 응용 제품에 들어가는 소프트웨어를 펌웨어라고 부르기도 한다. 범위가 넓은 만큼 기능적인 측면에서도 매우 다양하다. 일반적으로 펌웨어는 시스템 소프트웨어의 일종으로 구분하지만 단순한 펌웨어는 응용 프로그램의 역할까지 같이 하는 경우가 많다. 가전제품 등에 들어가는 저성능의 CPU의 경우 운영체제가 없고 부팅이 되면 응용 프로그램이 마이크로컨트롤러에서 바로 실행되게 된다. 하드웨어 사양이 크게 제한되어 있는 마이크로프로세서상에서 구현하는데 있어서는 시스템 소프트웨어를 분리할 경우 성능적인 문제도 있으며 사용자가 직접 소프트웨어를 설치하여 다양한 목적으로 사용할 수 있는 범용 컴퓨터가 아니기 때문에 굳이 둘을 구분할 필요도 딱히 없기 때문이다.

컴퓨터나 스마트폰 등에 들어가는 부품들에도 펌웨어들이 들어가 있다. 이론적으로 현대 컴퓨터 구조에서는 중앙처리장치(CPU)와 주저장장치(RAM) 만 있으면 사용이 가능하다. 하지만 이러한 부품끼리도 서로 제어와 통신을 하려면 펌웨어가 저장된 메모리 모듈이 추가로 필요하다. 내장 펌웨어가 없다면 운영체제에 모든 제어와 통신 기능들을 추가해야 하기 때문에 개발하기가 매우 복잡해진다. 대신 이 조건만 만족되면 보조저장장치(SSD 또는 HDD 등)가 없어도 컴퓨터 사용이 가능하다. 운영체계 없이 UEFI 펌웨어 코드를 이용해 게임을 실행시키는 예시. 또 다른 이유는 전력 문제인데 CPU는 소비전력이 크기 때문에 간단한 센서 같은 경우는 마이크로컨트롤러와 펌웨어를 집어넣고 CPU와 별도로 동작하도록 하는 것이 그 목적이다.

2. 상세

파일:uefi-components.png
PC의 펌웨어 UEFI의 구성도[1]

펌웨어는 그것이 탑재된 기기의 운영체제를 담고 있거나 운영체제에게 권한을 넘겨주기 직전까지 컴퓨터를 제어하는 역할을 하기 때문에 이게 없거나 잘못되면 대부분의 전자기기가 흔히 말하는 벽돌이 된다. 하드웨어 자체에 손상이 가해진 것은 아니므로 CPU의 디버그 모드를 활성화한 뒤에 강제로 펌웨어를 밀어 넣으면 복원이 가능하다. 다만 그걸 하기 위한 전용 하드웨어가 필요하고 특별 교육도 필요해서 일반인이 펌웨어가 망가진 디바이스를 자력으로 복구하는 것은 어렵다. 단 전용 하드웨어의 가격 자체는 그리 비싸지 않다.[2] 최근엔 ROM 보다 값싼 플래시 메모리 모듈에 펌웨어를 저장해 업데이트나 복구가 더 쉬워젔으며, 2020년대 이후 나온 고급형 메인보드들은 CPU가 안달려있어도 내장된 컨트롤러를 이용해 펌웨어를 업데이트 할수있는 수준까지 올라왔다.

펌웨어는 데스크탑, 노트북, 스마트폰, 임베디드, 인터넷 공유기, TV, 모니터, 메모리 드라이브 등 거의 모든 디지털장치 완제품 또는 부품에 미리 세팅되어 나온다. 일부 Iot 기기나 별도 O/S가 없는 소규모 임베디드 서버/NAS의 경우 ?GB까지. 낸드플래쉬 칩이 따로 없고 SoC 다이 자체에 Nand플래쉬를 포함하여 대략 2GB정도까지의 펌웨어를 가진 장치들도 드물게 있다.
펌웨어 내부에는 다음과 같은 내용이 저장되어 있다.
멀티미디어 기기에서는 펌웨어 구조가 매우 복잡해지며, 그 탓에 예상하지 못했던 버그도 자주 튀어나온다. 일반적으로는 사용에 큰 문제가 없다면 그대로 방치되는 경우가 많으나, 인기 있는 기기에서는 이런 허점을 통해 해커들의 주도로 커스텀 펌웨어나 패치 등을 통해 다양한 홈브루를 구동할 수 있게 되는 경우도 있다. 스마트폰에서도 대표적으로 CyanogenMod, Omni 같은 롬이 대표적인 커스텀 펌웨어에 해당된다. 다만, 펌웨어의 개조는 대부분의 제작사에서 보증을 하지 않으며, 문제가 될 경우 사용자 과실로 처리되거나 심할 경우 A/S 대상에서 제외되기도 한다.

과거엔 CP/M 또는 미닉스 기반이였으나 최근에는 리눅스 커널을 참고하여 만들어지는 경우가 많아, 예전에 비하면 안정성이 많이 향상되었다. 이 경우에는 리눅스 자체의 계정 기능을 통해 내부적으로 샌드박스를 구현하는 경우가 많기 때문에 버그가 심각한 제품 결함이나 보안 문제로 이어지는 경우도 드문 편이다.

3. 개발 방법

롬라이터를 통해 EEPROM(Eelectrically Erasable Programmable Read-Only Memory)에 바이너리를 주입해 구동하며, 바이너리는 임베디드 크로스 컴파일러 및 CPU, 마이크로 컨트롤러 데이터 쉬트를 활용해 C언어, 어셈블리어 등 저수준 언어로 개발한다.

흔히들 EEPROM을 굽는다고 표현한다. 한번 구우면 수정하기 쉽지 않다. 새로운 부품을 사야한다.

최근엔 값싼 플래시 메모리 모듈에 펌웨어를 저장하기 때문에 하드웨어적으론 간편해젔다.

대신 쓰고 지우기 쉬운 플래시 메모리를 펌웨어 저장용 메모리로 많이 써서 해당 모듈을 감염시키거나 파괴하는 바이러스들이 늘어나 보안에도 신경을 많이 써야해서 전체적인 개발 난이도는 높아젔다.

4. 프로젝트의 예

5. 관련 문서



[1] 구형 규격인 IBM PC 호환기종의 펌웨어 BIOS와 구성이 다르다.[2] 초저가형 CPU의 경우 디버그 모드 자체가 없는 경우가 있는데 이 경우 ROM칩을 기판에서 떼어내서 펌웨어를 롬 라이터로 써 넣은 후 다시 기판에 납땜해 붙이는 방법으로 복원한다.[3] 휴대폰, 스마트폰, 냉장고, 텔레비전, 셋톱박스, 드론 심지어 스마트 전등 같은 컴퓨터 기반 거의 모든 기기 등.