펌웨어 코드 또는 데이터입니까?


29

누군가 펌웨어를 장치에 "플래시"했다고 말하면 이것이 실제로 무엇을 의미하는지 궁금합니다.

  1. 펌웨어는 메모리에 저장되고 장치의 CPU (컴퓨터의 다른 EXE와 같이)에 의해 해석 될 수있는 기본 바이너리입니까? 아니면 불변 프로그램에 대한 입력으로 작동하는 펌웨어가 이미 장치에 하드 코딩 / 유선되어 있습니까?
  2. 후자의 예가 펌웨어가 아닌 경우 무엇이라고 부릅니까? 예를 들어 장치에 일부 바이너리 ( someapp.exe) 가 있고이 바이너리를 제거하거나 수정할 수 없다고 가정 해 봅시다 . 바이너리는 실행될 때 메모리 칩에서 입력을받습니다. 이 칩에 데이터를 "플래시"할 수 있으므로 입력 / 구성에 someapp.exe영향을 주어 다음에 실행될 때 영향을 미칩니다. 펌웨어가 아닌 경우 이것을 무엇이라고합니까?

12
이것은 정말 좋은 질문입니다. "토스터는 토스트하지 않습니다. 아두 이노를 넣을 수 있습니까?" 질문.
Jason_L_Bens

17
음,이 질문은 코드 : 좋은, 그렇지 않으면 그것은의 주요 결함이 될 것입니다 데이터 및 데이터가 될 수 있습니다 코드 - 지금까지 폰 노이만 아키텍처 / 모델에 관한 한. 따라서, 전체 질문에 헛 - 코드가 될 (그리고, 일반적으로 수 있기 때문 입니다 ) 데이터와 반대의 부사장으로 처리; 또한 OP : en.wikipedia.org/wiki/Firmware를 확인하지 않겠습니까? 그 동안, 따라서 - 그것은 바로이 질문에 및 펌웨어와 관련된 많은 다른 것들에 대한 답을 가지고 있다 질문에 "나는 230V 소켓에 12V 전구를 연결 수"에서 편안한 휴식이 내 책에 여전히 하위 파입니다 .. .
vaxquis

2
여기에 대한 대답은 "예"라고 확신합니다.
코너 울프

7
머신 코드는 CPU의 불변 배선에 입력 된 데이터입니다.
user253751

2
책은 단어 나 글자입니까?
Nick T

답변:


27

그러한 정의와 함께, 우리는 대부분의 경우에 동의하지만, 펌웨어와 그렇지 않은 것 사이에는 확실한 경계가 없습니다. 펌웨어는

  • 영구적으로 저장 됨 (변경할 수있는 지식이있는 사람 제외)
  • 변경하지 마십시오 (... 제외)
  • 다른 소프트웨어의 도움없이 프로세서에서 작동합니다 (단, 당신은 그것을 얻습니까?)

(펌웨어) 인터프리터에 의해 해석되는 데이터에 관해서 : 이것은 제품을 더 비싸게 만들기 때문에 전문적인 환경에서 수행되지 않는 경우가 많습니다. 동일한 최종 목표를 달성하려면 더 많은 메모리, CPU 성능 등이 필요합니다. 그것은 됩니다 그러나 때로는 종종 플래시의 기본 통역, 취미 설정에 사용하고, (토큰 화) 기본 응용 프로그램 (너무 플래시 나) EEPROM에 저장된다. PICAXE 및 다양한 기본 스탬프를 확인하십시오.

이러한 설정에서 IMO는 기본 인터프리터와 기본 응용 프로그램을 모두 펌웨어라고합니다.


저장된 코드를 해석하는 펌웨어 해석기의 흥미로운 사용법 (IMO도 펌웨어로 간주해야 함)은 XBOX 360 시작입니다. 이 훌륭한 연설 은 그것을 자세히 설명합니다.


MSalters는 FPGA 코드 / 구성 데이터가 펌웨어로 간주되어야하는지 궁금합니다.

