Le code ou les données du micrologiciel sont-ils?

29

Quand quelqu'un dit qu'il a «flashé» le firmware d'un appareil, je suis curieux de savoir ce que cela implique réellement.

  1. Le micrologiciel est-il simplement un binaire natif qui est stocké en mémoire et qui peut être interprété par le processeur de l'appareil (comme tout autre EXE sur un ordinateur)? Ou le micrologiciel est-il uniquement des données qui agissent comme entrée d'un programme immuable déjà codé en dur / câblé sur l'appareil?
  2. Si ce dernier exemple n'est pas un firmware, comment l'appelleriez-vous? Par exemple, supposons qu'un périphérique possède un binaire ( someapp.exe) et que vous ne pouvez pas supprimer ou modifier ce binaire. Le binaire, lorsqu'il est exécuté, prend l'entrée d'une puce mémoire. Vous pouvez "flasher" les données sur cette puce, et donc affecter l'entrée / la configuration de someapp.execelles-ci prendront effet lors de sa prochaine exécution. Si ce n'est pas un firmware, comment cela s'appellerait-il?
HeineyBehinds
la source
12
C'est une très bonne question. C'est une belle pause de la série de "Mon grille-pain ne grille pas. Puis-je y mettre un arduino?" des questions.
Jason_L_Bens
17
Eh bien, cette question serait bonne, sinon le défaut majeur: le code est des données, et les données peuvent être du code - en ce qui concerne l'architecture / le modèle de Von Neumann. Ainsi, toute la question est vaine - puisque le code peut être (et est généralement ) traité comme des données et vice versa; aussi, à OP: pourquoi ne pas consulter en.wikipedia.org/wiki/Firmware ? il a la réponse à cette question même, et à bien d'autres choses concernant le firmware - ainsi, bien que ce soit une belle pause par rapport aux questions "Puis-je brancher une ampoule 12V dans une prise 230V", c'est toujours inférieur à mon livre. .
vaxquis
2
Je suis presque sûr que la réponse est "oui".
Connor Wolf
7
Le code machine est juste une entrée de données au câblage immuable de la CPU.
user253751
2
Est un livre des mots ou des lettres?
Nick T

Réponses:

27

Comme souvent avec de telles définitions, nous sommes d'accord dans la plupart des cas, mais il n'y a pas de frontière vraiment ferme entre ce qui est un firmware et ce qui ne l'est pas. Le firmware est

  • stocké en permanence (sauf pour une personne bien informée qui peut le changer ...)
  • pas destiné à être changé (sauf ...)
  • fonctionne sur le processeur sans l'aide d'autres logiciels (sauf ... vous comprenez?)

Quant aux données interprétées par un interprète (firmware): cela n'est pas souvent fait dans un cadre professionnel, car cela rend le produit plus cher: plus de mémoire, de puissance CPU, etc. est nécessaire pour atteindre le même objectif final. Il est cependant parfois utilisé en milieu amateur, souvent avec un interpréteur Basic en flash, et une application Basic (tokenisée) stockée dans eeprom (ou dans Flash aussi). Vérifiez par exemple le PICAXE et les différents tampons Basic.

IMO dans un tel paramètre à la fois l'interpréteur de base et l'application de base doivent être appelés firmware.


Une utilisation intéressante d'un interpréteur de micrologiciel qui interprète le code stocké (qui devrait également être considéré comme un micrologiciel) est le démarrage de la XBOX 360. Cet excellent exposé le décrit en détail.


Ci-dessous, MSalters se demande si le code FPGA / les données de configuration doivent être considérés comme des micrologiciels.

