Paquetes de firmware: ¿qué hacen realmente?

8

En mi CentOS, yum updateaparece el siguiente:

(6/38): iwl1000-firmware-39.31.5.1-62.el7_39.31.5.1-62.2.el7_5.noarch.drpm                                                                                                                                            
(7/38): iwl105-firmware-18.168.6.1-62.el7_18.168.6.1-62.2.el7_5.noarch.drpm                                                                             
(8/38): iwl135-firmware-18.168.6.1-62.el7_18.168.6.1-62.2.el7_5.noarch.drpm                                                                             
(9/38): iwl2000-firmware-18.168.6.1-62.el7_18.168.6.1-62.2.el7_5.noarch.drpm                                                                            
(10/38): iwl2030-firmware-18.168.6.1-62.el7_18.168.6.1-62.2.el7_5.noarch.drpm                                                                           
(11/38): iwl3160-firmware-22.0.7.0-62.el7_22.0.7.0-62.2.el7_5.noarch.drpm                                                                                                                                             

etc.

Estos son los llamados "paquetes de firmware". Por ejemplo, busquemos algunos de ellos que están instalados:

rpm --query --all | grep firmware

y luego consulta su información:

rpm --query --info iwl105-firmware-18.168.6.1-62.2.el7_5.noarch

y obtenemos:

Summary     : Firmware for Intel(R) Centrino Wireless-N 105 Series Adapters
Description :
This package contains the firmware required by the iwlagn driver
for Linux to support the iwl105 hardware.  Usage of the firmware
is subject to the terms and conditions contained inside the provided
LICENSE file. Please read it carefully.

Bueno está bien.

Ni siquiera tengo ese tipo de hardware, ya que esta es una VM.

Entonces, pregunta:

¿Qué hacen realmente los paquetes de firmware?

¿Son instalaciones de "una sola vez" que ejecutan un ejecutable opaco (inmediatamente? En el próximo arranque?) Que verifica si existe el hardware, bombea código binario en el flash del hardware si el hardware está allí (tal vez mientras pregunta al usuario; en Windows en por lo menos, el flasheo del hardware siempre está lleno de ventanas de DOS que aparecen, EULA a los que se debe hacer clic y barras de progreso que se deben soportar), y luego marca el paquete como "instalado".

¿Modifican los initramfs para que un módulo del núcleo cargue un blob binario o algo sucede en el próximo arranque?

David Tonhofer
fuente
Buena pregunta que hace un gran seguimiento de unix.stackexchange.com/questions/359989/… y unix.stackexchange.com/questions/90727/…
Anthony Geoghegan
En ¿Qué es "firmware" en la terminología de Linux? , Stephen Kitt escribe: Entonces, el núcleo no utiliza los archivos de firmware, sino que los carga el núcleo en otras piezas de hardware. Esto también es lo que hace que sea vagamente aceptable tener software sin código fuente en los sistemas FLOSS: el argumento dice que no se está ejecutando en la CPU principal sino en otro dispositivo. Risita, risita.
David Tonhofer

Respuestas:

4

Por lo general, el firmware que se puede cargar no son instalaciones de "una sola vez" que están escritas para flashear en el dispositivo. El firmware se carga en un almacenamiento volátil en el dispositivo y debe hacerse cada vez que se enciende la computadora host. El dispositivo no funciona antes de cargar el firmware. El firmware se puede escribir en la RAM del dispositivo, en cuyo caso contiene código y datos para el procesador del dispositivo, pero también puede ser un flujo de bits que define la lógica de una matriz lógica programable en campo (FPGA), o alguna combinación de ambos.

Por otro lado, el firmware en la memoria flash generalmente está preprogramado en los dispositivos, y solo necesita reescribirse si hay una actualización del firmware del fabricante. Esto normalmente se realiza a través de otros mecanismos, como un ejecutable separado que ejecuta el usuario.

