{{위키데이터 속성 추적}}
[[파일:Television remote control.jpg|frame|right|일상에서 쉽게 볼 수 있는 텔레비전 리모컨은 펌웨어로 동작하는 기기의 하나이다.]]
'''펌웨어'''(firmware)는 [[컴퓨팅]]과 [[공학]] 분야에서 특정 [[하드웨어]] 장치(read-only memory, ROM)에 [[임베디드 시스템|포함된]] [[소프트웨어]]로, 소프트웨어를 읽어 실행하거나, 수정하는 것도 가능한 영구적 소프트웨어(permanant software)를 뜻한다.<ref>예: [[최종 사용자]]에 의해 [[데이터]]가 쓰거나 지워짐</ref> '''탑재 소프트웨어'''라고도 하며, 주로 [[CPU]]를 사용하는 전자 기기에 탑재되어 [[하드웨어]]를 구동시키는 역할을 수행한다.

[[하드웨어]]의 '''로우 레벨 제어'''(low-level control) 즉, [[운영체제]] 없이 한정된 자원([[시스템 리소스|리소스]])으로 단순한 [[로직]] 또는 '미세 기능'(micro function)만을 수행하는 [[마이크로코드|마이크로 프로그램]]이다. ROM이나 PROM에 저장되며, 하드웨어보다는 업그레이드하기가 쉽지만, 소프트웨어보다는 업데이트가 어렵다.

펌웨어의 일종인 [[바이오스]]는 [[하드웨어 추상화]](hardware abstraction) 작업을 수행한다.

== 역사 ==
애셔 오플러(Ascher Opler)는 펌웨어(firmware)라는 용어를 1967년 《[[데이터메이션]]》 기사에서 만들어냈다.<ref name="Opler">
{{저널 인용
| author = Opler, Ascher
|date=January 1967
| title = Fourth-Generation Software
| journal = Datamation
| volume = 13
| issue = 1
| pages = 22–24
}}</ref> 원래는 [[마이크로코드]]를 담고 있고 컴퓨터의 명령 집합을 구현한, 쓰기 가능한 [[컨트롤 스토어]](크기가 작은 특수 고속 메모리)의 내용물을 의미했는데 [[중앙 처리 장치]](CPU)가 실행할 수 있는 명령을 수정하기 위해 다시 로드할 수 있었다.

1990년대 중순까지 펌웨어를 업데이트하는 일은 일반적으로 소켓 형태의 ROM 집적 회로였던, 펌웨어를 포함하는 기억 매체를 교체하는 일이 수반되었다. 플래시 메모리는 시스템으로부터 물리적으로 집적 회로를 제거하지 않고 펌웨어를 업데이트할 수 있게 해준다.



== 펌웨어의 예 ==
[[파일:AMI 486DX EISA BIOS 20051109.jpg|섬네일|right|롬 바이오스 펌웨어가 AT 메인보드에 붙어 있다]]
* [[개인용 컴퓨터|PC]]에서 흔히 볼 수 있는 [[바이오스]]
* [[애플 매킨토시]]에 사용되는 [[오픈 펌웨어]]
* [[롬]] [[집적 회로]]의 [[컴퓨터 프로그램]]
* [[EPROM]] 칩은 특정한 하드웨어로 수정이 가능한 프로그램이지만, 응용 프로그램으로는 수정이 되지 않는다.
* 산업용 프로그램
** 각종 [[계측기]], [[오실로스코프]] 등의 프로그램
** 각종 [[로봇]]의 프로그램
* [[휴대전화]]의 프로그램
* [[스마트폰]]
* [[PDA]]의 프로그램
* [[내비게이션]]의 프로그램
* [[홈 네트워크]]
* [[MP3 플레이어]]의 프로그램
* [[디지털 TV]]
* [[포터블 미디어 플레이어|PMP]]
* [[디지털 비디오 레코더|DVR]]
* [[디지털 멀티미디어 방송|DMB]]
* [[디지털 카메라]]의 프로그램
* [[USB]] 기억 장치, [[USB]] 허브 등 각종 [[USB]] 장치
* 가전 전자제품의 프로그램
** [[전기밥솥]]
** [[냉장고]]

