¿El código o los datos del firmware?

29

Cuando alguien dice que "flasheó" el firmware a un dispositivo, tengo curiosidad sobre lo que esto realmente implica.

  1. ¿Es el firmware solo un binario nativo que se almacena en la memoria y que puede ser interpretado por la CPU del dispositivo (como cualquier otro EXE en una computadora)? ¿O el firmware es solo información que actúa como entrada a un programa inmutable ya codificado / conectado al dispositivo?
  2. Si el último ejemplo no es firmware, ¿cómo lo llamarías? Por ejemplo, supongamos que un dispositivo tiene algún binario ( someapp.exe) y no puede eliminar o modificar este binario. El binario, cuando se ejecuta, toma la entrada de un chip de memoria. Puede "actualizar" los datos en este chip y, por lo tanto, afectar la entrada / configuración de someapp.exeeso tendrá efecto la próxima vez que se ejecute. Si no es firmware, ¿cómo se llamaría esto?
Heiney Detrás
fuente
12
Esta es una muy buena pregunta. Es un buen descanso de la serie de "Mi tostadora no hace tostadas. ¿Puedo ponerle un arduino?" preguntas
Jason_L_Bens
17
Bueno, esta pregunta sería buena, si no la falla principal: el código es datos y los datos pueden ser código, en lo que respecta a la arquitectura / modelo de Von Neumann. Por lo tanto, toda la pregunta es en vano, ya que el código puede tratarse (y, por lo general, es ) como datos y viceversa; también, a OP: ¿por qué no consultar en.wikipedia.org/wiki/Firmware ? tiene la respuesta a esta misma pregunta, y a muchas otras cosas relacionadas con el firmware, por lo tanto, si bien es un buen descanso de las preguntas "¿Puedo enchufar una bombilla de 12V en una toma de 230V", todavía está por debajo de mi nivel en mi libro ... .
vaxquis
2
Estoy bastante seguro de que la respuesta aquí es "sí".
Connor Wolf
77
El código de máquina es solo entrada de datos al cableado inmutable de la CPU.
user253751
2
¿Es un libro palabras o letras?
Nick T

Respuestas:

27

Como a menudo con tales definiciones, estamos de acuerdo en la mayoría de los casos, pero no existe un límite realmente firme entre lo que es firmware y lo que no lo es. El firmware es

  • almacenado permanentemente (a excepción de alguna persona experta que pueda cambiarlo ...)
  • no está destinado a ser cambiado (excepto ...)
  • funciona en el procesador sin la ayuda de otro software (excepto ... ¿lo entiendes?)

En cuanto a los datos interpretados por un intérprete (firmware): esto no se hace a menudo en un entorno profesional, porque hace que el producto sea más caro: se necesita más memoria, potencia de la CPU, etc. para lograr el mismo objetivo final. Se está sin embargo a veces utilizado en el establecimiento de aficionado, a menudo con un intérprete de Basic en flash, y una (con token) básicos de la aplicación almacenada en la EEPROM (o Flash también). Compruebe, por ejemplo, el PICAXE y los diversos sellos básicos.

En este contexto, tanto el intérprete básico como la aplicación básica deberían llamarse firmware.


Un uso interesante de un intérprete de firmware que interpreta el código almacenado (que también debería considerarse como firmware) es el inicio de XBOX 360. Esta excelente charla lo describe con cierto detalle.


A continuación, MSalters se pregunta si el código FPGA / datos de configuración deben considerarse firmware.

En los aspectos que más importan (es información que puede cambiarse tarde en el proceso de producción, pero no está destinada a ser cambiada a voluntad por el usuario final), los bits FPGA se comportan como firmware. Eso hace que la pregunta sea si es firmware de acuerdo con cualquier definición discutible. El punto importante es que puede (y debe) escribirse, manejarse y administrarse como firmware. (Si camina y grazna como un pato, ¿es un pato?)

No te molestes con las definiciones cuando no sean útiles. ¿Es el microcódigo firmware? ¿Importa la representación? ¿Importa el contexto? ¿Son los bits de ROM para un firmware IWM?