Dans les aspects qui importent le plus (ce sont les informations qui peuvent être modifiées tard dans le processus de production, mais elles ne sont pas destinées à être modifiées à volonté par l'utilisateur final) les bits FPGA se comportent comme des micrologiciels. Cela rend la question de savoir s'il s'agit d'un firmware selon une définition théorique. Le point important est qu'il peut (et doit) être écrit, manipulé et géré comme un firmware. (Si ça marche et caquille comme un canard, est-ce un canard?)

Ne vous embêtez pas avec les définitions quand elles ne sont pas utiles. Est le firmware du microcode? La représentation est-elle importante? Le contexte est-il important? Les bits ROM sont-ils pour un micrologiciel IWM?


Le commentaire de Vaxquis à la question de OP m'a incité à lire l'article wiki auquel il renvoie. OMI, la définition du firmware qui y est donnée (mémoire persistante et code de programme et données qui y sont stockées) est gênante. IMO, les cartes stockées dans un système de navigation automobile sont des données, pas un firmware, peu importe comment elles sont stockées (selon le wiki, elles devraient être un firmware). Et les applications de votre iPhone ou téléphone Android sont des applications, pas des micrologiciels (selon le wiki, elles devraient également être des micrologiciels).

Wouter van Ooijen
la source
Je me demande maintenant si un programme FPGA compte comme firmware. Intuitivement, oui, mais il ne fonctionne pas sur un processeur. Et pourtant, c'est un cas classique de bits à mi-chemin entre le code et les données.
MSalters
L'ordinateur TI 99/4 (1979) comprenait un interprète en ROM pour une langue appelée GPL, et un interprète BASIC écrit en GPL. Une caractéristique essentielle de la GPL était qu'elle pouvait exécuter du code stocké dans des puces GROM (qui étaient conçues pour un accès principalement séquentiel et pouvaient être physiquement plus petites et moins chères que la ROM à accès aléatoire) de sorte que la TI 99/4 puisse être considérée comme une masse -un ordinateur personnel de marché dont la conception est analogue à celle du tampon BASIC.
supercat
14

Le micrologiciel est un code de programme qui est stocké dans une mémoire non volatile, telle qu'une mémoire flash. Le terme est le plus souvent utilisé en relation avec les systèmes embarqués. Il peut être sur la même puce que le processeur ou sur un appareil séparé.

Leon Heller
la source
Merci @Leon Heller (+1) - y a-t-il un nom pour le 2ème exemple ci-dessus, où l'on "flashe" essentiellement des données d'entrée vers un binaire fixe sur une puce? Ou n'est-ce pas généralement pratiqué? Merci encore!
HeineyBehinds
Ce ne sont que des données. Il peut être stocké dans une mémoire volatile ou non volatile.
Leon Heller
Le terme que j'utiliserais pour votre # 2 serait une "table de correspondance". Un exemple auquel je peux penser serait les valeurs de la fonction sinusoïdale utilisées pour un oscillateur à commande numérique.
kjgregory
1
@KGregory Ce peut être une table de recherche, ce peut être un programme interprété, ce peut être des données d'image ...
glglgl
@glglgl a accepté. Je pourrais faire valoir que ceux-ci peuvent être considérés comme des formes de table de consultation, mais je pense que nous ne sommes pas à l'heure actuelle.
kjgregory
9

Je pense que les deux options sont en quelque sorte correctes, en regardant simplement le microprocesseur à différents niveaux d'abstraction. Ce que vous appelez votre binaire immuable serait le matériel lui-même, qui est assez limité dans ce qu'il peut faire. Récupérer l'adresse de l'instruction 0x0000, décoder l'instruction, récupérer l'adresse / le registre fourni, exécuter, incrémenter le compteur d'instructions. C'est le pipeline du microprocesseur, et vous ne pouvez pas le changer. Vous contrôlez ce que fait le microcontrôleur en stockant des instructions en mémoire, qui sont ensuite lues séquentiellement. Donc, fondamentalement, oui, le firmware n'est que des données d'entrée pour un programme immuable, à un faible niveau d'abstraction. Habituellement, cependant, il est plus facile d'imaginer le micrologiciel comme un programme spécial qui contrôle le microprocesseur car, conceptuellement, c'est plus facile de cette façon.

Jason_L_Bens
la source
J'adore cette réponse, +1, bien fait pour mettre l'accent sur les données et le code, c'est la même chose à la fin.
Vality
C'est la même chose pour l'architecture Von Neumann, au moins. Une fois que vous avez des bus séparés, vous pouvez commencer à affirmer que ce sont des choses différentes, bien que ce ne soient finalement que des morceaux.
Jason_L_Bens
8

C'est en fait les deux.

Un exemple de micrologiciel est le BIOS du PC, une section du BIOS est exécutable, mais d'autres parties du BIOS lui-même sont en fait des données, en particulier dans des tableaux à afficher pour énumérer les différentes fonctions d'une ROM du BIOS, quel que soit le type de technologie sur lequel elle est basée. sur. Souvent, les données sont stockées dans une autre mémoire flash, une batterie ou une mémoire RAM à condensateur, soit CMOS SRAM ou une autre technologie de puce de mémoire compatible.

Firmware, est un terme générique utilisé pour la mémoire immuable / non volatile, il est là et accessible selon le cycle d'alimentation tant qu'il n'y a rien de mal électriquement avec le circuit ou dans le cas d'un cycle de programmation bloqué, pour EEPROM ou Flash ROMs.

Le micrologiciel, par définition, est le niveau d'accès le plus bas, qui initialise, teste le matériel que vous avez installé dans votre système ou les composants intégrés et fournit des routines de bas niveau (parfois considérées comme des appels de fonction BIOS) dont votre système d'exploitation a besoin pour pouvoir utiliser les composants dans votre système. Dans l'ancien temps, le BIOS ou le système de sortie d'entrée de base comprenait également un langage de programmation appelé "BASIC", comme le Commodore 64 et d'autres ordinateurs personnels des années 1970, bien sûr, il y avait des ordinateurs plus anciens sur lesquels BASIC était intégré. également par des informaticiens professionnels. Si vous entendez parler d'une ROM de caractères ou de symboles qui est une forme de données pures pour la ROM exécutive ou de programme pour que le système accède à cette ROM de caractères et recherche des caractères dans une séquence ou vide la puce entière dans la RAM pour travailler avec elle Là.

Les programmeurs PROM, EPROM, EEPROM et Flash par défaut gravent le firmware sur une puce comme avec le suffixe .hex ou .bin, qui sont des formats similaires, cela dépend de votre application que vous utilisez pour envoyer à la puce, le firmware.

En outre, il existe des fichiers blob de micrologiciel, ce sont des exécutables sous forme de bibliothèques et de routines qui sont chargés au moment de l'exécution, un bon exemple en est les pilotes de matériel sans fil, ils contiennent suffisamment de code pour exécuter tout le matériel de ces cartes via votre Système d'ordinateur. La seule différence est que la carte et le firmware USB ne sont pas réellement stockés sur eux mais sur votre disque dur et chargés en mémoire. Il fonctionne essentiellement comme une couche et un filtre de service de traduction. C'est à la fois des données et du code.

Ma base est que j'écris en fait des BIOS pour d'autres ordinateurs et systèmes intégrés (par exemple, un micrologiciel sans fil, qui est en fait chargé au démarrage de votre système d'exploitation, puis commence à charger les pilotes matériels de bas niveau, qui incluent également le micrologiciel d'exécution) ). On l'appelle firmware car il ne change jamais ses routines, sauf si vous obtenez une mise à jour du fabricant, puis la mise à jour écrase l'ancienne. Agit comme le nouveau firmware dans ce cas jusqu'à ce que de nouveaux éléments soient mis à jour, sinon, c'est le firmware que vous utilisez lorsque votre système d'exploitation se charge.

