¿Es el código o los datos del firmware?

29

Cuando alguien dice que "flashearon" el firmware de un dispositivo, siento curiosidad por lo que 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 es el firmware solo datos que actúan como entrada a un programa inmutable que ya están codificados / conectados al dispositivo?
  2. Si el último ejemplo no es firmware, ¿cómo lo llamaría? Por ejemplo, digamos 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 "flashear" datos a este chip y, por lo tanto, afectar la entrada / configuración de someapp.exe que tendrá efecto la próxima vez que se ejecute. Si no fuera firmware, ¿cómo se llamaría?
pregunta HeineyBehinds

9 respuestas

27

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

  • almacenado de forma permanente (excepto por una persona con conocimientos que puede cambiarlo ...)
  • no pretende ser cambiado (excepto ...)
  • funciona con el procesador sin la ayuda de otro software (excepto ... ¿lo obtienes?)

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 . es , sin embargo, a veces se usa en entornos de aficionados, a menudo con un intérprete básico en flash y una aplicación básica (con token) almacenada en eeprom (o también en flash). Compruebe, por ejemplo, el PICAXE y los diversos sellos básicos.

En la configuración de IMO, tanto el intérprete básico como la aplicación básica deben llamarse firmware.

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

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

En los aspectos que más importan (es información que se puede cambiar al final del proceso de producción, pero que el usuario final no pretende cambiar a voluntad) los bits de FPGA se comportan como firmware. Eso plantea la cuestión de si es el firmware de acuerdo con cualquier definición discutible. El punto importante es que puede (y debe) escribirse, manejarse y administrarse como un firmware. (Si camina y grieta como un pato, ¿es un pato?)

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

El comentario de Vaxquis a la pregunta de OP me impulsó a leer el artículo wiki al que se vincula. En mi opinión, la definición de firmware dada allí (la memoria persistente y el código del programa y los datos almacenados en ella) 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 (de acuerdo con 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).

    
respondido por el Wouter van Ooijen
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 más frecuencia en conexión con sistemas integrados. Puede estar en el mismo chip que el procesador, o en un dispositivo separado.

    
respondido por el Leon Heller
9

Creo que ambas opciones son correctas, solo mirando el microprocesador en diferentes niveles de abstracción. A lo que te refieres como tu binario inmutable sería el propio hardware, que está bastante limitado en lo que puede hacer. Obtenga la dirección de la instrucción 0x0000, descodifique la instrucción, obtenga la dirección / registro suministrado, ejecute, incremente el contador de instrucciones. Esa es la tubería del microprocesador, y usted no puede cambiarlo. Usted controla lo que hace el microcontrolador al almacenar las instrucciones en la memoria, que luego se leen secuencialmente. Entonces, básicamente, sí, el firmware es solo datos de entrada para un programa inmutable, en un nivel bajo de abstracción. Sin embargo, generalmente, 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.

    
respondido por el Jason_L_Bens
8

En realidad son 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 datos, específicamente en tablas para mostrar y enumerar diferentes funciones de una ROM del BIOS, independientemente del tipo de tecnología. está basado en. Muchas veces los datos se almacenan en otra memoria flash, batería o RAM respaldada por capacitor, ya sea CMOS SRAM u otra tecnología de chip de memoria compatible.

Firmware, es un término genérico usado para memoria no cambiante / no volátil, está ahí y es accesible según el ciclo de alimentación, siempre que no haya ningún problema eléctrico con el circuito o en el caso de un ciclo de programación bloqueado, por EEPROMs o Flash ROMs.

El firmware por definición, es el nivel de acceso más bajo, que se inicializa, prueba el hardware que ha instalado en su sistema o componentes integrados y proporciona rutinas de bajo nivel (a veces vistas como llamadas de función del BIOS) que su sistema operativo necesita para poder Usa los componentes en tu sistema. En los viejos tiempos, el BIOS o el sistema de entrada de entrada básico también incluían un lenguaje de programación llamado "BÁSICO", 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 BÁSICAS incorporadas para su uso. por informáticos profesionales también. Si alguna vez escuchó de una ROM de caracteres o símbolos que es una forma de datos puros para que la ROM ejecutiva o del 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 ella allí.

Los programadores PROM, EPROM, EEPROM, Flash predeterminados queman 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 firmware de blob, estos son ejecutables en forma de bibliotecas y rutinas que se cargan en tiempo de ejecución, un buen ejemplo de esto son los controladores de hardware inalámbricos, contienen suficiente código para ejecutar todo el hardware en esos 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 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.

Mi base de esto es que realmente escribo BIOS para otras computadoras y sistemas integrados (por ejemplo, firmware inalámbrico, que en realidad se carga cuando se inicia su sistema operativo, luego comienza a cargar los controladores de hardware de bajo nivel, que también incluyen ejecutar firmware en tiempo real). 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 encuentre que se actualizan nuevas cosas, de lo contrario, ese es el firmware que utiliza cuando se carga su sistema operativo.

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

