Ist Firmware-Code oder Daten?

29

Wenn jemand sagt, dass er Firmware auf ein Gerät "geflasht" hat, bin ich gespannt, was dies eigentlich bedeutet.

  1. Ist Firmware nur eine native Binärdatei, die im Speicher gespeichert ist und von der CPU des Geräts interpretiert werden kann (wie jede andere EXE-Datei auf einem Computer)? Oder handelt es sich bei der Firmware nur um Daten, die als Eingabe für ein unveränderliches Programm dienen und bereits fest mit dem Gerät verbunden sind?
  2. Wenn das letztere Beispiel keine Firmware ist, wie würden Sie es nennen? Angenommen, auf einem Gerät befindet sich ein Binary ( someapp.exe), und Sie können dieses Binary nicht entfernen oder ändern. Die Binärdatei empfängt, wenn sie ausgeführt wird, Eingaben von einem Speicherchip. Sie können Daten auf diesen Chip "flashen" und somit die Eingabe / Konfiguration someapp.exebeeinflussen, die beim nächsten Start wirksam wird. Wenn nicht Firmware, wie würde das heißen?
HeineyBehinds
quelle
12
Das ist eine wirklich gute Frage. Es ist eine schöne Pause von der Reihe "Mein Toaster röstet nicht. Kann ich ein Arduino hineinlegen?" Fragen.
Jason_L_Bens
17
Nun, diese Frage wäre gut, wenn nicht der Hauptfehler darin: Code ist Daten, und Daten können Code sein - soweit es die Von Neumann-Architektur / das Von Neumann-Modell betrifft. Somit ist die ganze Frage vergebens - da Code wie Daten behandelt werden kann (und normalerweise auch so behandelt wird ) und umgekehrt; auch zu OP: warum nicht überprüfen en.wikipedia.org/wiki/Firmware ? es hat die Antwort auf diese Frage sehr, und viele anderen Dinge , über die Firmware - also, während es ist eine nette Abwechslung von Fragen „Kann ich eine 12V Glühbirne in 230V - Steckdose stecken“, es ist immer noch unterdurchschnittlich in meinem Buch .. .
vaxquis
2
Ich bin mir ziemlich sicher, dass die Antwort hier "Ja" lautet.
Connor Wolf
7
Maschinencode ist nur die Dateneingabe in die unveränderliche Verkabelung der CPU.
user253751
2
Ist ein Buch Wörter oder Buchstaben?
Nick T

Antworten:

27

Wie so oft stimmen wir in den meisten Fällen überein, aber es gibt keine wirklich feste Grenze zwischen dem, was Firmware ist und dem, was nicht. Firmware ist

  • dauerhaft gespeichert (mit Ausnahme einer sachkundigen Person, die dies ändern kann ...)
  • nicht für Änderungen vorgesehen (außer ...)
  • arbeitet auf dem Prozessor ohne die Hilfe anderer Software (außer ... Sie bekommen es?)

Daten, die von einem (Firmware-) Interpreter interpretiert werden: Dies wird in einer professionellen Umgebung häufig nicht durchgeführt, da das Produkt dadurch teurer wird: Um dasselbe Endziel zu erreichen, sind mehr Arbeitsspeicher, CPU-Leistung usw. erforderlich. Es wird jedoch manchmal im Hobbybereich verwendet, häufig mit einem Basic-Interpreter in Flash und einer (tokenisierten) Basic-Anwendung, die in eeprom gespeichert ist (oder auch in Flash). Überprüfen Sie zum Beispiel die PICAXE und die verschiedenen Basic-Stempel.

IMO in einer solchen Einstellung sollten sowohl der Basic-Interpreter als auch die Basic-Anwendung als Firmware bezeichnet werden.


Ein interessanter Einsatz eines Firmware-Interpreters, der gespeicherten Code interpretiert (was IMO auch als Firmware betrachten sollte), ist das Starten der XBOX 360. Dieser ausgezeichnete Vortrag beschreibt es ausführlich.


Im Folgenden fragt sich MSalters, ob FPGA-Code / Konfigurationsdaten als Firmware betrachtet werden sollen.