== 펌웨어와 장치 드라이버 ==
현대의 시스템에 들어가는 대부분의 장치들은 저들만의 소프트웨어를 실행하는 특수 목적의 컴퓨터들이다. 이 장치들 가운데 일부는 장치 안에 있는 ROM 안에 소프트웨어 (펌웨어)를 저장한다. 그러나, 여러 해에 걸쳐, 제조업체들은 호스트 시스템에서 펌웨어를 불러내는 것이 값이 싸면서도 유연성이 있다는 사실을 알아 냈다. 그 결과, 현재의 많은 하드웨어는 호스트 컴퓨터가 필요한 펌웨어가 채워질 때까지 어떠한 방법으로도 기능을 할 수 없다. 이러한 펌웨어 로드는 [[장치 드라이버]]에서 구현된다.

많은 장치들의 펌웨어는 추가 하드웨어를 설치하지 않고, 보통 판매업체가 제공하는 소프트웨어를 통해 업데이트할 수 있다.

함부로 펌웨어를 수정할 경우 때때로 제작자가 의도치 않은 결과를 가져올 수 있다. 일례로 DVD 플레이어의 지역 코드를 지웠을 경우를 들 수 있다.

== 펌웨어 해킹 ==
{{출처 필요 문단|날짜=2010-10-8}}
'''커스텀 펌웨어'''는 새로운 기능을 제공하고자 하거나, 숨겨진 기능을 언락(unlock)하고자 하는 [[서드 파티]]들에 의해 생성된 비공식적 버전의 수정된 펌웨어를 말한다. 그리고 이러한 수정 작업을 '''펌웨어 해킹'''이라고 한다.

대부분의 커스텀 펌웨어는 [[오픈 소스]] [[자유 소프트웨어]]이다.

이런 해킹된 커스텀 펌웨어는 설치하거나 실행하기 위해, 많은 장치들에 있는 펌웨어 업데이트 기능을 사용한다. 그러나, 몇몇 장치 제작사가 라이선스 없는 코드 실행을 막기 위해 하드웨어에 락을 걸려고 시도했기 때문에, 몇몇 커스텀 펌웨어는 실행하기 위해 [[취약점 공격|익스플로잇]]에 의지해야 한다.

=== 예시 ===
* [[CHDK]]: 캐논 디지털 카메라
* [[OpenWRT]]: 무선 [[공유기]]([[라우터]])
* [[게임 콘솔]]의 [[홈브루]] 프로젝트
** [[PSP 커스텀 펌웨어]]: 휴대용 게임기
* [[락박스]](Rockbox): [[디지털 오디오 플레이어]]
* [[아이팟 리눅스]]([[:en:iPodLinux]]): 기능이 제한된 장치에서 범용 컴퓨팅 기능([[둠 (1993년 비디오 게임)|둠]] 등을 실행)을 언락하는 예
* [[스마트폰]]: 몇몇 안드로이드폰은 루팅시 커스텀 펌웨어로 변환이 가능하다. 예로는 MIUI, CM6, CM7 등이 대표적이다. 하지만 잘못할 경우 작동 불가. 즉 벽돌상태가 될 수 있으며, 이로 인해 고장날 시 유상수리를 해야 하므로 하지 않거나 사용자의 주의가 필요하다. 만들어지는 이유는 대부분 휴대전화를 최적화시키거나 필요없는 애플리케이션을 삭제하거나 펌웨어를 조금씩 변환하여 좀 더 보기 좋게 만들려고 커스텀 펌웨어를 만든다.

== 같이 보기 ==
{{위키공용분류}}
* [[펌웨어 해킹]]
* [[마이크로프로그램]]
* [[플래시 메모리]]
* [[바이오스]]
* [[연방 표준 1037C]]
* [[MIL-STD-188]]

== 각주 ==
{{각주}}

{{전거 통제}}

[[분류:임베디드 시스템]]
[[분류:펌웨어| ]]