가장 중요한 측면 (생산 공정 후반에 변경 될 수있는 정보이지만 최종 사용자가 마음대로 변경할 수는 없음) FPGA 비트는 펌웨어처럼 동작합니다. 그것이 질문인지 아닌지 입니다 어떤 정의 논쟁에 따라 펌웨어를. 중요한 점은 펌웨어처럼 작성, 처리 및 관리 할 수 ​​있다는 것입니다. (오리처럼 걷고 qua 거리면 오리인가요?)

유용하지 않은 정의를 귀찮게하지 마십시오. 마이크로 코드 펌웨어입니까? 표현이 중요합니까? 맥락이 중요합니까? IWM 펌웨어의 ROM 비트입니까?


OP의 질문에 대한 Vaxquis의 의견은 그가 연결하는 wiki 기사를 읽도록 자극했습니다. IMO 거기에 주어진 펌웨어의 정의 (영구적 인 메모리와 프로그램 코드 및 그 안에 저장된 데이터)는 번거 롭습니다. IMO 카 내비게이션 시스템에 저장된지도는 저장 방식에 상관없이 펌웨어가 아니라 데이터입니다 (위키에 따르면 펌웨어 여야 함). 그리고 iPhone 또는 Android 폰의 앱은 펌웨어가 아닌 애플리케이션입니다 (위키에 따르면 펌웨어이기도 함).


이제 FPGA 프로그램이 펌웨어로 계산되는지 궁금합니다. 직관적으로 그렇습니다. 그러나 프로세서에서는 작동하지 않습니다. 그러나 코드와 데이터의 중간에있는 전형적인 비트입니다.
MSalters

TI 99/4 컴퓨터 (1979)에는 GPL이라는 언어의 ROM에 인터프리터와 GPL로 작성된 BASIC 인터프리터가 포함되었습니다. GPL의 필수 기능은 GROM 칩 (주로 순차적 액세스 용으로 설계되었으며 랜덤 액세스 ROM보다 물리적으로 더 작고 저렴하게 만들 수 있음)에 저장된 코드를 실행할 수있어 TI 99/4를 대량으로 볼 수 있다는 것입니다. -시장 개인용 컴퓨터 디자인은 BASIC 스탬프와 유사합니다.
supercat

14

펌웨어는 플래시 메모리와 같은 비 휘발성 메모리에 저장된 프로그램 코드입니다. 이 용어는 임베디드 시스템과 관련하여 가장 자주 사용됩니다. 프로세서와 동일한 칩에 있거나 별도의 장치에있을 수 있습니다.


감사합니다 @Leon Heller (+1)-위의 두 번째 예의 이름이 있습니까? 여기서 칩의 고정 바이너리에 입력 데이터를 본질적으로 "깜박이는"것입니까? 아니면 이것이 일반적으로 실행되지 않습니까? 다시 감사합니다!
HeineyBehinds

데이터 일뿐입니다. 휘발성 또는 비 휘발성 메모리에 저장 될 수 있습니다.
레온 헬러

# 2에 사용하는 용어는 "조회 테이블"입니다. 내가 생각할 수있는 예는 수치 제어 발진기에 사용되는 사인 함수 값입니다.
kjgregory

1
@KGregory 룩업 테이블, 해석 된 프로그램, 이미지 데이터 일 수 있습니다.
glglgl

@glglgl에 동의했다. 나는 그것들이 룩업 테이블의 형태로 간주 될 수 있다고 주장 할 수 있지만, 우리는 지금 요점 옆에 있다고 생각합니다.
kjgregory

9