In den Aspekten, die am wichtigsten sind (es sind Informationen, die zu einem späteren Zeitpunkt im Produktionsprozess geändert werden können, aber nicht vom Endbenutzer nach Belieben geändert werden sollen), verhalten sich FPGA-Bits wie Firmware. Das wirft die Frage auf, ob es sich um Firmware gemäß einer Definition handelt. Der wichtige Punkt ist, dass es wie Firmware geschrieben, gehandhabt und verwaltet werden kann (und sollte). (Wenn es wie eine Ente geht und quakt, ist es eine Ente?)

Kümmere dich nicht um Definitionen, wenn sie nicht nützlich sind. Ist Microcode Firmware? Ist Repräsentation wichtig? Ist der Kontext wichtig? Sind die ROM-Bits für eine IWM-Firmware?


Vaxquis 'Kommentar zu OPs Frage veranlasste mich, den Wiki-Artikel zu lesen, auf den er verweist. IMO ist die dort angegebene Firmwaredefinition (persistenter Speicher und Programmcode sowie darin gespeicherte Daten) mühsam. IMO sind die in einem Autonavigationssystem gespeicherten Karten Daten, keine Firmware, egal wie sie gespeichert sind (laut Wiki sollten sie Firmware sein). Und die Apps auf Ihrem iPhone oder Android-Handy sind Anwendungen, keine Firmware (laut Wiki sollten sie auch Firmware sein).

Wouter van Ooijen
quelle
Ich frage mich jetzt, ob ein FPGA-Programm als Firmware zählt. Intuitiv ja, aber es funktioniert nicht mit einem Prozessor. Und doch ist es ein klassischer Fall von Bits, die auf halbem Weg zwischen Code und Daten liegen.
MSalters
Der Computer TI 99/4 (1979) enthielt einen ROM-Interpreter für eine Sprache namens GPL und einen in GPL geschriebenen BASIC-Interpreter. Ein wesentliches Merkmal der GPL war, dass sie Code ausführen konnte, der in GROM-Chips gespeichert war (die für den primär sequentiellen Zugriff ausgelegt waren und physisch kleiner und billiger als ein ROM mit wahlfreiem Zugriff sein konnten), sodass der TI 99/4 als Masse angesehen werden kann -Markt-Personalcomputer, dessen Design dem des BASIC-Stempels entspricht.
Supercat
14

Firmware ist ein Programmcode, der im nichtflüchtigen Speicher, z. B. im Flash-Speicher, gespeichert ist. Der Begriff wird am häufigsten im Zusammenhang mit eingebetteten Systemen verwendet. Es kann sich auf demselben Chip wie der Prozessor oder auf einem separaten Gerät befinden.

Leon Heller
quelle
Danke @Leon Heller (+1) - gibt es einen Namen für das 2. Beispiel oben, in dem man im Wesentlichen Eingangsdaten in eine feste Binärdatei auf einem Chip "flasht"? Oder wird das generell nicht praktiziert? Danke noch einmal!
HeineyBehinds
Es sind nur Daten. Es kann flüchtig oder nichtflüchtig gespeichert werden.
Leon Heller
Der Begriff, den ich für Ihre Nummer 2 verwenden würde, wäre eine "Nachschlagetabelle". Ein Beispiel, das ich mir vorstellen kann, wären Sinusfunktionswerte, die für einen numerisch gesteuerten Oszillator verwendet werden.
kjgregory
1
@ KGregory Es kann eine Nachschlagetabelle sein, es kann ein interpretiertes Programm sein, es können Bilddaten sein ...
Glglgl
@glglgl hat zugestimmt. Ich könnte argumentieren, dass dies als eine Art Nachschlagetabelle betrachtet werden kann, aber ich denke, wir sind jetzt nicht weiter auf dem Punkt.
Gemeinde
9

