Wie erfolgt die Programmausführung in der Firmware?

9

Ich habe von Leuten gehört, die in der Firmware-Domäne arbeiten, dass es kein Betriebssystem gibt, das die Firmware steuert (z. B. Firmware in einem USB-Laufwerk). In einer while-Schleife läuft nur ein einziger Thread, der auf einen externen Befehl wartet. Dies ist der Startpunkt für einen Interrupt, gefolgt von einem ISR und der Steuerung, die bis zur Hardware fließt. Aber was ist im Grunde der Teil der Hardware, der den Firmware-Code ausführt? Gibt es eine CPU oder einen ASIC-basierten Code, der ausgelöst wird, solange das Gerät mit Strom versorgt wird? Ich verstehe den Paradigmenwechsel von einem normalen CPU-Betriebssystem zu einer Firmware nicht.

Abhijit K Rao
quelle
Wenn möglich, kann jemand ein Beispiel für eine Firmware nehmen, das die CPU-Marke und andere Hardware- und Softwaredetails angibt. Beispiele könnten Firmware in SD-Karten, USB, HDD-Controllern usw. sein
Abhijit K Rao

Antworten:

13

Es gibt keinen Paradigmenwechsel; In beiden Fällen führt eine CPU die Software / Firmware aus.

Firmware und Software sind dasselbe; Der einzige Unterschied besteht darin, wie es gespeichert ist. Software wird normalerweise auf einem Massenspeichergerät (z. B. einem Festplattenlaufwerk) gespeichert und vor der Ausführung in einen flüchtigen Speicher (z. B. DRAM) geladen. Es ist einfach, die Software zu ändern, indem Sie einfach die Datei, die sie enthält, durch eine andere ersetzen.

Die Firmware wird normalerweise in einem nichtflüchtigen Speicher (z. B. FLASH) gespeichert, der mehr oder weniger direkt mit der CPU verbunden ist. Es ist schwieriger zu ändern (daher die "Firma") und es kann zur Ausführung in einen anderen Speicher übertragen werden oder nicht.

Der Betrieb eines Computers mit einem "Betriebssystem" unterscheidet sich grundsätzlich nicht von Ihrer Beschreibung der Firmware. Denken Sie daran, dass das Betriebssystem selbst nur eine weitere Software ist - oder eher eine riesige Sammlung voneinander abhängiger Software. Auf der untersten Ebene sitzt die CPU immer noch in einer Schleife und wartet darauf, was zu tun ist. Es ist nur so, dass diese Schleife im Betriebssystem vergraben ist.

Dave Tweed
quelle
9

Sogar eine "normale" CPU mit einem Betriebssystem muss Firmware ausführen ... dies wird normalerweise als BIOS in einem generischen PC bezeichnet. Die Firmware für jede CPU ist nur die Software, die beim Einschalten immer verfügbar ist, unabhängig davon, ob die CPU an Peripheriegeräte (Festplatten, USB usw.) angeschlossen ist oder nicht. Wenn Sie ein vollwertiges Betriebssystem haben, ermittelt die Firmware nur, auf welchem ​​Gerät (Festplatte, USB-Laufwerk usw.) der Code für das Betriebssystem gespeichert ist, kopiert den Code in den Arbeitsspeicher und führt ihn aus. Für kleine eingebettete Geräte ist kein vollständiges Betriebssystem erforderlich, da Sie nicht verschiedene Anwendungen laden oder eine Vielzahl von Geräten anschließen müssen. Daher verwenden die kleinen CPUs nur ein sehr einfaches Betriebssystem oder möglicherweise einen "Taskplaner". Verschiedene Aufgaben können darin bestehen, Sensorwerte zu erfassen, auf das Drücken von Tasten zu warten und eine Anzeige zu aktualisieren. Für sehr einfache Anwendungen hat die CPU genügend Zeit, um alle Aufgaben zu erledigen, sodass sie nur nacheinander ausgeführt werden. Dies wird auch als "Round-Robin" -Ansatz bezeichnet. Anspruchsvollere Planer berücksichtigen die Priorität der Aufgaben.