Tengo más preguntas, estaré encantado de responderlas por ti.

    
respondido por el user49380
6

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

Por lo tanto, no programa un .EXE, ya que es un programa compilado para ejecutarse en algún tipo de entorno de sistema operativo. Normalmente, estarás programando un .hex, o tal vez un .elf, realmente depende del dispositivo que estés programando, pero no importa porque no te interesan los tipos de archivos, ya que tu compilador compilará el codifíquelo en el código de la máquina y colóquelo en el chip del chip o en cualquier esquema de almacenamiento que tenga.

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

  • Generalmente, 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 hardware del chip. El firmware puede ser el programa de aplicación real o puede ser un sistema operativo simple, en el que puede cargar el software a través de un almacenamiento extraíble o una memoria RAM intermitente en el mundo integrado. Este nivel puede bajar hasta el código binario, porque sigue siendo código.
  • Una vez que comienza a trabajar directamente con voltaje, ha alcanzado el nivel de hardware.
respondido por el Funkyguy
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 analizar el código ejecutable, los datos o la información de configuración (como en FPGA / PLD / etc) que se puede cambiar.

    
respondido por el Adam Davis
0

Para explicar más sobre 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 los códigos de operación son específicos del hardware para el que está escrito, puede ser una familia de chips o interfaces o para un solo elemento.

Esencialmente, lo que hace el firmware es esto;

  1. Tiene instrucciones cableadas para que un procesador determinado realice y ejecute, esto se denomina "bootstrap". ¿Qué equipos de arranque tienen esto en su BIOS?

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

  3. Cargar / subir la tabla de saltos.

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

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

  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 información que se pueda adjuntar 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 tiene una forma de firmware en un chip.

Esencialmente, todo el firmware es un conjunto de instrucciones que otro procesador realiza 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, puedes usar cualquier lenguaje de programación o scripting para crear archivos binarios. Solo tiene que saber cómo funciona el procesador al que se dirigirá, los códigos de operación 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 haya finalizado, 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 pseudo-op-codes en lenguaje de máquina. Hay varios libros que te recomiendo leer, algunos son bastante elementales y se centran en procesadores muy específicos, pero es bueno aprender sobre ellos. Te daré un libro por el momento, porque no quiero ahogarte ni a nadie más que lea esto en información.

  1. Crafting A Compiler con 'C' de Charles N. Fischer & Richard J. LeBlanc, Jr.
  2. Visite este sitio, se basa en el conjunto de chips x86 que se encuentra en la PC de IBM; enlace

Esta es la introducción a la programación en lenguaje ensamblador en PC desde el principio. Habla sobre cómo manejar las interrupciones (interrupciones de hardware y software) y muchos otros temas, explica más a fondo lo que realmente hace 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 las especificaciones de su hardware. En ensamblador y lenguaje de máquina, si no sabe lo que está haciendo, o algo malo sucederá o el código no funcionará. Prefiero el último caso, no trabajar contra 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 establecido.

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 de RAM. En las PC, si su contraseña de BIOS se confunde o no la recuerda (o alguien está jugando con usted), puede abrir el estuche y encontrar los dos pines llamados "CMOS CLR / CMOS CLEAR / BIOS RESET / BIOS RST", Cortocircuitar los dos pines 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 cortocircuito. Esto 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 tiene SRAM respaldada por batería (no necesita actualizarse constantemente como los chips DRAM, se basa en una tecnología más antigua).

    
respondido por el user49380
0

En términos de sistemas integrados, el firmware de parpadeo significa que ha borrado la ROM de un microcontrolador utilizando un dispositivo de parpadeo y lo ha reescrito con un nuevo código. Este firmware a ser flasheado está en forma de HEX.

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

    
respondido por el Fahad Naeem
0

Creo que el uso de la perspectiva "histórica" puede dar una comprensión más básica de lo que es firmware .
Primero comienza con "hardware". Para proporcionar / crear una función determinada, se podrían usar tubos, relés, transistores, & ICs. Utilizaría varios de estos componentes y crearía un dispositivo que realice la función requerida. Esto se consideró "hardware" porque si quería (o necesitaba) cambiar la función, tendría que desoldar cables, enchufes, etc. y esto fue "difícil" . Por lo tanto, este método de implementación de una función se hizo conocido 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 conoció como "software" porque era muy "fácil" para realizar cambios de diseño ". Sin embargo, hubo También es una necesidad (en su mayoría de fabricantes), completar un diseño lo más temprano posible, pero ser capaz de realizar cambios de diseño "de último minuto" lo más fácil y rentable posible. El uso de ROM permite 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 se le dio el nombre de "firmware . "

    
respondido por el Guill

Lea otras preguntas en las etiquetas