Ich halte beide Optionen für richtig, wenn man sich nur den Mikroprozessor auf verschiedenen Abstraktionsebenen ansieht. Was Sie als unveränderliche Binärdatei bezeichnen, ist die Hardware selbst, die in ihren Möglichkeiten ziemlich begrenzt ist. Befehlsadresse 0x0000 holen, Befehl dekodieren, gelieferte Adresse / Register holen, ausführen, Befehlszähler erhöhen. Das ist die Mikroprozessor-Pipeline, und Sie können sie nicht ändern. Sie steuern, was der Mikrocontroller tut, indem Sie Anweisungen im Speicher ablegen, die dann nacheinander ausgelesen werden. Im Grunde genommen handelt es sich bei Firmware also nur um Eingabedaten für ein unveränderliches Programm mit einem geringen Abstraktionsgrad. Normalerweise ist es jedoch einfacher, sich die Firmware als ein spezielles Programm vorzustellen, das den Mikroprozessor steuert, da dies konzeptionell einfacher ist.

Jason_L_Bens
quelle
Liebe diese Antwort, +1, gut gemacht für die Hervorhebung von Daten und Code sind am Ende das gleiche.
Vality
Zumindest für die Von Neumann-Architektur sind sie gleich. Sobald Sie separate Busse haben, können Sie anfangen zu argumentieren, dass es sich um verschiedene Dinge handelt, auch wenn es am Ende nur um Kleinigkeiten handelt.
Jason_L_Bens
8

Es ist eigentlich beides.

Ein Beispiel für Firmware ist das PC-BIOS. Ein Abschnitt des BIOS ist ausführbar, aber andere Teile des BIOS selbst sind tatsächlich Daten, insbesondere in Tabellen, die angezeigt werden sollen, um verschiedene Funktionen eines BIOS-ROM unabhängig von der Art der zugrunde liegenden Technologie aufzulisten auf. Oftmals werden die Daten in einem anderen Flash-Speicher, einem batterie- oder kondensatorgesicherten RAM, einem CMOS-SRAM oder einer anderen kompatiblen Speicherchip-Technologie gespeichert.

Firmware ist ein Oberbegriff für unveränderlichen / nichtflüchtigen Speicher. Er ist vorhanden und nach dem Aus- und Einschalten zugänglich, solange die Schaltung nicht elektrisch gestört ist oder wenn ein Programmierzyklus ausgeführt wird, für EEPROMs oder Flash ROMs.

Firmware ist per Definition die niedrigste Zugriffsebene, die die in Ihrem System oder in eingebetteten Komponenten installierte Hardware initialisiert, testet und Routinen auf niedriger Ebene (manchmal als BIOS-Funktionsaufrufe bezeichnet) bereitstellt, die Ihr Betriebssystem benötigt, um die Komponenten verwenden zu können in Ihrem System. Früher enthielt das BIOS oder Basic Input Output System auch eine Programmiersprache namens "BASIC", wie den Commodore 64 und andere Personal Computer der 1970er Jahre. Natürlich gab es ältere Computer, in die BASIC für die Verwendung eingebaut war auch von professionellen Informatikern. Wenn Sie jemals von einem Zeichen- oder Symbol-ROM hören, das eine Form von reinen Daten für das Exekutiv- oder Programm-ROM ist, damit das System zu diesem Zeichen-ROM wechselt und Zeichen in einer Sequenz nachschlägt, oder den gesamten Chip in den RAM legt, um damit zu arbeiten Dort.

Die standardmäßigen PROM-, EPROM-, EEPROM- und Flash-Programmierer brennen Firmware auf einen Chip. Das Suffix .hex oder .bin ähnelt ähnlichen Formaten. Dies hängt von Ihrer Anwendung ab, mit der Sie die Firmware an den Chip senden.

Es gibt auch Firmware-Blob-Dateien. Dies sind ausführbare Dateien in Form von Bibliotheken und Routinen, die zur Laufzeit geladen werden. Ein gutes Beispiel dafür sind drahtlose Hardwaretreiber. Sie enthalten genügend Code, um die gesamte Hardware auf diesen Karten über Ihre auszuführen Computersystem. Der einzige Unterschied besteht darin, dass die Karte und die USB-basierte Firmware nicht auf ihnen, sondern auf Ihrer Festplatte gespeichert und in den Speicher geladen werden. Es arbeitet im Wesentlichen als Übersetzungsdienstschicht und -filter. Es sind sowohl Daten als auch Code.