Der grundlegende Punkt ist, dass jede CPU über Code verfügen muss, der immer verfügbar ist, um ausgeführt zu werden, wenn die Stromversorgung eingeschaltet wird. Dieser Code wird normalerweise in einem relativ kleinen "Nur-Lese" -Speicher oder ROM gespeichert, obwohl moderne CPUs die Firmware in ein Flash-ROM einfügen, das "meistens gelesen" ist. Der auf diese Weise gespeicherte Code ist die "Firmware" für die CPU.

Joe Hass
quelle
6

Ihre Frage scheint einige Missverständnisse zu enthalten.

Firmware ist nur Software in fester Form, die sich früher in einem einfachen (einmal beschreibbaren oder sogar maskenprogrammierten) ROM befand, jetzt meistens in einem Flash-ROM (wiederbeschreibbar). Auf einigen Systemen ist diese Firmware die einzige vorhandene Software, auf anderen (wie einem normalen PC) besteht ihre Hauptfunktion darin, die andere Software zu laden.

Eine Anwendung kann unter der Kontrolle eines Betriebssystems oder ohne Betriebssystem ausgeführt werden. Die letztere Situation wird oft als "Bare Metal" bezeichnet: Die Anwendung läuft mit nichts dazwischen und der Hardware "Metal". Die Funktionen, die sich in der vom Betriebssystem ausgeführten Situation mit Betriebssystem befinden, z. B. die Handhabung von Dateisystemen und Bestimmungen für Multithreading, können weiterhin in einem Bare-Metal-System vorhanden sein, jedoch in Form von Bibliotheken, die mit der Anwendung verknüpft sind .

Software kann viele verschiedene Architekturen haben. Eine sehr einfache Form ist die Schleife "Eingabe abrufen, Verarbeitung durchführen, Ausgabe schreiben". Kompliziertere Formulare können Abfragen, Interrupts oder Multithreading umfassen. Sowohl betriebssystemabhängige als auch Bare-Metal-Anwendungen können alle diese Architekturen verwenden.

Diese drei Probleme sind unabhängig voneinander: Beispielsweise kann die Firmware Bare-Metal ausführen und eine Multithread-Architektur verwenden. Oder die Firmware ist ein Betriebssystem, das eine Anwendung von einer Diskette (sorry, Flash-Karte ..) lädt, die die einfache Get-Do-Write-Loop-Architektur verwendet.

Wouter van Ooijen
quelle
5

Betriebssystem und CPU sind unterschiedliche Konzepte. Ja, es gibt eine CPU, die das Schlüsselelement der Hardware im Herzen der Maschine darstellt. Es ruft die Firmware-Anweisungen aus dem Firmware-Speicher ab und führt sie aus. (Heutzutage ist es übrigens üblich, dass selbst kleine Systeme mehrere CPUs für die parallele Ausführung haben. Daher ist es etwas veraltet, ausschließlich über die CPU zu sprechen .)

Firmware ist Software, die im nichtflüchtigen (oder vielleicht sogar schreibgeschützten) Speicher gespeichert ist. Da es sich in einem solchen Speicher befindet, ist beim Einschalten des Geräts Firmware verfügbar. Der Computer kann fast sofort mit der Ausführung der Firmware beginnen, wenn er eingeschaltet ist, oder ein kleines Startprogramm (selbst Firmware) kann die größere Firmware aus einem elektronischen Speicher wie Flash ziehen und in den Arbeitsspeicher stellen und dann ausführen. Die moderne Verwendung von Flash-Speicher ist heutzutage der Grund, warum Sie manchmal den Satz "Flashen der neuen Firmware" hören, der sich auf ein Upgrade-Verfahren bezieht. Die Firmware muss nicht einfach so zu aktualisieren sein. Es kann sich um einen Chip für integrierte Schaltkreise handeln, sodass beim Aktualisieren eines Geräts auf eine neue Firmware möglicherweise ein integrierter Schaltkreis ("EPROM-Chip") aus einem Sockel entfernt und ein neuer angeschlossen werden muss. PC BIOS ' Früher wurden s auf diese Weise aktualisiert und unzählige andere Geräte. Hier kommt das Wort wirklich her. Einige Leute fühlten sich unwohl, wenn sie ein Programm "Software" nannten, wenn sie einen Chip oder eine Leiterplatte austauschen mussten, um sie zu ersetzen, was eher wie ein Hardware-Update aussieht. Daher wurde "Firmware" geprägt: etwas "Schwierigeres" als Software.

