Cuando alguien dice que "flasheó" el firmware a un dispositivo, tengo curiosidad sobre lo que esto realmente implica.
- ¿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?
- 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 desomeapp.exe
eso tendrá efecto la próxima vez que se ejecute. Si no es firmware, ¿cómo se llamaría esto?
Respuestas:
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
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).
fuente
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.
fuente
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.
fuente
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
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.
fuente
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.
fuente
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;
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.
Inicialice dicho hardware a través de las instrucciones en el firmware.
Cargue / suba la mesa de salto.
Haga que el acceso a los registros en un dispositivo determinado sea accesible.
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).
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.
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.
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
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.
fuente
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" ".
fuente