Meine Grundlage hierfür ist, dass ich BIOS-Dateien für andere Computer und eingebettete Systeme schreibe (z. B. WLAN-Firmware, die beim Start Ihres Betriebssystems tatsächlich geladen wird, und dann mit dem Laden der Hardware-Treiber auf niedriger Ebene beginnt, die auch Laufzeit-Firmware enthalten ). Es heißt Firmware, weil es niemals seine Routinen ändert, es sei denn, Sie erhalten ein Update vom Hersteller und das Update überschreibt das alte. Fungiert in diesem Fall als neue Firmware, bis festgestellt wird, dass neue Inhalte aktualisiert werden. Andernfalls verwenden Sie diese Firmware, wenn Ihr Betriebssystem geladen wird.

Ich stimme zu, es sollte nicht als Firmware bezeichnet werden, da es technisch nicht als dauerhafte Lösung auf dem Chip ist und ein spezielles Tool und eine spezielle Anwendung benötigt, um die Firmware zu aktualisieren (im Fall der alten BIOS-Versionen im Vergleich zu Flash-Speichern).

Haben Sie noch Fragen? Gerne beantworte ich diese für Sie.


quelle
6

Firmware ist Code, der in einer Art Entwicklungsumgebung erstellt wurde, genau wie Software-Code, aber dann wird er in Maschinencode umgewandelt, damit die CPU ihn verstehen kann. Wenn Sie den Speicher eines Mikrocontrollers oder eines anderen Chips löschen, werden Sie feststellen, dass er nicht wie C-Code aussieht oder wie wir ihn programmieren.

Sie programmieren also keine .EXE-Datei, da dies ein kompiliertes Programm ist, das in einer Betriebssystemumgebung ausgeführt werden kann. Normalerweise programmieren Sie eine .hex-Datei oder eine .elf-Datei. Dies hängt wirklich von dem Gerät ab, das Sie programmieren. Es spielt jedoch keine Rolle, da Sie sich nicht mit den Dateitypen befassen, da Ihr Compiler stattdessen die Datei kompiliert Code runter in Maschinencode und platziere ihn im Chip-Flash oder in einem beliebigen Speicherschema.

Firmware ist im Allgemeinen insofern unveränderlich, als Umgebungsbedingungen programmiert werden müssen. Sie können den Firmware-Code nicht ändern und lassen ihn, Sie müssen die Änderung vornehmen, ihn kompilieren und das Gerät erneut flashen.

  • Im Allgemeinen ist Software-Code Code, der auf einem Betriebssystem ausgeführt werden soll.
  • Der Firmware-Code ist die Information, die auf dem bloßen Metall des Chips ausgeführt wird. Die Firmware kann entweder das eigentliche Anwendungsprogramm oder ein einfaches Betriebssystem sein, auf das Sie die Software mithilfe eines Wechseldatenträgers oder eines Flash-RAMs in der Embedded-Welt laden können. Diese Ebene kann bis zum Binärcode heruntergehen, da dies immer noch Code ist.
  • Sobald Sie direkt mit Spannung arbeiten, haben Sie die Hardware-Ebene erreicht.
Funkyguy
quelle
2
"aber dann wird es auf Maschinencode heruntergekocht, damit die CPU es verstehen kann." Genau wie auch Software-Code, sofern er in C oder ähnlichem geschrieben ist.
Glglgl
1
Was die Prozessoren verstehen, ist zwar binär, aber sie haben so genannte mnemomische Operationscodes (Op-Codes, wie es in der Branche üblich ist) für diejenigen von uns, die immer noch in Assembler-Sprache programmieren ]).
0

Firmware ist ein Oberbegriff, der im Allgemeinen verwendet wird, um etwas anzugeben, das zwischen der Software- und der Hardware-Welt liegt.

Hardware ist schwer zu ändern. Die Software ist leicht zu ändern. Firmware ist nicht so schwer zu ändern wie Hardware, aber schwieriger zu ändern als Software.

Es kann verwendet werden, um ausführbaren Code, Daten oder Konfigurationsinformationen (wie in FPGA / PLD / usw.) zu diskutieren, die geändert werden können.

