Packages de firmware: que font-ils réellement?

8

Sur mon CentOS, un yum updatefait apparaître les éléments suivants:

(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.

Ce sont des «progiciels de micrologiciel». Par exemple, trouvons-en quelques-uns qui sont installés:

rpm --query --all | grep firmware

puis interrogez ses informations:

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

et nous obtenons:

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.

OK bien.

Je n'ai même pas ce genre de matériel, car c'est une machine virtuelle.

Alors, question:

Que font réellement les progiciels?

S'agit-il d'installations "à un coup" qui exécutent un exécutable opaque (immédiatement? Au prochain démarrage?) Qui vérifie si le matériel existe, pompe du code binaire dans le flash du matériel si le matériel est là (peut-être en demandant à l'utilisateur; sur Windows à au moins, le flashage du matériel est toujours chargé de fenêtres DOS qui apparaissent, de CLUF à cliquer et de barres de progression à endurer), puis marque le package comme "installé".

Modifient-ils les initramfs pour qu'un blob binaire soit chargé par un module du noyau ou que quelque chose se passe au prochain démarrage?

David Tonhofer
la source
Bonne question qui fait un excellent suivi de unix.stackexchange.com/questions/359989/… et unix.stackexchange.com/questions/90727/…
Anthony Geoghegan
Dans Qu'est-ce que le «firmware» dans la terminologie Linux? , Stephen Kitt écrit: Les fichiers de firmware ne sont donc pas utilisés par le noyau, ils sont chargés par le noyau sur d'autres éléments matériels. C'est aussi ce qui rend vaguement acceptable d'avoir un logiciel sans code source dans les systèmes FLOSS: l'argument veut qu'il ne fonctionne pas sur le processeur principal mais sur un autre appareil. Snicker, snicker.
David Tonhofer

Réponses:

4

Les micrologiciels chargeables ne sont généralement pas des installations "à un coup" qui sont écrites sur la mémoire flash de l'appareil. Le micrologiciel est chargé dans un stockage volatile sur l'appareil et doit être fait à chaque fois que l'ordinateur hôte est allumé. L'appareil ne fonctionne pas avant le chargement du firmware. Le micrologiciel peut être écrit dans la RAM de l'appareil, auquel cas il contient du code et des données pour le processeur de l'appareil, mais il peut également s'agir d'un flux binaire définissant la logique d'une matrice logique programmable sur le terrain (FPGA), ou de certains combinaison des deux.

D'un autre côté, le micrologiciel dans la mémoire flash est généralement préprogrammé sur les appareils et ne doit être réécrit qu'en cas de mise à jour du micrologiciel par le fabricant. Cela se fait généralement via d'autres mécanismes, comme un exécutable distinct exécuté par l'utilisateur.

Il existe plusieurs raisons pour lesquelles les fabricants souhaitent utiliser la RAM au lieu de la mémoire flash. Tout d'abord, il permet de concevoir une seule version du matériel, mais en même temps de livrer plusieurs versions du produit (pour différents marchés par exemple). Si le produit doit être fréquemment mis à niveau sur le terrain, il peut être plus facile de gérer les mises à niveau du micrologiciel de cette façon que de passer par la difficulté de créer un programme de mise à niveau de la mémoire flash sur l'appareil. Ce programme doit avoir une interface utilisateur agréable et être conçu pour être aussi convivial que possible, car il est généralement destiné à être exécuté par l'utilisateur final du produit. Certains appareils avec stockage flash exécutent souvent du code à partir de la RAM de toute façon, et ils copient simplement le contenu du flash sur la RAM lorsque l'appareil est démarré,

Johan Myréen
la source
Si le firmware n'est pas chargé dans la RAM à partir du flash, comment le firmware est-il chargé dans la RAM après la mise sous tension de l'appareil?
Codebling
Si l'appareil ne peut pas charger le micrologiciel de manière autonome, l'hôte peut le stocker dans la RAM de l'appareil, en utilisant le bus avec lequel l'appareil est connecté à l'hôte. Les bus typiques sont PCI et USB. C'est la responsabilité du pilote de périphérique de le faire. L'appareil ne peut pas être totalement "mort" après la mise sous tension, il doit contenir une logique pour faciliter le chargement du firmware.
Johan Myréen
J'ai en quelque sorte oublié que nous parlions de périphériques ici, donc il sera toujours attaché à un bus. Logique!
Codebling
5

Comme Anthony Geoghegan le mentionne , qu'est-ce que le "firmware" dans la terminologie Linux? et Pourquoi certains pilotes nécessitent-ils toujours un micrologiciel? fournir un contexte utile.

Les packages de micrologiciel sont des packages qui contiennent des fichiers de firmware, c'est- à- dire des fichiers qui contiennent du code destiné à être exécuté sur des appareils dans ou connectés à votre système - des exemples courants incluent les chipsets wifi, comme dans votre cas. Ce ne sont pas des installateurs uniques et ils se moquent de savoir si le matériel est disponible. Les fichiers qu'ils mettent à disposition sont utilisés par les pilotes du noyau correspondants, si le matériel concerné est présent: les pilotes chargent le firmware dans la mémoire attachée au matériel cible, qui exécute ensuite le firmware pour fonctionner.

Ces packages de micrologiciel ne sont pas liés aux installateurs de micrologiciel auxquels vous pensez, qui chargent les mises à jour du micrologiciel dans la mémoire flash (ce qui ne doit être fait que lorsqu'une mise à jour est requise). Ce processus est en effet long, souvent complexe et apparemment lourd de dangers (du moins si vous basez vos impressions sur les avertissements du fabricant). Les packages de micrologiciel inclus dans les distributions Linux contiennent le micrologiciel qui est nécessaire à chaque démarrage du système, car il est chargé dans la mémoire volatile.

Stephen Kitt
la source
2

Ajout aux réponses déjà excellentes.

Les fichiers du micrologiciel, alias blobs binaires propriétaires, sont chargés dans votre micrologiciel au moins au moment du redémarrage à froid de l'appareil.

L'appareil a donc été conçu pour obtenir le firmware en RAM au lieu d'avoir une ROM + RAM pour réduire les coûts de production. Par exemple, vous avez des chipsets wifi Broadcom et des chipsets de commutateurs internes qui fonctionnent de cette façon.

Répondre à l'autre point de votre question de l'utilisation des fichiers de firmware dans une machine virtuelle.

Comme vous avez affaire à une VM, vous n'avez pas besoin de fichiers de firmware. Ils ne seront chargés nulle part; beaucoup moins de fichiers "firmware" ethernet ou wifi.

De même, étant donné que le micrologiciel n'est pas nécessaire dans un environnement de machine virtuelle, c'est une grande idiosyncrasie ayant dans Debian les dépendances d'un paquet de fichiers de micrologiciel générique dans le noyau Linux.

Rui F Ribeiro
la source
«C'est une grosse idiosyncrasie d'avoir dans Debian les dépendances d'un paquet de fichiers de firmware générique dans le noyau Linux» - au moins le firmware qui est recommandé par le paquet du noyau est vraiment sans DFSG ;-). (Mais vous avez raison, les deux recommandations - firmware-linux-freeet irqbalance- sont inutiles dans la plupart des déploiements de nos jours.)
Stephen Kitt
Je lance toujours un livre de jeu pour désinstaller cette cruauté après une série de mises à niveau du noyau
Rui F Ribeiro
1
Vous pouvez également configurer aptafin qu'il n'installe pas de recommandations par défaut ...
Stephen Kitt