Il codice o i dati del firmware?


29

Quando qualcuno dice di aver "scaricato" il firmware su un dispositivo, sono curioso di sapere cosa questo effettivamente implichi.

  1. Il firmware è solo un file binario nativo che è archiviato in memoria e che può essere interpretato dalla CPU del dispositivo (come qualsiasi altro EXE su un computer)? O il firmware è solo un dato che funge da input per un programma immutabile già codificato / cablato sul dispositivo?
  2. Se quest'ultimo esempio non fosse il firmware, come lo chiameresti? Ad esempio, supponiamo che un dispositivo abbia del binario ( someapp.exe) e che non sia possibile rimuovere o modificare questo binario. Il binario, quando eseguito, accetta l'input da un chip di memoria. È possibile "eseguire il flashing" dei dati su questo chip, e quindi influire sull'input / configurazione someapp.exeche avrà effetto al successivo avvio. Se non il firmware, come si chiamerebbe?

12
Questa è davvero una buona domanda. È una bella pausa dalla serie di "Il mio tostapane non tosta. Posso metterci un arduino?" domande.
Jason_L_Bens,

17
Bene, questa domanda sarebbe buona, se non il principale difetto: il codice è dato, e i dati possono essere codice - per quanto riguarda l'architettura / modello di Von Neumann. Pertanto, l'intera domanda è vana, poiché il codice può essere (e, di solito, è ) trattato come dati e viceversa; inoltre, per OP: perché non controllare en.wikipedia.org/wiki/Firmware ? ha la risposta a questa stessa domanda, e a molte altre cose riguardanti il ​​firmware - quindi, sebbene sia una bella pausa dalle domande "Posso collegare una lampadina da 12 V in una presa da 230 V", è ancora al di sotto del mio libro. .
vaxquis

2
Sono abbastanza sicuro che la risposta qui sia "sì".
Connor Wolf,

7
Il codice macchina è solo l'input di dati al cablaggio immutabile della CPU.
user253751

2
Le parole o le lettere di un libro?
Nick T,

Risposte:


27

Come spesso accade con tali definizioni, nella maggior parte dei casi siamo d'accordo, ma non esiste un confine veramente solido tra ciò che è il firmware e ciò che non lo è. Il firmware è

  • memorizzato in modo permanente (ad eccezione di qualche persona esperta che può cambiarlo ...)
  • non destinato a essere modificato (tranne ...)
  • funziona sul processore senza l'aiuto di altri software (tranne ... lo capisci?)

Per quanto riguarda i dati interpretati da un interprete (firmware): ciò non avviene spesso in un ambiente professionale, perché rende il prodotto più costoso: è necessaria più memoria, potenza della CPU, ecc. Per raggiungere lo stesso obiettivo finale. Si è però a volte utilizzato in ambiente hobbisti, spesso con un interprete Basic in flash, e un (token) applicazione di base contenuto nella EEPROM (o in Flash troppo). Controllare ad esempio il PICAXE e i vari timbri Basic.

IMO in tale impostazione sia l'interprete di base che l'applicazione di base dovrebbero essere chiamati firmware.


Un uso interessante di un interprete del firmware che interpreta il codice memorizzato (che dovrebbe essere considerato anche il firmware IMO) è l'avvio di XBOX 360. Questo eccellente discorso lo descrive in dettaglio.


Sotto MSalters si chiede se i dati di codice / configurazione FPGA debbano essere considerati firmware.