나는 두 가지 옵션이 모두 정확하다고 생각합니다. 다른 추상화 수준에서 마이크로 프로세서를 보는 것입니다. 변경 불가능한 바이너리로 언급하는 것은 하드웨어 자체 일 수 있으며, 수행 할 수있는 기능이 상당히 제한되어 있습니다. 명령어 주소 0x0000 가져 오기, 디코드 명령어, 제공된 주소 / 레지스터 가져 오기, 실행, 명령어 카운터 증가. 이것이 마이크로 프로세서 파이프 라인이므로 변경할 수 없습니다. 명령을 메모리에 저장하여 마이크로 컨트롤러가 수행하는 작업을 제어 한 다음 순차적으로 읽습니다. 따라서 기본적으로 펌웨어는 추상화 수준이 낮은 불변 프로그램에 대한 입력 데이터 일뿐입니다. 그러나 일반적으로 펌웨어는 개념적으로 더 쉽게 마이크로 프로세서를 제어하는 ​​특수 프로그램으로 상상하기가 더 쉽습니다.


데이터와 코드를 강조하는 데 도움이되는이 대답, +1을 좋아하십시오. 결국 같은 것입니다.
Vality

최소한 Von Neumann 아키텍처와 동일합니다. 버스가 분리되면 결국 버스가 다르지만 다른 버스라고 주장하기 시작할 수 있습니다.
Jason_L_Bens

8

실제로 둘 다입니다.

펌웨어의 한 예는 PC BIOS이며, BIOS의 한 부분은 실행 가능하지만 BIOS 자체의 다른 부분은 실제로 데이터입니다. 특히 기술 유형에 관계없이 BIOS ROM의 다른 기능을 열거하기위한 표입니다. 에. 종종 데이터는 다른 플래시 메모리, 배터리 또는 커패시터 백업 RAM에 CMOS SRAM 또는 다른 호환 가능한 메모리 칩 기술에 저장됩니다.

펌웨어는 불변 / 비 휘발성 메모리에 사용되는 일반적인 용어로, 회로에 전기적인 문제가 없거나 프로그래밍주기가 멈춘 경우, EEPROM 또는 플래시에 대해 전원주기에 따라 액세스 할 수 있습니다. ROM.

정의에 따른 펌웨어는 시스템 또는 내장 구성 요소에 설치된 하드웨어를 초기화하고 테스트하며 운영 체제가 구성 요소를 사용할 수 있어야하는 낮은 수준의 루틴 (BIOS 함수 호출이라고도 함)을 제공하는 가장 낮은 액세스 수준입니다. 시스템에서. 예전에는 BIOS 또는 Basic Input Output System에 Commodore 64 및 1970 년대의 다른 개인용 컴퓨터와 같은 "BASIC"이라는 프로그래밍 언어가 포함되어있었습니다. 물론 사용하기 위해 BASIC이 내장 된 구형 컴퓨터가있었습니다. 전문 컴퓨터 과학자들도 경영진 또는 프로그램 ROM이 시스템이 해당 문자 ROM으로 이동하여 문자를 순서대로 찾거나 전체 칩을 RAM으로 덤프하여 작업 할 수있는 순수한 데이터 형식 인 문자 또는 기호 ROM에 대해 들어 본 적이있는 경우 그곳에.

기본 PROM, EPROM, EEPROM, Flash 프로그래머는 유사한 형식의 접미사 .hex 또는 .bin과 같이 칩에서 펌웨어를 굽습니다. 이는 칩으로 전송하는 데 사용하는 응용 프로그램 인 펌웨어에 따라 다릅니다.

또한 펌웨어 Blob 파일이 있습니다.이 파일은 런타임에로드되는 라이브러리 및 루틴 형태의 실행 파일입니다. 이의 좋은 예는 무선 하드웨어 드라이버입니다. 카드를 통해 해당 카드의 모든 하드웨어를 실행하기에 충분한 코드가 들어 있습니다. 컴퓨터 시스템. 유일한 차이점은 카드와 USB 기반 펌웨어가 실제로는 저장되지 않고 하드 디스크에 저장되어 메모리에로드된다는 것입니다. 기본적으로 변환 서비스 계층 및 필터로 작동합니다. 데이터와 코드이기도합니다.