El comentario de Vaxquis a la pregunta de OP me llevó a leer el artículo wiki al que se vincula. OMI, la definición de firmware dada allí (memoria persistente y código de programa y datos almacenados en él) es problemática. En mi opinión, los mapas almacenados en el sistema de navegación de un automóvil son datos, no firmware, sin importar cómo estén almacenados (según la wiki, deberían ser firmware). Y las aplicaciones en su iPhone o teléfono Android son aplicaciones, no firmware (según la wiki, también deberían ser firmware).

Wouter van Ooijen
fuente
Ahora me pregunto si un programa FPGA cuenta como firmware. Intuitivamente, sí, pero no funciona en un procesador. Y, sin embargo, es un caso clásico de bits que están a medio camino entre el código y los datos.
MSalters
La computadora TI 99/4 (1979) incluía un intérprete en ROM para un lenguaje llamado GPL y un intérprete BÁSICO escrito en GPL. Una característica esencial de GPL era que podía ejecutar código almacenado en chips GROM (que fueron diseñados para acceso secuencial principalmente y podrían hacerse físicamente más pequeños y más baratos que la ROM de acceso aleatorio) para que la TI 99/4 pueda verse como una masa -computadora personal de mercado cuyo diseño es análogo al del sello BASIC.
supercat
14

El firmware es un código de programa que se almacena en la memoria no volátil, como la memoria flash. El término se usa con mayor frecuencia en relación con los sistemas integrados. Puede estar en el mismo chip que el procesador o en un dispositivo separado.

Leon Heller
fuente
Gracias @Leon Heller (+1): ¿hay un nombre para el segundo ejemplo anterior, donde uno está esencialmente "flasheando" datos de entrada a un binario fijo en un chip? ¿O generalmente no se practica? ¡Gracias de nuevo!
HeineyBehinds
Son solo datos. Se puede almacenar en memoria volátil o no volátil.
Leon Heller
El término que usaría para su # 2 sería una "tabla de consulta". Un ejemplo en el que puedo pensar serían los valores de función seno utilizados para un oscilador controlado numéricamente.
kjgregory
1
@KGregory Puede ser una tabla de búsqueda, puede ser un programa interpretado, puede ser información de imagen ...
glglgl
@glglgl estuvo de acuerdo. Podría argumentar que esas pueden considerarse formas de tabla de consulta, pero creo que ahora estamos fuera de lugar.
kjgregory
9

Creo que ambas opciones son correctas, solo mirando el microprocesador en diferentes niveles de abstracción. A lo que se refiere como su binario inmutable sería el hardware en sí, que es bastante limitado en lo que puede hacer. Obtener la dirección de instrucción 0x0000, la instrucción de decodificación, buscar la dirección / registro suministrado, ejecutar, incrementar el contador de instrucciones. Esa es la tubería del microprocesador, y no puedes cambiarla. Usted controla lo que hace el microcontrolador almacenando instrucciones en la memoria, que luego se leen secuencialmente. Básicamente, sí, el firmware es solo datos de entrada para un programa inmutable, con un bajo nivel de abstracción. Por lo general, sin embargo, es más fácil imaginar el firmware como un programa especial que controla el microprocesador porque conceptualmente es más fácil de esa manera.

Jason_L_Bens
fuente
Me encanta esta respuesta, +1, bien hecho para enfatizar los datos y el código son lo mismo al final.
Vality
Son los mismos para la arquitectura de Von Neumann, al menos. Una vez que tenga autobuses separados, puede comenzar a argumentar que son cosas diferentes, aunque al final todo es solo un poco.
Jason_L_Bens
8

En realidad es ambos.

Un ejemplo de firmware es el BIOS de la PC, una sección del BIOS es ejecutable pero otras partes del BIOS en sí son en realidad datos, específicamente en tablas para mostrar para enumerar las diferentes funciones de una ROM del BIOS, independientemente del tipo de tecnología en la que se base en. Muchas veces los datos se almacenan en otra memoria flash, batería o RAM respaldada por condensador, CMOS SRAM u otra tecnología de chip de memoria compatible.