Adam Davis
quelle
Im weitesten Sinne des Wortes und der Definition ist das wahr. Diese Chips sind jedoch weder Code noch Daten. Wenn der Compiler fertig ist, erstellt er logische Entwürfe, entweder als vollständige Lösungen oder als Klebelogik, um verschiedene Teile eines Systems zusammenzufügen. Anstelle der Verwendung von logischen Gattern und Registern der Serien 74 und 54, um eine Lösung zu finden. Ich bin wirklich froh, dass du das angesprochen hast, Adam.
0

Um mehr zu erklären, was Firmware von innen ist.

Firmware ist Code, der auf sehr spezifischer Hardware ausgeführt wird. Dies bedeutet, dass die Operationscodes spezifisch für die Hardware sind, für die er geschrieben wurde. Es kann sich um eine Familie von Chips oder Schnittstellen handeln oder nur um einen Gegenstand.

Im Wesentlichen ist dies die Aufgabe der Firmware.

  1. Hat ein bestimmter Prozessor festverdrahtete Anweisungen zum Ausführen und Ausführen, wird dies als "Bootstrap" bezeichnet. Welche der bootfähigsten Computer haben dies in ihrem BIOS.

  2. Initialisieren Sie die Hardware über die Anweisung in der Firmware.

  3. Laden Sie die Sprungtabelle.

  4. Machen Sie den Zugriff auf Register auf einem bestimmten Gerät zugänglich.

  5. Übergeben Sie die Steuerung an die Exit-Routine, sobald das BIOS nach einem Kaltstart (ausgeschalteter Zustand) oder Warmstart (normaler Neustart oder Reset-Pin) verwendet wurde.

  6. Die meisten BIOSes (Firmware) sind für einen bestimmten Chipsatz konzipiert und rollen alle Funktionen dieser aus und konkretisieren alle Daten, die an eine bestimmte Busleitung in einem Computer oder einem eingebetteten Gerät angeschlossen werden könnten.

  7. Festplatten sind ein gutes Beispiel für eine Speicherlösung, die an und für sich ein eingebettetes Gerät ist, auf dem sich auch ein BIOS und eine Form von Firmware auf einem Chip befindet.

Im Wesentlichen besteht jede Firmware aus einer Reihe von Anweisungen, die ein anderer Prozessor ausführt, um die Funktionalität eines Geräts zu verbessern. Es ist eine Software, die auf ein physisches Gerät geladen wird. Wenn die Stromversorgung unterbrochen wird, ist sie verfügbar, sobald das Gerät wieder mit Strom versorgt wird.

Technisch gesehen können Sie jede Programmiersprache oder Skriptsprache verwenden, um Binärdateien zu erstellen. Sie müssen nur wissen, wie der Prozessor, auf den Sie abzielen, funktioniert, wie die tatsächlichen Operationscodes aussehen, wie das interne Register (geschweige denn, wofür sie bestimmt sind), wie man binäre und hexadezimale Zahlensysteme lernt und wie man einen Assembler erstellt, der sich sparen lässt Ihr Code in Assemblersprache. Nachdem dies abgeschlossen ist, können Sie ein anderes Programm damit beauftragen, es in eine Binärdatei zu konvertieren, und es dann als .bin- oder .hex-Datei speichern.

Wenn Sie wissen möchten, wie Ada, C, C ++, D und andere Programmiersprachen ihre "Token", dh ihren nativen Code, der in Pseudo-Op-Codes zerlegt wird, in Maschinensprache umwandeln. Es gibt mehrere Bücher, von denen ich Ihnen empfehle, dass Sie sie lesen. Einige sind recht elementar und konzentrieren sich auf sehr spezifische Prozessoren, aber es ist gut zu lernen. Ich werde Ihnen vorerst ein Buch geben, weil ich Sie oder andere, die dies in Informationen lesen, nicht ertränken möchte.

  1. Erstellen eines Compilers mit "C" von Charles N. Fischer & Richard J. LeBlanc, Jr.
  2. Besuchen Sie diese Website, sie basiert auf dem x86-Chipsatz des IBM-PCs. http://www.laynetworks.com/assembly%20tutorials.htm

Das ist die Einführung in die Assembler-Programmierung am PC. Es geht um die Behandlung von Interrupts (Hardware- und Software-Interrupts) und viele andere Themen. Es wird ausführlicher erläutert, was ein BIOS tatsächlich tut und wie man damit arbeitet.