Je suis d'accord, il ne devrait pas être appelé firmware car il n'est pas techniquement sur la puce en tant que solutions permanentes et nécessite un outil et une application spéciaux pour mettre à jour le firmware (dans le cas des anciens BIOS par rapport à ceux des mémoires flash).

Vous avez d'autres questions, je serais heureux d'y répondre pour vous.


la source
6

Le micrologiciel est un code qui a été créé dans une sorte d'environnement de développement, tout comme le code logiciel, mais il se résume ensuite au code machine afin que le processeur puisse le comprendre. Si vous videz la mémoire d'un microcontrôleur ou d'une autre puce, vous remarquerez qu'il ne ressemble en rien au code C ou à ce que nous programmons.

Vous ne programmez donc pas de fichier .EXE, car il s'agit d'un programme compilé à exécuter dans une sorte d'environnement de système d'exploitation. Vous programmerez généralement un .hex, ou peut-être un .elf, cela dépend vraiment du périphérique que vous programmez, mais cela n'a pas d'importance parce que vous n'êtes pas concerné par les types de fichiers puisque votre compilateur compilera plutôt le codez-le dans le code machine et placez-le dans le flash sur les puces ou dans le schéma de stockage qu'il possède.

Le micrologiciel est généralement immuable dans la mesure où les conditions environnementales doivent être programmées. Vous ne pouvez pas modifier le code du micrologiciel et le laisser, vous devez effectuer le changement, le compiler et re-flasher l'appareil.

  • Généralement, le code logiciel est un code qui doit être exécuté par-dessus un système d'exploitation.
  • Le code du micrologiciel est l'information qui est exécutée sur le métal nu de la puce. Le micrologiciel peut être soit le programme d'application proprement dit, soit un simple système d'exploitation, sur lequel vous pouvez ensuite charger le logiciel via un stockage amovible ou une mémoire flash flashée dans le monde intégré. Ce niveau peut descendre jusqu'au code binaire, car il s'agit toujours de code.
  • Une fois que vous commencez à travailler directement avec la tension, vous avez atteint le niveau matériel.