이것의 기본은 실제로 다른 컴퓨터 및 임베디드 시스템 (예 : 운영 체제가 시작될 때 실제로로드 된 다음 런타임 펌웨어를 포함한 저수준 하드웨어 드라이버로드를 시작하는 무선 펌웨어) 용 BIOS를 작성한다는 것입니다. ). 제조업체에서 업데이트를받은 다음 업데이트가 이전을 덮어 쓰지 않는 한 일상적인 내용을 변경하지 않기 때문에 펌웨어라고합니다. 이 경우 새 항목이 업데이트 될 때까지 새 펌웨어로 작동합니다 (그렇지 않은 경우 운영 체제가로드 될 때 사용하는 펌웨어 임).

기술적으로 영구적 인 솔루션으로 칩에 있지 않으므로 펌웨어를 업데이트하기 위해 특별한 도구와 응용 프로그램이 필요하기 때문에 펌웨어라고해서는 안됩니다 (오래된 BIOS와 플래시 메모리의 경우).

더 궁금한 점이 있으시면 기꺼이 답변 해 드리겠습니다.


6

펌웨어는 소프트웨어 코드와 같은 일종의 개발 환경에서 만들어진 코드이지만 CPU가 이해할 수 있도록 머신 코드로 요약됩니다. 마이크로 컨트롤러 나 다른 칩의 메모리를 덤프하면 C 코드 나 프로그래밍 한 것과는 전혀 다르다는 것을 알 수 있습니다.

따라서 어떤 종류의 OS 환경에서 실행될 컴파일 된 프로그램이기 때문에 .EXE를 프로그래밍하지 마십시오. 일반적으로 .hex 또는 .elf를 프로그래밍하는 경우 실제로 프로그래밍하는 장치에 따라 다르지만 컴파일러가 대신 파일 형식을 컴파일하므로 파일 형식에 신경 쓰지 않기 때문에 중요하지 않습니다. 코드를 기계 코드로 코드화하여 칩 온칩 플래시 또는 스토리지 구성표에 배치하십시오.

펌웨어는 일반적으로 환경 조건을 프로그래밍해야한다는 점에서 불변입니다. 펌웨어 코드를 변경하거나 그대로 둘 수 없으며 변경, 컴파일 및 장치 플래시를 수행해야합니다.

  • 일반적으로 소프트웨어 코드는 운영 체제에서 실행되는 코드입니다.
  • 펌웨어 코드는 칩의 베어 메탈에서 실행되는 정보입니다. 펌웨어는 실제 응용 프로그램이거나 간단한 운영 체제 일 수 있으며, 임베디드 세계에서 이동식 저장 장치 또는 플래시 RAM을 통해 소프트웨어를로드 할 수 있습니다. 이 수준은 여전히 ​​코드이기 때문에 이진 코드로 줄어들 수 있습니다.
  • 전압으로 직접 작업을 시작하면 하드웨어 수준에 도달 한 것입니다.

2
"하지만 그런 다음 CPU가 이해할 수 있도록 머신 코드로 요약됩니다." C로 작성되거나 유사한 것으로 작성되는 한 소프트웨어 코드와 마찬가지로.
glglgl

1
프로세서가 이해하는 것은 그렇습니다. 바이너리이지만 기계 언어보다 한 단계 높은 어셈블리 언어로 프로그래밍하는 사람들에게는 니모닉 연산 코드 (업계에서 볼 수있는 op 코드)라는 것이 있습니다 [바이너리 ]).

0

펌웨어는 일반적으로 소프트웨어 세계와 하드웨어 세계의 중간에 존재하는 것을 지정하는 데 사용되는 일반적인 용어입니다.

하드웨어를 변경하기가 어렵습니다. 소프트웨어는 변경하기 쉽습니다. 펌웨어는 하드웨어만큼 변경하기 어렵지 않지만 소프트웨어보다 변경하기가 어렵습니다.

변경 가능한 실행 코드, 데이터 또는 구성 정보 (FPGA / PLD 등)를 논의하는 데 사용될 수 있습니다.