Firmware, es un término genérico utilizado para memoria inmutable / no volátil, está ahí y es accesible según el ciclo de alimentación, siempre y cuando no haya nada eléctricamente incorrecto con el circuito o en el caso de un ciclo de programación atascado, para EEPROM o Flash ROMs.

El firmware, por definición, es el nivel de acceso más bajo, que inicializa, prueba el hardware que ha instalado en su sistema o componentes integrados y proporciona rutinas de bajo nivel (a veces llamadas llamadas de función del BIOS) que su sistema operativo necesita para poder usar los componentes. en tu sistema En los viejos tiempos, el BIOS o el sistema básico de entrada y salida también incluía un lenguaje de programación llamado "BASIC", como el Commodore 64 y otras computadoras personales de la década de 1970, por supuesto, había computadoras más antiguas que tenían BASIC incorporado para su uso. por profesionales informáticos también. Si alguna vez oye hablar de una ROM de caracteres o símbolos, esa es una forma de datos puros para que la ROM ejecutiva o de programa haga que el sistema vaya a esa ROM de caracteres y busque caracteres en una secuencia o descargue todo el chip en la RAM para trabajar con él. allí.

Los programadores predeterminados PROM, EPROM, EEPROM, Flash graban firmware en un chip como con el sufijo de .hex o .bin, que son formatos similares, depende de la aplicación que esté utilizando para enviar al chip, el firmware.

Además, hay archivos de blob de firmware, estos son ejecutables en forma de bibliotecas y rutinas que se cargan en tiempo de ejecución, un buen ejemplo de eso son los controladores de hardware inalámbrico, contienen suficiente código para ejecutar todo el hardware en esas tarjetas a través de su sistema informático. La única diferencia es que la tarjeta y el firmware basado en USB no se almacenan realmente en ellos, sino en su disco duro y se cargan en la memoria. Funciona como una capa de servicio de traducción y filtro, esencialmente. Es tanto datos como código también.

Mi base de esto es que en realidad escribo BIOS para otras computadoras y sistemas integrados (por ejemplo, firmware inalámbrico, que en realidad se carga cuando se inicia el sistema operativo, luego comienza a cargar los controladores de hardware de bajo nivel, que también incluyen firmware en tiempo de ejecución ) Se llama firmware porque nunca cambia sus rutinas a menos que obtenga una actualización del fabricante y luego la actualización sobrescriba la anterior. Actúa como el nuevo firmware en este caso hasta que se encuentren nuevas actualizaciones, de lo contrario, ese es el firmware que utiliza cuando se carga su sistema operativo.

Estoy de acuerdo, no debería llamarse firmware porque técnicamente no está en el chip como una solución permanente y necesita una herramienta y aplicación especial para actualizar el firmware (en el caso de las BIOS antiguas frente a las memorias flash).

Tengo más preguntas, me complacería responderlas.


fuente
6

El firmware es un código que se ha creado en algún tipo de entorno de desarrollo, al igual que el código de software, pero luego se reduce a código de máquina para que la CPU pueda entenderlo. Si vuelca la memoria de un microcontrolador o algún otro chip, notará que no se parece en nada al código C o en qué lo programamos.

Por lo tanto, no debe programar un .EXE, ya que es un programa compilado para ejecutarse en algún tipo de entorno de sistema operativo. Programará generalmente un .hex, o tal vez un .elf, realmente depende del dispositivo que esté programando, pero no importa porque no le preocupan los tipos de archivos, ya que su compilador compilará el codifique en el código de máquina y colóquelo en el chip en el chip flash o en cualquier esquema de almacenamiento que tenga.