Funkyguy
la source
2
"mais ensuite il se résume au code machine pour que le processeur puisse le comprendre." Tout comme le code logiciel, tant qu'il est écrit en C ou quelque chose de similaire.
glglgl
1
Ce que les processeurs comprennent, oui, binaire, mais ils ont quelque chose appelé des codes d'opération mnémomiques (codes op, comme on le voit dans l'industrie) pour ceux d'entre nous qui programment toujours en langage d'assemblage, qui se trouve être une étape au-dessus du langage machine [binaire ]).
0

Le micrologiciel est un terme générique qui est généralement utilisé pour spécifier quelque chose qui se situe à mi-chemin entre le monde logiciel et le monde matériel.

Le matériel est difficile à changer. Le logiciel est facile à changer. Le firmware n'est pas aussi difficile à changer que le matériel, mais il est plus difficile à changer que le logiciel.

Il pourrait être utilisé pour discuter du code exécutable, des données ou des informations de configuration (comme dans FPGA / PLD / etc) qui peuvent être modifiés.

Adam Davis
la source
Au sens large du mot et de la définition, c'est vrai. Cependant, ces puces ne sont pas en fait du code ni des données. Une fois terminé, le compilateur crée des conceptions logiques, sous forme de solutions complètes ou de logique de collage pour assembler différentes parties d'un système. Au lieu d'utiliser des portes et registres logiques physiques des séries 74 et 54 pour trouver une solution. Je suis vraiment content que vous ayez soulevé cette question, Adam.
0

Pour expliquer plus en détail ce qu'est le firmware.

Le micrologiciel est un code qui s'exécute sur du matériel très spécifique, ce qui signifie que ses codes opérationnels sont spécifiques au matériel pour lequel il est écrit, il peut s'agir d'une famille de puces ou d'interfaces ou destiné à un seul élément.

C'est essentiellement ce que fait le firmware;

  1. A des instructions câblées pour un processeur donné à entreprendre et à exécuter, cela s'appelle un "bootstrap". Quels sont les ordinateurs les plus démarrables dans leur BIOS?

  2. Initialisez ledit matériel via les instructions du firmware.

  3. Charger / monter la table de saut.

  4. Rendre accessible l'accès aux registres d'un appareil donné.

  5. Remettez le contrôle à la routine de sortie une fois que le BIOS a été utilisé après un démarrage à froid (hors tension) ou à chaud (un redémarrage normal ou une broche de réinitialisation a été utilisé).

  6. La plupart des BIOS (micrologiciels) sont conçus pour un chipset spécifique à l'esprit et extraient toutes les fonctions de ceux-ci et étoffent toutes les données que quelque chose pourrait être attaché à une ligne de bus donnée dans un ordinateur ou un périphérique intégré.

  7. Les disques durs sont un bon exemple d'une solution de stockage qui est en soi un périphérique embarqué, qui a également un BIOS et une forme de firmware sur une puce.

Essentiellement, tout micrologiciel est un tas d'instructions qu'un autre processeur fait pour obtenir des fonctionnalités d'un tel appareil. C'est un logiciel qui est chargé dans un appareil physique, en cas de coupure de courant, il sera là lorsque l'appareil retrouvera du courant.

Techniquement, vous pouvez utiliser n'importe quel langage de programmation ou de script pour créer des fichiers binaires. Il vous suffit de savoir comment fonctionne le processeur que vous allez cibler, les codes opérationnels réels, le registre interne (sans parler de leur destination), d'apprendre les systèmes de nombres binaires et hexadécimaux et comment créer un assembleur qui peut enregistrer votre code en langage assembleur. Une fois cela terminé, vous pouvez charger un autre programme de le convertir en binaire, puis l'enregistrer en tant que fichier .bin ou .hex.