Negli aspetti che contano di più (sono le informazioni che possono essere modificate in ritardo nel processo di produzione, ma non sono pensate per essere modificate a piacimento dall'utente finale) i bit FPGA si comportano come firmware. Ciò pone la questione se si tratti di firmware in base a qualsiasi definizione controversa. Il punto importante è che può (e dovrebbe) essere scritto, gestito e gestito come un firmware. (Se cammina e cigola come un'anatra, è un'anatra?)

Non preoccuparti delle definizioni quando non sono utili. Il microcodice è firmware? La rappresentazione è importante? Il contesto è importante? I bit ROM sono per un firmware IWM?


Il commento di Vaxquis alla domanda di OP mi ha spinto a leggere l'articolo wiki a cui si collega. La definizione di firmware fornita dall'IMO (memoria persistente, codice del programma e dati in esso memorizzati) è problematica. IMO le mappe memorizzate in un sistema di navigazione per auto sono dati, non firmware, indipendentemente da come sono memorizzate (secondo il wiki dovrebbero essere firmware). E le app nel tuo iPhone o telefono Android sono applicazioni, non firmware (secondo il wiki anche loro dovrebbero essere firmware).


Ora mi chiedo se un programma FPGA conta come firmware. Intuitivamente sì, ma non funziona su un processore. Eppure è un classico caso di bit che si trovano a metà strada tra codice e dati.
MSalters,

Il computer TI 99/4 (1979) includeva un interprete in ROM per una lingua chiamata GPL e un interprete BASIC scritto in GPL. Una caratteristica essenziale di GPL era che poteva eseguire il codice memorizzato nei chip GROM (che erano progettati per l'accesso principalmente sequenziale e potevano essere fisicamente più piccoli ed economici rispetto alla ROM ad accesso casuale) in modo che la TI 99/4 potesse essere vista come una massa -mercato di computer il cui design è analogo a quello del timbro BASIC.
supercat

14

Il firmware è un codice di programma archiviato in una memoria non volatile, come la memoria flash. Il termine viene spesso utilizzato in relazione a sistemi integrati. Può trovarsi sullo stesso chip del processore o su un dispositivo separato.


Grazie @Leon Heller (+1) - esiste un nome per il secondo esempio sopra, in cui si sta essenzialmente "lampeggiando" i dati di input in un binario fisso su un chip? O questo non è generalmente praticato? Grazie ancora!
HeineyBehinds

Sono solo dati. Può essere archiviato in memoria volatile o non volatile.
Leon Heller,

Il termine che userei per il tuo numero 2 sarebbe una "tabella di consultazione". Un esempio che mi viene in mente potrebbe essere i valori di funzione sinusoidale utilizzati per un oscillatore a controllo numerico.
kjgregory,

1
@KGregory Può essere una tabella di ricerca, può essere un programma interpretato, può essere un dato immagine ...
glglgl

@glglgl concordato. Potrei obiettare che quelle possono essere considerate forme di una tabella di consultazione, ma penso che ora non siamo al punto.
kjgregory,

9

Penso che entrambe le opzioni siano in qualche modo corrette, solo guardando il microprocessore a diversi livelli di astrazione. Quello a cui ti riferisci come il tuo binario immutabile sarebbe l'hardware stesso, che è abbastanza limitato in ciò che può fare. Recupera indirizzo istruzione 0x0000, decodifica istruzione, recupera indirizzo / registro fornito, esegui, incrementa contatore istruzioni. Questa è la pipeline del microprocessore e non puoi cambiarla. Puoi controllare cosa fa il microcontrollore memorizzando le istruzioni in memoria, che vengono poi lette in sequenza. Quindi, in sostanza, sì, il firmware è solo l'input di dati per un programma immutabile, a un basso livello di astrazione. Di solito, tuttavia, è più facile immaginare il firmware come un programma speciale che controlla il microprocessore perché concettualmente è più facile in questo modo.


Adoro questa risposta, +1, ben fatto per enfatizzare dati e codice sono la stessa cosa alla fine.
Valità,

Sono almeno uguali per l'architettura di Von Neumann. Una volta che hai bus separati, puoi iniziare a sostenere che sono cose diverse, anche se alla fine è tutto solo qualcosa.
Jason_L_Bens,

8

In realtà è entrambi.

Un esempio di firmware è il BIOS del PC, una sezione del BIOS è eseguibile ma altre parti del BIOS stesso sono in realtà dati, in particolare nelle tabelle per la visualizzazione per enumerare le diverse funzioni di una ROM BIOS, indipendentemente dal tipo di tecnologia su cui si basa su. Spesso i dati sono archiviati in un'altra memoria flash, batteria o RAM supportata da condensatore o CMOS SRAM o un'altra tecnologia di chip di memoria compatibile.

Firmware, è un termine generico usato per memoria immutabile / non volatile, è lì e accessibile secondo il ciclo di alimentazione fintanto che non c'è nulla di elettricamente errato nel circuito o nel caso di un ciclo di programmazione bloccato, per EEPROM o Flash ROM.

Il firmware per definizione è il livello di accesso più basso, che inizializza, testa l'hardware che hai installato nel tuo sistema o componenti integrati e fornisce routine di basso livello (a volte viste come chiamate di funzione BIOS) di cui il tuo sistema operativo ha bisogno per poter usare i componenti nel tuo sistema. Ai vecchi tempi, il BIOS o Basic Input Output System includeva anche un linguaggio di programmazione chiamato "BASIC", come il Commodore 64 e altri personal computer degli anni '70, ovviamente c'erano computer più vecchi che avevano BASIC incorporato per l'uso anche da informatici professionisti. Se hai mai sentito parlare di una ROM di caratteri o simboli che è una forma di dati puri per la ROM esecutiva o programmata per far sì che il sistema vada a quella ROM di caratteri e cerchi i caratteri in una sequenza o scarica l'intero chip nella RAM per lavorare con esso Là.

I programmatori PROM, EPROM, EEPROM e Flash predefiniti masterizzano il firmware su un chip come con il suffisso di .hex o .bin, che sono formati simili, dipende dalla tua applicazione che stai utilizzando per inviare al chip, il firmware.

Inoltre, ci sono file BLOB del firmware, questi sono file eseguibili sotto forma di librerie e routine che vengono caricati in fase di esecuzione, un buon esempio di ciò sono i driver hardware wireless, contengono abbastanza codice per eseguire tutto l'hardware in quelle schede tramite il tuo sistema informatico. L'unica differenza è che il firmware basato su scheda e USB non è effettivamente memorizzato su di essi ma sul disco rigido e caricato in memoria. Funziona essenzialmente come livello e filtro del servizio di traduzione. Sono sia dati che codice.

La mia base è che in realtà scrivo BIOS per altri computer e sistemi embedded (ad esempio, il firmware wireless, che viene effettivamente caricato all'avvio del sistema operativo, quindi inizia a caricare i driver hardware di basso livello, che includono anche il firmware di runtime ). Si chiama firmware perché non cambia mai le sue routine se non si ottiene un aggiornamento dal produttore e quindi l'aggiornamento sovrascrive il vecchio. Funziona come il nuovo firmware in questo caso fino a quando non viene trovato nuovo materiale aggiornato, in caso contrario, questo è il firmware che usi quando viene caricato il sistema operativo.

Sono d'accordo, non dovrebbe essere chiamato firmware perché non è tecnicamente sul chip come soluzioni permanenti e necessita di uno strumento e un'applicazione speciali per aggiornare il firmware (nel caso dei vecchi BIOS rispetto a quello delle memorie flash).

Ho altre domande, sarei felice di risponderle per te.


6

Il firmware è un codice che è stato creato in una sorta di ambiente di sviluppo, proprio come il codice del software, ma poi viene ridotto a codice macchina in modo che la CPU possa capirlo. Se scarichi la memoria di un microcontrollore o di qualche altro chip, noterai che non assomiglia affatto al codice C o a ciò in cui lo programmiamo.

Quindi non programmate un .EXE su di esso, poiché si tratta di un programma compilato da eseguire in una sorta di ambiente del sistema operativo. Generalmente programmerai un .hex, o forse un .elf, dipende davvero dal dispositivo che stai programmando, ma non importa perché non ti preoccupi dei tipi di file poiché il compilatore compilerà invece il codice in codice macchina e posizionalo nella memoria flash su chip o in qualsiasi schema di archiviazione abbia.

Il firmware è generalmente immutabile in cui devono essere programmati i condizionali ambientali. Non è possibile modificare il codice del firmware e lasciarlo, è necessario apportare la modifica, compilarlo e ripetere il flashing del dispositivo.

  • Generalmente il codice software è il codice che deve essere eseguito su un sistema operativo.
  • Il codice del firmware è l'informazione che viene eseguita sul metallo nudo del chip. Il firmware può essere il vero programma applicativo o può essere un semplice sistema operativo, su cui è possibile caricare il software tramite memoria rimovibile o RAM flash nel mondo incorporato. Questo livello può scendere fino al codice binario, perché è ancora codice.
  • Una volta che inizi a lavorare direttamente con la tensione, hai raggiunto il livello hardware.

2
"ma poi si riduce a codice macchina in modo che la CPU possa capirlo." Proprio come il codice del software, purché sia ​​scritto in C o qualcosa del genere.
glglgl

1
Quello che i processori capiscono è sì, binario ma hanno qualcosa chiamato codici operativi mnemomici (codici op, come si vede nel settore) per quelli di noi che ancora programmano in Assembly Language, che sembra essere un passo sopra Machine Language [Binary ]).

0

Firmware è un termine generico che generalmente viene utilizzato per specificare qualcosa che vive a metà strada tra il mondo del software e il mondo dell'hardware.

L'hardware è difficile da cambiare. Il software è facile da cambiare. Il firmware non è difficile da modificare come l'hardware, ma è più difficile da modificare rispetto al software.

Potrebbe essere utilizzato per discutere di codice eseguibile, dati o informazioni di configurazione (come in FPGA / PLD / ecc.) Che possono essere modificati.


In senso lato la parola e la definizione sono vere. Tuttavia, quei chip non sono in realtà codice né dati. Il compilatore quando completo crea progetti logici, come soluzioni complete o logica di colla per mettere insieme parti diverse di un sistema. Invece di utilizzare porte logiche e registri fisici serie 74 e 54 per creare una soluzione. Sono davvero contento che tu l'abbia sollevato, Adam.

0

Per spiegare di più di cosa sia il firmware dal senso interno.

Firmware, è un codice che viene eseguito su hardware molto specifico, il che significa che i codici op sono specifici dell'hardware per cui è scritto, può essere una famiglia di chip o interfacce o intesa per un solo elemento.

In sostanza ciò che fa il firmware è questo;

  1. Ha istruzioni cablate per un determinato processore da intraprendere ed eseguire, questo si chiama "bootstrap". Che i computer più avviabili hanno questo nel loro BIOS.

  2. Inizializza detto hardware tramite le istruzioni nel firmware.

  3. Carica / salta la tabella di salto.

  4. Rendi accessibile l'accesso ai registri su un determinato dispositivo.

  5. Consegnare il controllo alla routine esistente una volta che il BIOS è stato utilizzato dopo uno stato freddo (stato spento) o un avvio a caldo (è stato utilizzato il riavvio normale o il pin di ripristino).

  6. La maggior parte dei BIOS (firmware) sono progettati per un chipset specifico in mente e sradicano tutte le funzioni di questi e perfezionano tutti i dati che qualcosa potrebbe essere collegato a una determinata linea bus in un computer o dispositivo incorporato.

  7. I dischi rigidi sono un buon esempio di una soluzione di archiviazione che di per sé è un dispositivo incorporato, che ha anche un BIOS e un firmware su un chip.

Fondamentalmente, tutto il firmware è, è un mucchio di istruzioni che un altro processore fa per ottenere funzionalità da un tale dispositivo. È un software che viene caricato in un dispositivo fisico, dopo aver perso energia, sarà lì quando il dispositivo riprenderà energia.

Tecnicamente, puoi usare qualsiasi linguaggio di programmazione o di scripting per creare file binari. Devi solo sapere come funziona il processore di cui ti occuperai, i codici operativi effettivi, il registro interno (figuriamoci a cosa servono), per imparare i sistemi di numeri binari ed esadecimali e come creare un assemblatore che può salvare il tuo codice in linguaggio assembly. Al termine, è possibile assegnare un altro programma per convertirlo in binario, quindi salvarlo come file .bin o .hex.

Se vuoi sapere come Ada, C, C ++, D e altri linguaggi di programmazione convertono i loro "token", che è il loro codice nativo che viene suddiviso in pseudo codici operativi in ​​linguaggio macchina. Ci sono molti libri che ti consiglio di leggere, alcuni sono piuttosto elementari e sono incentrati su processori molto specifici, ma è bene imparare. Ti darò un libro per il momento, perché non voglio annegare te o chiunque altro leggendo questo in informazioni.

  1. Creazione di un compilatore con 'C' di Charles N. Fischer e Richard J. LeBlanc, Jr.
  2. Visitate questo sito, è basato sul chipset x86 presente nel PC IBM; http://www.laynetworks.com/assembly%20tutorials.htm

Questa è l'introduzione alla programmazione del linguaggio assembly su PC all'inizio. Parla della gestione degli interrupt (interrupt hardware e software) e di molti altri argomenti, spiega in modo più approfondito cosa fa realmente un BIOS e come lavorarci.

A differenza del linguaggio assembly e del linguaggio macchina, è possibile ottenere molto di più in Ada, C, C ++, D, se non si conoscono le specifiche hardware. Nel linguaggio assembly e machine, se non sai cosa stai facendo, accadrà qualcosa di brutto o il codice non funzionerà. Preferisco quest'ultimo caso, non funziona rispetto a qualcosa di brutto.

Nota: sulla risposta sopra, sulla RAM flash, non esiste una cosa del genere, ci sono ROM flash ma non RAM flash. Le ROM flash hanno il firmware, le RAM supportate da batteria o condensatore o hanno un'altra ROM flash che contiene parametri per le opzioni del BIOS che hai impostato.

Nel firmware è presente un codice su come archiviare o cancellare la memoria dei dati (rispetto alla memoria del programma / firmware stesso), se si tratta di una ROM flash o di un chip RAM. Su PC se la password del BIOS viene confusa o se non la ricordi (o se qualcuno ti confonde), puoi aprire la custodia e trovare i due pin chiamati "CMOS CLR / CMOS CLEAR / BIOS RESET / BIOS RST", cortocircuitare i due pin insieme cancella anche la memoria, tutto ciò che dovresti fare è premere il pulsante di reset, quando i due pin sono ancora in corto. Ciò cancella la password e ti consente l'accesso completo al BIOS del tuo PC (supponendo che tu abbia un computer più recente dagli anni '90 in poi).

Sui nuovi PC, hai una memoria flash per il firmware e hai SRAM con batteria (non deve essere costantemente aggiornato come i chip DRAM, è basato su una tecnologia più vecchia).


0

In termini di sistemi integrati, il firmware lampeggiante significa che hai cancellato la ROM di un microcontrollore utilizzando un dispositivo lampeggiante e l'hai riscritta con un nuovo codice. Questo firmware da lampeggiare è in formato HEX.

In termini di terminologia relativa al sistema operativo, viene anche eseguito il flashing nella ROM, ma questa volta è responsabilità di un sistema operativo eseguire il flashing quando arriva un aggiornamento.


0

Ritengo che l'utilizzo della prospettiva "storica" potrebbe fornire una comprensione più basilare di cosa sia il firmware .
Innanzitutto inizia con "hardware". Per fornire / creare una data funzione, si potrebbero usare tubi, relè, transistor e circuiti integrati. Utilizzeresti un numero di questi componenti e creeresti un dispositivo che eseguiva la funzione richiesta. Questo è stato considerato "hard-ware" perché se si desidera (o è necessario) modificare la funzione, è necessario dissaldare fili, prese, ecc. E questo è "difficile" da fare. Pertanto, questo metodo di implementazione di una funzione è diventato noto come l'utilizzo dell'hardware. Utilizzando una CPU, una RAM e un codice, divenne un altro metodo per creare una funzione e divenne noto come "software"per apportare modifiche al progetto. "Tuttavia, c'era anche la necessità (principalmente dai produttori) di completare il più presto possibile un progetto, ma di essere in grado di apportare modifiche all'ultimo minuto nel modo più semplice ed economico possibile L'uso delle ROM ha consentito questa flessibilità fino al punto di "prima nave". Le EEPROM consentono modifiche anche dopo la "prima nave" (sul campo). Il codice necessario / utilizzato per le ROM e le PROM era chiamato "firmware" ".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.