El firmware generalmente es inmutable ya que las condiciones ambientales deben programarse. No puede cambiar el código del firmware y dejarlo, debe realizar el cambio, compilarlo y volver a flashear el dispositivo.

  • En general, el código de software es un código que debe ejecutarse sobre un sistema operativo.
  • El código de firmware es la información que se ejecuta en el metal desnudo del chip. El firmware puede ser el programa de aplicación real o puede ser un sistema operativo simple, en el que luego puede cargar el software a través de almacenamiento extraíble o RAM intermitente en el mundo integrado. Este nivel puede descender hasta el código binario, porque todavía es código.
  • Una vez que comience a trabajar directamente con el voltaje, habrá alcanzado el nivel de hardware.
Funkyguy
fuente
2
"pero luego se reduce a código de máquina para que la CPU pueda entenderlo". Al igual que el código de software también, siempre que esté escrito en C o algo similar.
glglgl
1
Lo que los procesadores entienden es, sí, binario, pero tienen algo llamado códigos de operación mnemómicos (códigos de operación, como se ve en la industria) para aquellos de nosotros que todavía programamos en lenguaje ensamblador, que está un paso por encima del lenguaje de máquina [Binario ]).
0

Firmware es un término genérico que generalmente se usa para especificar algo que vive a medio camino entre el mundo del software y el mundo del hardware.

El hardware es difícil de cambiar. El software es fácil de cambiar. El firmware no es tan difícil de cambiar como el hardware, pero es más difícil de cambiar que el software.

Se podría usar para discutir el código ejecutable, los datos o la información de configuración (como en FPGA / PLD / etc.) que se pueden cambiar.

Adam Davis
fuente
En un sentido amplio de la palabra y definición eso es cierto. Aunque, esos chips no son en realidad código ni datos. El compilador cuando se completa crea diseños lógicos, como soluciones completas o lógica de pegamento para unir diferentes partes de un sistema. En lugar de usar puertas lógicas y registros físicos de las series 74 y 54 para hacer una solución. De hecho, me alegra que hayas mencionado esto, Adam.
0

Explicar más de qué firmware es desde el sentido interno.

Firmware, es un código que se ejecuta en un hardware muy específico, lo que significa que sus códigos operativos son específicos del hardware para el que está escrito, puede ser una familia de chips o interfaces o solo para un elemento.

Esencialmente, lo que hace el firmware es esto;

  1. Tiene instrucciones cableadas para que un procesador determinado las realice y ejecute, esto se denomina "bootstrap". Que las computadoras más arrancables tienen esto en su BIOS.

  2. Inicialice dicho hardware a través de las instrucciones en el firmware.

  3. Cargue / suba la mesa de salto.

  4. Haga que el acceso a los registros en un dispositivo determinado sea accesible.

  5. Pase el control a la rutina de salida una vez que el BIOS se haya utilizado después de un arranque en frío (estado apagado) o en caliente (se ha utilizado el pin de reinicio o reinicio normal).

  6. La mayoría de los BIOS (firmware) están diseñados para un conjunto de chips específico en mente y eliminan todas las funciones de esos y completan cualquier dato de que algo podría estar conectado a una línea de bus determinada en una computadora o dispositivo integrado.

  7. Los discos duros son un buen ejemplo de una solución de almacenamiento que, en sí misma, es un dispositivo integrado, que también tiene un BIOS y una forma de firmware en un chip.

Esencialmente, todo el firmware es un montón de instrucciones que otro procesador hace para obtener la funcionalidad de dicho dispositivo. Es un software que se carga en un dispositivo físico, al perder energía, estará allí cuando el dispositivo recupere la energía.

Técnicamente, puede usar cualquier lenguaje de programación o scripting para crear archivos binarios. Solo tiene que saber cómo funciona el procesador al que va a apuntar, los códigos operativos reales, el registro interno (y mucho menos para qué sirven), para aprender sistemas de números binarios y hexadecimales y cómo crear un ensamblador que pueda guardar Su código en lenguaje ensamblador. Una vez que se haya completado, puede asignar otro programa para convertirlo en binario y luego guardarlo como un archivo .bin o .hex.