넓은 의미에서 단어와 정의는 사실입니다. 그러나 이러한 칩은 실제로 코드 나 데이터가 아닙니다. 컴플리트가 완료되면 컴파일러는 완전한 솔루션 또는 시스템의 다른 부분을 함께 결합하는 로직으로 논리 설계를 작성합니다. 물리적 인 74 및 54 시리즈 로직 게이트 및 레지스터를 사용하는 대신 솔루션을 만듭니다. 아담, 이걸 가져서 정말 기뻐

0

내부 의미에서 어떤 펌웨어가 있는지 설명합니다.

펌웨어는 매우 특정한 하드웨어에서 실행되는 코드입니다. 즉, op 코드는 작성된 하드웨어에 따라 다르며 칩 또는 인터페이스 제품군이거나 하나의 항목만을 의미합니다.

본질적으로 펌웨어의 기능은 다음과 같습니다.

  1. 주어진 프로세서가 수행하고 실행할 하드 와이어드 명령어를 "부트 스트랩"이라고합니다. 가장 부팅 가능한 컴퓨터 중 BIOS에있는 컴퓨터

  2. 펌웨어의 지침을 통해 해당 하드웨어를 초기화하십시오.

  3. 점프 테이블을로드 / 업로드하십시오.

  4. 지정된 장치의 레지스터에 액세스 할 수 있도록합니다.

  5. 콜드 (전원 끄기 상태) 또는 웜 스타트 (정상 재부팅 또는 리셋 핀 사용) 후 BIOS를 사용한 후에는 종료 루틴으로 제어권을 넘기십시오.

  6. 대부분의 BIOS (펌웨어)는 특정 칩셋을 염두에두고 설계되었으며 모든 칩셋의 기능을 근절하고 컴퓨터 나 내장 장치의 특정 버스 라인에 연결할 수있는 데이터를 제거합니다.

  7. 하드 디스크는 내장형 장치이며 BIOS도 있고 칩에 펌웨어 형식이있는 저장 장치 솔루션의 좋은 예입니다.

기본적으로 모든 펌웨어는 다른 프로세서가 해당 장치에서 기능을 가져 오기 위해 수행하는 명령입니다. 물리적 장치에로드되는 소프트웨어이며 전원이 꺼지면 장치의 전원이 다시 공급 될 때있을 것입니다.

기술적으로는 프로그래밍 또는 스크립팅 언어를 사용하여 이진 파일을 만들 수 있습니다. 이진 및 16 진수 시스템을 배우기 위해 타겟팅하려는 프로세서의 작동 방식, 실제 op 코드, 내부 레지스터 (자신의 용도는 물론), 알고있는 어셈블러를 만드는 방법 만 알고 있으면됩니다. 어셈블리 언어의 코드. 완료된 후 다른 프로그램을 작업하여 이진으로 변환 한 다음 .bin 또는 .hex 파일로 저장할 수 있습니다.

Ada, C, C ++, D 및 기타 프로그래밍 언어가 의사 op- 코드로 잘린 원시 코드 인 "토큰"을 기계 언어로 변환하는 방법을 알고 싶다면 나는 당신이 읽을 것을 권장하는 몇 권의 책을 가지고 있으며, 일부는 매우 기초적이며 매우 구체적인 프로세서를 중심으로하지만 배우는 것이 좋습니다. 나는 당신이나 다른 사람이 정보를 읽은 것을 익사하고 싶지 않기 때문에 당분간 한 권의 책을 줄 것입니다.

  1. Charles N. Fischer & Richard J. LeBlanc, Jr.의 'C'를 사용하여 컴파일러 제작
  2. 이 사이트를 방문하십시오. IBM PC에있는 x86 칩셋을 기반으로합니다. http://www.laynetworks.com/assembly%20tutorials.htm