Hay algunas razones por las cuales los fabricantes quieren usar RAM en lugar de memoria flash. En primer lugar, permite diseñar una única versión del hardware, pero al mismo tiempo ofrecer varias versiones del producto (por ejemplo, para diferentes áreas del mercado). Si se espera que el producto se actualice con frecuencia en el campo, puede ser más fácil manejar las actualizaciones de firmware de esta manera que pasar por la dificultad de crear un programa para actualizar la memoria flash en el dispositivo. Este programa debe tener una interfaz de usuario agradable y estar diseñado para ser lo más fácil de usar posible, ya que normalmente está destinado a ser ejecutado por el usuario final del producto. Algunos dispositivos con almacenamiento flash a menudo ejecutan código de RAM de todos modos, y simplemente copian el contenido del flash a RAM cuando se inicia el dispositivo,

Johan Myréen
fuente
Si el firmware no se carga en la RAM desde la memoria flash, ¿cómo se carga el firmware en la RAM después de que se enciende el dispositivo?
Codebling
Si el dispositivo no puede cargar el firmware de forma autónoma, el host puede almacenarlo en la RAM del dispositivo, utilizando el bus con el que el dispositivo está conectado al host. Los buses típicos son PCI y USB. Es responsabilidad del controlador del dispositivo hacer eso. El dispositivo no puede estar totalmente "muerto" después del encendido, debe contener lógica para facilitar la carga del firmware.
Johan Myréen
Olvidé que estábamos hablando de periféricos aquí, por lo que siempre estará conectado a un autobús. ¡Tiene sentido!
Codebling
5

Como menciona Anthony Geoghegan , ¿Qué es el "firmware" en la terminología de Linux? y ¿Por qué algunos controladores aún requieren firmware? Proporcionar antecedentes útiles.

Los paquetes de firmware son paquetes que contienen archivos de firmware, es decir , archivos que contienen código destinado a ejecutarse en dispositivos conectados o conectados a su sistema; los ejemplos comunes incluyen chipsets wifi, como en su caso. No son instaladores únicos y no les importa si el hardware está disponible. Los archivos que ponen a disposición son utilizados por los controladores del kernel correspondientes, si el hardware relevante está presente: los controladores cargan el firmware en la memoria conectada al hardware de destino, que luego ejecuta el firmware para operar.

Estos paquetes de firmware no están relacionados con los instaladores de firmware en los que está pensando, que cargan las actualizaciones de firmware en la memoria flash (que solo debe hacerse cuando se requiere una actualización). Ese proceso es de hecho largo, a menudo complejo y aparentemente lleno de peligros (al menos, si basa sus impresiones en las advertencias del fabricante). Los paquetes de firmware incluidos en las distribuciones de Linux contienen el firmware que se necesita cada vez que se inicia el sistema, ya que se carga en la memoria volátil.

Stephen Kitt
fuente
2

Agregando a las ya excelentes respuestas.

Los archivos de firmware, también conocidos como blobs binarios patentados, se cargan en su firmware al menos en el momento de las (re) botas en frío del dispositivo.

El dispositivo fue diseñado para obtener firmware en RAM en lugar de tener una ROM + RAM para reducir los costos de producción. Como ejemplo, tiene algunos chipsets wifi Broadcom y chipsets de conmutador interno que funcionan de esa manera.

Abordar el otro punto de su pregunta sobre el uso de archivos de firmware en una VM.

Como se trata de una VM, no necesita archivos de firmware. No se cargarán en ningún lado; mucho menos archivos de "firmware" de ethernet o wifi.

Del mismo modo, teniendo en cuenta que el firmware no es necesario en un entorno VM, es una gran idiosincrasia tener en Debian las dependencias de un paquete de archivos de firmware genérico en el kernel de Linux.

Rui F Ribeiro
fuente
“Es una gran idiosincrasia tener en Debian las dependencias de un paquete de archivos de firmware genérico en el kernel de Linux” - al menos el firmware recomendado por el paquete del kernel realmente no tiene DFSG ;-). (Pero tiene razón, ambas recomendaciones - firmware-linux-freey irqbalance- son inútiles en la mayoría de las implementaciones hoy en día.)
Stephen Kitt
Siempre ejecuto un libro de jugadas para desinstalar ese ruft después de una ronda de actualizaciones del kernel
Rui F Ribeiro
1
También puede configurar aptpara que no instale recomendaciones por defecto ...
Stephen Kitt