Firmware kann ein "vollwertiges" Betriebssystem sein. Zum Beispiel ist Tomato eine Linux-basierte Firmware für WLAN-Router:

http://www.polarcloud.com/tomato

Wir können uns über ssh bei Tomato anmelden und eine Linux-Eingabeaufforderung erhalten. Es handelt sich also um ein fortschrittliches Betriebssystem und um eine Firmware. Wenn sich auf dem Router jedoch eine Festplatte befand und beim Start dasselbe Betriebssystem von dieser Festplatte geladen werden musste, konnte dies nicht mehr als Firmware bezeichnet werden. Die Firmware muss sich in einem elektronischen Speicher befinden, auf den der Prozessor beim Einschalten sofort zugreifen kann, z. B. Flash-Speicher oder EPROM-Chips.

Viele Consumer-Geräte verfügen heutzutage über eine aktualisierbare Firmware. Wenn Sie beispielsweise eine Digitalkamera haben, sollten Sie deren Website finden und prüfen, ob keine neuere Firmware-Version verfügbar ist, wodurch einige Probleme behoben werden, die möglicherweise in der werkseitig installierten Firmware vorhanden sind. Es ist heutzutage einfach, die Firmware zu aktualisieren, selbst für relativ nicht technische Endbenutzer. Die oben genannte Tomate ist ein Beispiel für eine Open-Source-Firmware von Drittanbietern, die die werkseitige Firmware ersetzt.

Das Wort "Betriebssystem" bezieht sich einfach auf ein Steuerungsprogramm, das ein gewisses Maß an Raffinesse und Vollständigkeit bei der Verwaltung der Ressourcen der Maschine und der Bereitstellung von Diensten auf angemessenem Niveau für Programme aufweist: Funktionen wie Dateisysteme, Netzwerkprotokolle, Speicher- und Prozessverwaltung, High-Level-Zugriff auf Geräte und möglicherweise ein Modell eines Benutzers sowie Sicherheit. Nicht alle müssen in einem Betriebssystem vorhanden sein. Normalerweise sind Speicher, Prozessmanagement und E / A der Schlüssel. Wenn das Steuerungsprogramm die Ausführung anderer Programme zulässt und diesen Programmen eine Identität verleiht, über die sie ihren eigenen Ressourcen zugeordnet sind, und wenn es ihnen Dienste zur Verwaltung des Prozessors und des Speichers sowie zur Ausführung von E / A bereitstellt, können wir diese Steuerung aufrufen ein Betriebssystem programmieren.

Da Sie neugierig sind, mögen Sie vielleicht einige Lehrbücher über Computerarchitekturen, wie die von William Stallings oder von Hennesy und Patterson.

Kaz
quelle
4

Auf der grundlegendsten Ebene ist eine CPU nur eine Zustandsmaschine, die eine Folge von Anweisungen durchläuft, die ihren eigenen internen Zustand ändern und / oder eine Ausgabe erzeugen. Wenn Sie dieses Konzept auf ein sehr hohes Niveau abstrahieren und verfeinern, erhalten Sie die neuesten Desktop- und mobilen Prozessorangebote von Intel. Das zugrunde liegende Prinzip ist jedoch recht einfach: Sie können einen sehr einfachen Prozessor mit etwa einem Dutzend integrierten TTL-Schaltkreisen bauen, und Mikroprozessoren von Anfang bis Mitte der 1970er Jahre, die für die Verwendung in Desktop-Taschenrechnern und Ampelsteuerungen entwickelt wurden, waren nicht besonders kompliziert . Offensichtlich hat Moores Gesetz dies auf eine ganz andere Ebene gebracht, und moderne Hochleistungsprozessoren haben wenig Ähnlichkeit mit ihren Vorfahren vor 35 Jahren.