바로 PC의 어셈블리 언어 프로그래밍에 대한 소개입니다. 인터럽트 (하드웨어 및 소프트웨어 인터럽트) 처리 및 기타 여러 주제에 대해 설명하고, BIOS가 실제로 수행하는 작업 및 작동 방법에 대해 자세히 설명합니다.

어셈블리 언어 및 기계 언어와는 달리 하드웨어 관련 사항을 모르면 Ada, C, C ++, D에서 더 많은 것을 얻을 수 있습니다. 어셈블리 및 기계 언어에서 수행중인 작업을 모르는 경우 나쁜 일이 발생하거나 코드가 작동하지 않습니다. 나는 후자의 경우를 선호한다.

참고 : 위의 답변에 대해, 플래시 RAM에 대해서는 플래시 ROM이 있지만 플래시 RAM은 없습니다. 플래시 ROM에는 펌웨어가 있거나, 배터리 또는 커패시터가 지원되는 RAM이거나, 설정 한 BIOS 옵션에 대한 매개 변수가 포함 된 다른 플래시 ROM이 있습니다.

플래시 ROM 또는 RAM 칩인 경우 데이터 메모리 (프로그램 메모리 / 펌웨어 자체와 비교)를 저장하거나 지우는 방법에 대한 펌웨어 코드가 있습니다. PC에서 BIOS 암호가 깨지거나 기억하지 못하는 경우 (또는 누군가가 엉망인 경우) 사례를 열고 "CMOS CLR / CMOS CLEAR / BIOS RESET / BIOS RST"라는 두 핀을 찾을 수 있습니다. 이 두 핀을 함께 단락 시키면 메모리도 지워집니다. 그 후에해야 할 일은 두 핀이 여전히 단락 된 경우 재설정 버튼을 누르는 것입니다. 암호가 지워지고 1990 년대 이후에 새로운 컴퓨터를 사용한다고 가정 할 때 PC BIOS에 완전히 액세스 할 수 있습니다.

새 PC에는 펌웨어 용 플래시 메모리가 있고 배터리 백업 SRAM이 있습니다 (DRAM 칩과 같이 지속적으로 새로 고칠 필요는 없으며, 이전 기술을 기반으로 함).


0

임베디드 시스템 측면에서, 플래싱 펌웨어는 플래싱 장치를 사용하여 마이크로 컨트롤러의 ROM을 지우고 새 코드로 다시 쓴 것을 의미합니다. 이 펌웨어는 16 진수 형식입니다.

OS 관련 용어에 관해서는 ROM에서도 플래시되지만, 이번에는 업데이트가 올 때 OS를 플래시하는 것이 OS의 책임입니다.


0

"역사적" 관점 을 사용하면 펌웨어 가 무엇인지 더 기본적으로 이해할 수 있다고 생각합니다 .
먼저 "하드웨어"로 시작합니다. 주어진 기능을 제공 / 생성하기 위해 튜브, 릴레이, 트랜지스터 및 IC를 사용할 수 있습니다. 이러한 구성 요소를 여러 개 사용하고 필요한 기능을 수행하는 장치를 만듭니다. 이 기능은 "하드웨어"로 간주되었습니다. 기능을 변경하려는 경우 와이어, 소켓 등을 납땜 해제해야하고 "하드"작업 을 수행 해야했기 때문 입니다. 따라서이 기능 구현 방법은 하드웨어를 사용하는 것으로 알려졌습니다. CPU, RAM 및 코드를 사용하여 함수를 만드는 또 다른 방법이되었고 "소프트웨어"로 알려졌습니다.그러나 디자인을 변경해야합니다. "그러나 가능한 한 많은 디자인을 가능한 빨리 완성해야하지만 가능한 한 쉽고 마지막으로"마지막 "디자인 변경을 수행 할 수 있어야합니다. ROM을 사용하면 "첫 번째 배송"시점까지이 융통성이 허용됩니다. EEPROMS는 "첫 번째 배송"이후 (필드에서) 이후에도 변경을 허용 합니다 .ROM 및 PROM에 필요한 코드"펌웨어 이름 " "

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.