Si vous voulez savoir comment Ada, C, C ++, D et d'autres langages de programmation convertissent leurs "jetons" qui sont leur code natif qui est découpé en pseudo-codes d'opération en langage machine. Il y a plusieurs livres que je vous recommande de lire, certains sont assez élémentaires et sont centrés sur des processeurs très spécifiques mais c'est bon à apprendre. Je vais vous donner un livre pour le moment, parce que je ne veux pas vous noyer, vous ou quiconque, en lisant ces informations.

  1. Création d'un compilateur avec «C» par Charles N. Fischer et Richard J. LeBlanc, Jr.
  2. Visitez ce site, il est basé sur le chipset x86 trouvé sur le PC IBM; http://www.laynetworks.com/assembly%20tutorials.htm

C'est l'introduction à la programmation en langage assembleur sur PC au tout début. Il parle de la gestion des interruptions (interruptions matérielles et logicielles) et de nombreux autres sujets, il explique plus en détail ce que fait réellement un BIOS et comment l'utiliser.

Contrairement au langage d'assemblage et au langage machine, vous pouvez vous en sortir avec beaucoup plus en Ada, C, C ++, D, si vous ne connaissez pas les spécificités de votre matériel. En assembleur et en langage machine, si vous ne savez pas ce que vous faites, quelque chose de mauvais se produira ou le code ne fonctionnera pas. Je préfère ce dernier cas, ne fonctionne pas contre quelque chose de mauvais.

Remarque: À propos de la réponse ci-dessus, à propos de la RAM flash, il n'y a rien de tel, il y a des ROM flash mais pas de RAM flash. Les mémoires flash ROM contiennent le micrologiciel, les RAM qui sont sauvegardées par batterie ou condensateur, ou ont une autre mémoire flash flash qui contient des paramètres pour les options du BIOS que vous avez définies.

Il y a un code dans le firmware sur la façon de stocker ou d'effacer la mémoire de données (par rapport à la mémoire du programme / firmware lui-même), s'il s'agit d'une ROM flash ou d'une puce RAM. Sur les PC, si votre mot de passe BIOS est altéré ou si vous ne vous en souvenez pas (ou si quelqu'un vous embrouille), vous pouvez ouvrir le boîtier et trouver les deux broches appelées "CMOS CLR / CMOS CLEAR / BIOS RESET / BIOS RST", court-circuiter ces deux broches ensemble efface également la mémoire, tout ce que vous devez faire après cela est d'appuyer sur le bouton de réinitialisation, lorsque les deux broches sont toujours en court-circuit. Cela efface le mot de passe et vous permet un accès complet au BIOS de votre PC (en supposant que vous avez un ordinateur plus récent à partir des années 1990).

Sur les nouveaux PC, vous avez une mémoire flash pour le firmware et vous avez une SRAM alimentée par batterie (n'a pas besoin d'être constamment actualisée comme les puces DRAM, elle est basée sur une technologie plus ancienne).


la source
0

En termes de systèmes embarqués, le firmware clignotant signifie que vous avez effacé la ROM d'un microcontrôleur à l'aide d'un périphérique clignotant et que vous l'avez réécrite avec un nouveau code. Ce micrologiciel à flasher est au format HEX.

En termes de terminologie liée au système d'exploitation, il est également flashé dans la ROM, mais cette fois, il est de la responsabilité d'un système d'exploitation de le flasher lorsqu'une mise à jour arrive.

Fahad Naeem
la source
0

Je crois que l'utilisation de la perspective "historique" pourrait donner une compréhension plus basique de ce qu'est le firmware .
Cela commence d'abord par «matériel». Pour fournir / créer une fonction donnée, on pourrait utiliser des tubes, des relais, des transistors et des CI. Vous utiliseriez un certain nombre de ces composants et vous créeriez un appareil qui exécutait la fonction requise. Cela a été considéré comme un "matériel" parce que si vous vouliez (ou aviez besoin) de changer la fonction, vous auriez besoin de dessouder des fils, des prises, etc. et c'était "difficile" à faire. Ainsi, cette méthode d'implémentation d'une fonction est devenue connue comme utilisant du matériel. L'utilisation d'un processeur, de la RAM et du code est devenue une autre méthode de création d'une fonction et est devenue connue sous le nom de "logiciel"apporter des modifications à la conception. "Cependant, il y avait aussi un besoin (principalement des fabricants), de terminer le plus tôt possible une conception, mais d'être capable de faire des modifications de conception" de dernière minute "aussi faciles et rentables que possible. . L'utilisation de ROM a permis cette flexibilité jusqu'au "premier envoi". Les EEPROMS permettent des changements même après "premier envoi" (sur le terrain). Le code nécessaire / utilisé pour les ROM et les PROM a été nommé "firmware" . "

Guill
la source