Si desea saber cómo Ada, C, C ++, D y otros lenguajes de programación convierten sus "tokens", que es su código nativo que se divide en pseudocódigos operativos en lenguaje máquina. Hay varios libros que le recomiendo que lea, algunos son bastante elementales y se centran en procesadores muy específicos, pero es bueno aprender sobre ellos. Por el momento, le daré un libro, porque no quiero ahogarlo a usted ni a nadie más que lea esto como información.

  1. Elaboración de un compilador con 'C' por Charles N. Fischer y Richard J. LeBlanc, Jr.
  2. Visite este sitio, se basa en el chipset x86 que se encuentra en la PC de IBM; http://www.laynetworks.com/assembly%20tutorials.htm

Esa es la introducción a la programación en lenguaje ensamblador en PC desde el principio. Habla sobre el manejo de interrupciones (interrupciones de hardware y software) y muchos otros temas, explica más en profundidad qué hace realmente un BIOS y cómo trabajar con él.

A diferencia del lenguaje ensamblador y el lenguaje de máquina, puede obtener mucho más en Ada, C, C ++, D, si no conoce los detalles de su hardware. En lenguaje ensamblador y de máquina, si no sabe lo que está haciendo, sucederá algo malo o el código no funcionará. Prefiero el último caso, no funciona frente a algo malo.

Nota: Acerca de la respuesta anterior, acerca de la memoria RAM flash, no existe tal cosa, hay ROM flash pero no RAM flash. Las ROM flash tienen el firmware, las RAM que están respaldadas por batería o condensador, o tienen otra ROM flash que contiene parámetros para las opciones de BIOS que ha configurado.

Hay un código en el firmware sobre cómo almacenar o borrar la memoria de datos (en comparación con la memoria del programa / firmware en sí), si se trata de una ROM flash o un chip RAM. En las PC, si la contraseña de su BIOS se ve mal o no la recuerda (o alguien está jugando con usted), puede abrir la caja y encontrar los dos pines llamados "CMOS CLR / CMOS CLEAR / BIOS RESET / BIOS RST", el cortocircuito de esos dos pines juntos también borra la memoria, todo lo que debe hacer después de eso es presionar el botón de reinicio, cuando los dos pines aún están en corto. Eso borra la contraseña y le permite acceso completo al BIOS de su PC (suponiendo que tenga una computadora más nueva a partir de la década de 1990).

En las PC nuevas, tiene memoria flash para el firmware y SRAM con respaldo de batería (no necesita actualizarse constantemente como los chips DRAM, se basa en una tecnología más antigua).


fuente
0

En términos de sistemas integrados, el firmware intermitente significa que ha borrado la ROM de un microcontrolador utilizando un dispositivo intermitente y lo ha reescrito con un nuevo código. Este firmware que se actualizará está en formato HEX.

En términos de terminología relacionada con el sistema operativo, también se actualiza en la ROM, pero esta vez es responsabilidad de un sistema operativo actualizarlo cuando llega una actualización.

Fahad Naeem
fuente
0

Creo que usar la perspectiva "histórica" podría dar una comprensión más básica de lo que es el firmware .
Primero comienza con "hardware". Para proporcionar / crear una función dada, uno podría usar tubos, relés, transistores y circuitos integrados. Usaría varios de estos componentes y crearía un dispositivo que realizara la función requerida. Esto se consideraba "hardware" porque si deseaba (o necesitaba) cambiar la función, necesitaría soldar cables, enchufes, etc. y esto era "difícil" de hacer. Por lo tanto, este método de implementación de una función se conoce como el uso de hardware. El uso de una CPU, RAM y código se convirtió en otro método para crear una función, y se hizo conocido como "software"hacer cambios en el diseño ". Sin embargo, también era necesario (principalmente de los fabricantes) completar un diseño lo antes posible, pero ser capaz de hacer cambios de diseño de" último minuto "de la manera más fácil y rentable posible El uso de ROM permitió esta flexibilidad hasta el punto de "primer envío". EEPROMS permite cambios incluso después de "primer envío" (en el campo). El código necesario / utilizado para las ROM y PROM recibió el nombre de "firmware" ".

Guill
fuente