Im Gegensatz zu Assemblersprache und Maschinensprache können Sie in Ada, C, C ++ und D viel mehr lernen, wenn Sie Ihre Hardwarespezifikationen nicht kennen. Wenn Sie in der Assembler- und Maschinensprache nicht wissen, was Sie tun, passiert entweder etwas Schlimmes oder der Code funktioniert nicht. Ich bevorzuge den letzteren Fall und arbeite nicht gegen etwas Schlechtes.

Hinweis: Über die Antwort oben, über Flash-RAM, gibt es keine solche Sache, es gibt Flash-ROMs, aber keine Flash-RAMs. In Flash-ROMs befindet sich die Firmware, in den RAMs befinden sich batterie- oder kondensatorgesicherte RAMs oder ein anderes Flash-ROM, das Parameter für die von Ihnen festgelegten BIOS-Optionen enthält.

Die Firmware enthält einen Code zum Speichern oder Löschen des Datenspeichers (im Gegensatz zum Programmspeicher / zur Firmware selbst), wenn es sich um ein Flash-ROM oder einen RAM-Chip handelt. Wenn auf einem PC das BIOS-Passwort verfälscht wird oder Sie sich nicht daran erinnern (oder jemand mit Ihnen herumspielt), können Sie das Gehäuse öffnen und die beiden Stifte mit der Bezeichnung "CMOS CLR / CMOS CLEAR / BIOS RESET / BIOS RST" finden. Wenn Sie diese beiden Pins kurzschließen, wird auch der Speicher gelöscht. Danach müssen Sie nur noch die Reset-Taste drücken, wenn die beiden Pins noch kurzgeschlossen sind. Dadurch wird das Kennwort gelöscht und Sie können uneingeschränkt auf Ihr PC-BIOS zugreifen (vorausgesetzt, Sie haben einen neueren Computer ab den 1990er Jahren).

Auf neuen PCs verfügen Sie über einen Flash-Speicher für die Firmware und haben ein batteriegepuffertes SRAM (muss nicht wie DRAM-Chips ständig aktualisiert werden, sondern basiert auf einer älteren Technologie).


quelle
0

In Bezug auf eingebettete Systeme bedeutet Flashing Firmware, dass Sie das ROM eines Mikrocontrollers mit einem Flashing-Gerät gelöscht und mit neuem Code neu geschrieben haben. Diese Firmware, die geflasht werden soll, liegt in HEX-Form vor.

In Bezug auf die Betriebssystem-bezogene Terminologie wird es auch im ROM geflasht, aber dieses Mal ist es die Verantwortung eines Betriebssystems, es zu flashen, wenn ein Update kommt.

Fahad Naeem
quelle
0

Ich glaube, dass die Verwendung der "historischen" Perspektive ein grundlegenderes Verständnis der Firmware vermitteln könnte .
Es beginnt zunächst mit "Hardware". Um eine gegebene Funktion bereitzustellen / zu erstellen, könnte man Röhren, Relais, Transistoren und ICs verwenden. Sie würden eine Reihe dieser Komponenten verwenden und ein Gerät erstellen, das die erforderliche Funktion ausführt. Dies galt als "Hardware", da Sie, wenn Sie die Funktion ändern wollten (oder mussten), Drähte, Buchsen usw. auslöten mussten und dies "schwierig" war . Somit wurde dieses Verfahren zum Implementieren einer Funktion als Verwenden von Hardware bekannt. Die Verwendung von CPU, RAM und Code wurde zu einer weiteren Methode zum Erstellen einer Funktion und wurde als "Software" bekannt."Es bestand jedoch auch die Notwendigkeit (meistens von Herstellern), einen Großteil eines Entwurfs so früh wie möglich fertigzustellen, aber in der Lage zu sein," Last-Minute "-Designänderungen so einfach und kostengünstig wie möglich vorzunehmen Die Verwendung von ROMs ermöglichte diese Flexibilität bis zum Punkt "Erstlieferung". EEPROMs erlauben Änderungen auch nach "Erstlieferung" (im Feld). Der für die ROMs und PROMs benötigte / verwendete Code erhielt den Namen "Firmware" . "

Guill
quelle