Trotzdem gibt es immer noch einen riesigen Markt für Prozessoren (üblicherweise als Mikrocontroller bezeichnet), die wesentlich weniger komplex sind als die neuesten. Dies sind beispielsweise die Prozessortypen, die Sie möglicherweise auf Ihrem USB-Laufwerk finden. Um Ihre Frage zu beantworten: Es ist möglich, dass einige Funktionen der von Ihnen genannten Geräte von einem ASIC ausgeführt werden. Wenn Ihre Kollegen jedoch über Threads und Interrupts sprechen, weist dies im Allgemeinen darauf hin, dass eine CPU mit einer gewissen Zeit erforderlich ist, wahrscheinlich auf einem Mikrocontroller . Dies sind in der Tat vollwertige Computer in dem Sinne, dass sie eine ALU, Register, einen Programmzähler, einen Stapel usw. haben, aber sie sind sehr stromsparend und sehr kostengünstig und haben möglicherweise nur ein paar Dutzend Anweisungen anstelle der Hunderte der x86-Architektur.

Es ist nicht erforderlich, dass diese Geräte über ein Betriebssystem jeglicher Art oder ein Konzept der Kontextumschaltung verfügen (obwohl dies in einigen Fällen möglich ist). Für ihre Anwendung ist es lediglich erforderlich, die Anweisungen in ihrem Programm nacheinander durchzugehen das andere, und wie Sie sagen, kann es in der Tat ein sehr einfaches Programm sein.

Bitrex
quelle
1

Abgesehen von einigen Berechtigungen weiß eine CPU nicht, ob sie Code von einem Betriebssystem oder einem anderen Programm ausführt. Für eine CPU werden nur Anweisungen ausgeführt, die aus dem Speicher abgerufen werden.

Vergessen wir nicht, was ein Betriebssystem ist: ein Programm, das sich immer im Speicher befindet und für die sichere Bearbeitung und Planung mehrerer Aufgaben verantwortlich ist. Die Terminologie, mit der wir eine unabhängige Aufgabe beschreiben, ist ein "Prozess". Mit Betriebssystemen können Prozesse Ressourcen (Hardware, Speicher usw.) sicher gemeinsam nutzen, ihre Ausführung planen und priorisieren. Außerdem werden Funktionen wie die Kommunikation zwischen Prozessen bereitgestellt. All dies ergibt sich aus der Notwendigkeit, mehrere gleichzeitige Aufgaben zu unterstützen. Abgesehen von einigen Berechtigungsstufen führt die CPU nur Anweisungen aus oder kein Betriebssystem - sie kennt den Unterschied nicht.

Wenn wir Firmware für einen Mikrocontroller schreiben, haben wir dieses zusätzliche Programm (das Betriebssystem) normalerweise nicht immer im Speicher, um Aufgaben für uns zu verwalten. Warum? Da wir nicht mehrere gleichzeitige Aufgaben benötigen, sind eingebettete Systeme normalerweise so konzipiert und programmiert, dass sie nur eine Anwendung gut ausführen. Vergleichen Sie dies mit einem PC, von dem erwartet wird, dass er sehr flexibel ist und alle Arten von Anwendungen gleichzeitig ausführen kann.

Es besteht kein Problem mehr damit, dass ein Prozess den Speicherplatz eines anderen Prozesses belegt und belegt oder dass ein Prozess die gesamte CPU-Zeit beansprucht. Dies liegt daran, dass wir ein einzelnes Programm schreiben, das jederzeit Zugriff auf alle Ressourcen hat, da es das einzige Programm ist, das auf dem System ausgeführt wird, und wir daher kein anderes Programm wie ein Betriebssystem benötigen, um es zu verwalten. Wiederum führt die CPU nur Anweisungen aus, die aus dem Speicher abgerufen werden. Sie kann den Unterschied nicht erkennen, ob es sich um ein Betriebssystem oder kein Betriebssystem handelt.

Jon L.
quelle