Quel langage de programmation est utilisé pour écrire un programme BIOS?

Si je comprends bien, le code / flux de bits du BIOS contenu dans la ROM doit être générique (fonctionne avec plusieurs types de CPU ou ISA). De plus, jai vu mentionné sur le web quil est possible de vider son code (et de le «démonter»).

Alors, dans quelle langue, jeu dinstructions ou code machine est-il écrit? Na-t-il pas besoin dun processeur pour effectuer ses opérations? Si tel est le cas, je suppose quil utilisera le processeur externe, alors comment connaît-il le jeu dinstructions spécifique de celui utilisé?

Peut-être dispose dun processeur interne?

Commentaires

  • duplication possible de Comment fonctionnent les ordinateurs?
  • La publication croisée est déjà assez mauvaise, mais quand elle se retrouve sur les questions Hot Network dans les deux versions , que ‘ est juste au-delà du pâle …
  •  » code BIOS / flux binaire qui contenait le La ROM doit être générique (fonctionne avec plusieurs types de processeurs ou ISA).  » – Je jamais entendu parler d’un BIOS fonctionnant avec plusieurs ISA. avez un exemple?
  • As I understand, the BIOS code/bitstream that is held in the ROM should be generic (work alongside with multiple CPU types or ISAs). I ‘ d say  » Non, au contraire  »
  • Ce nest même pas une annonce à distance duplicata dune question aussi générale que  » Comment fonctionnent les ordinateurs? « . Veuillez ne pas fermer en tant que dupe.

Réponse

Les BIOS étaient écrits exclusivement en langage dassemblage, mais le la transition a été faite il y a longtemps pour écrire la majorité du code dans un langage de niveau supérieur, et laisser écrit dans lassemblage le moins de parties possible, de préférence uniquement le programme damorçage, (les toutes premières centaines dinstructions que le processeur saute après un démarrage / une réinitialisation,) et quelles que soient les routines traitant des bizarreries spécifiques de larchitecture sous-jacente.

Les BIOS étaient déjà écrits principalement en C dès le début des années 90. (Jai écrit un BIOS en 90% C, 10% assemblage au début des années 90.)

Ce qui a aussi beaucoup aidé dans ce sens est:

  • C bibliothèques qui ciblent une architecture spécifique et incluent des fonctions pour traiter les particularités de cette architecture, par exemple, des fonctions pour lire / écrire des octets vers / depuis les ports dE / S de larchitecture x86. Microsoft C a toujours offert des fonctions de bibliothèque pour ce genre de choses.

  • Les compilateurs C qui non seulement ciblent une architecture de processeur spécifique, mais offrent même des extensions au langage C que vous pouvez utiliser dans afin décrire du code qui utilise des fonctionnalités spéciales du processeur. Par exemple, larchitecture x86 prend en charge des choses appelées interruptions, qui invoquent des routines appelées gestionnaires dinterruptions, et les oblige à avoir des séquences dinstructions dentrée / sortie spéciales. Dès les tout premiers jours, Microsoft C a pris en charge des mots-clés spéciaux que vous pouviez utiliser pour marquer une fonction comme gestionnaire dinterruption, afin quelle puisse être appelée directement par une interruption du processeur, vous navez donc pas besoin décrire dassembly pour elle.

De nos jours, je suppose que la plupart du BIOS est écrit en C ++, sinon dans un langage de niveau supérieur.

La grande majorité du code qui compose un BIOS est spécifique au matériel sous-jacent, il na donc pas vraiment besoin dêtre portable: il est garanti quil fonctionnera toujours sur le même type de CPU. Le processeur peut évoluer, mais tant quil maintient la compatibilité ascendante avec les versions précédentes, il peut toujours exécuter le BIOS sans modification. De plus, vous pouvez toujours recompiler les parties du BIOS écrites en C pour les exécuter nativement sur tout nouveau processeur qui se présente, si le besoin sen fait sentir.

La raison pour laquelle nous écrivons des BIOS dans des langues dun niveau supérieur à cest parce quil est plus facile de les écrire de cette façon, pas parce quils doivent vraiment être portables.

Commentaires

  • Oui. Parfois, vous pouvez même avoir une carte mère liée non seulement à une architecture de processeur spécifique, mais même à un fournisseur de processeur spécifique. De nos jours, vous pouvez acheter une carte mère x86 qui nest compatible quavec les processeurs Intel x86, ou une carte mère x86 qui nest compatible quavec les processeurs AMD x86. Le BIOS de ces cartes mères sera dans une large mesure identique, car dans les deux cas, le processeur comprend le jeu dinstructions x86 et la plupart des périphériques sont identiques, mais certains périphériques présentent des différences, que le BIOS doit prendre en compte.
  • @Reflection examine de près à quoi ressemble physiquement une carte mère. Le socket du processeur aura une certaine disposition des broches, qui est spécifique à la famille de processeurs quil accepte.Vous ne pouvez pas physiquement connecter un Intel P4 à une carte mère AMD Opteron
  • Le terme  » BIOS  » fait référence au  » Système dentrée / sortie de base  » dun PC, donc, avoir un BIOS implique un CPU x86. Les systèmes IA64 ont un EFI au lieu dun BIOS, les systèmes PowerPC peuvent avoir un système Open Firmware ou un système propriétaire, les systèmes Sparc ont également OFW (ou plutôt OpenBoot), lOLPC X0 est un système x86 qui utilise OFW. Même les PC nutilisent plus le BIOS ‘, ils sont passés à (U) EFI. OB / OFW est intéressant, car il est conçu pour être non seulement portable mais multiplateforme. Les pilotes OFW fonctionneront sur n’importe quel système OFW, ils sont  » Write Once Run Anywhere « , quel que soit le processeur ISA.
  •  » Aujourdhui, je suppose que la plupart du BIOS est écrit en C ++  » Je ne le ferais pas ‘ t suppose nécessairement que, cest peut-être vrai mais je travaille dans ce secteur et certainement de nombreux chargeurs de démarrage sont écrits en C. Les personnes qui écrivent ce genre de choses sont souvent les  » Old Guard  » et ont tendance à ne pas encore faire entièrement confiance au C ++.
  • @TomDworzanski: Bien que techniquement pas BIOS (qui se réfère exclusivement à lancien PC-stuff de 1981), de nombreuses implémentations du micrologiciel ouvert IEEE-1275 (qui est utilisé pour un rôle similaire à celui du BIOS sur Sparc, la plate-forme de référence matérielle commune PowerPC (par exemple PowerMac, PowerBook), lordinateur portable à 100 $ OLPC X0 -1) sont écrits en partie dans des langages autres que assembly / C. OpenBoot , Open Firmware , OpenBIOS contiennent tous…

Réponse

Alors quen théorie on peut écrire le BIOS dans nimporte quelle langue, le la réalité moderne est que la plupart des BIOS sont écrits en utilisant Assembly, C, ou une combinaison des deux .

Le BIOS doit être écrit dans un langage capable de se compiler en code machine , qui est compris par la machine matérielle physique. Cela élimine les langages interprétés directement ou de manière intermédiaire (Perl, Python, PHP, Ruby, Java, C #, JavaScript, etc.) comme étant appropriés pour lécriture du BIOS. (Bien quen théorie, on puisse implémenter lun de ces langages pour soit compiler directement en code machine statique, soit intégrer linterpréteur dans le BIOS. Il y a, par exemple, le projet GCJ abandonware pour Java.)

La plupart des OEM implémentent un BIOS en étendant les implémentations propriétaires et génériques de BIOS par des sociétés comme American Megatrends et Phoenix Techologies . (Vous avez probablement déjà vu lune de ces sociétés safficher sur le premier écran de démarrage dun ordinateur.) Le code source de ces implémentations nest pas accessible au public, mais une partie a été divulguée. Je ne souhaite pas créer de lien direct vers celui-ci au C et au code source de lassembly, mais il y a endroits sur Internet où ce code source est discuté pour ceux qui veulent jeter un coup dœil.

Certains fabricants de matériel, comme ceux qui ciblent les marchés de la haute performance et du jeu, saturent leurs implémentations de BIOS avec des fonctionnalités de personnalisation, des statistiques et des interfaces utilisateur attrayantes conçues pour leurs implémentations exactes. Beaucoup de ces fonctionnalités vont au-delà de ce qui est offert dans les produits génériques produits par American Megatrends et dautres. Malheureusement, ces entreprises considèrent souvent la publication de leur code source comme un risque pour la sécurité , si bien que ces implémentations haut de gamme sont mal connues, car peu est partagé à leur sujet. Bien sûr, trouver des moyens daccéder à de telles implémentations de BIOS et de les décompiler, mais cela peut être difficile et peut-être illégal.

Pour revenir à la question initiale, en raison de la nécessité de produire du code machine natif, un BIOS devrait être implémenté dans un langage de programmation pris en charge par un compilateur de code machine natif . Bien quil existe de nombreux langages de ce type et bien que je sois sûr quau cours des dernières décennies, plusieurs langages ont été utilisés dans lexpérimentation, chaque implémentation de BIOS ouvert que jai pu trouver repose spécifiquement sur une combinaison de C et / ou dassembly. Lopen – les implémentations du BIOS que jai examinées pour former cette conclusion incluent OpenBIOS , tinyBIOS , coreboot , BIOS Intel et Libreboot . Jai également examiné de très anciennes implémentations de BIOS qui ne sont pas pertinentes aujourdhui mais qui suivaient également la règle C et / ou dassemblage.

Je pense quil est également pertinent de regarder dautres logiciels conçus pour interagissez directement avec le matériel.Nous savons, par exemple, que le noyau Linux , le noyau OS X et le Le noyau Windows est en grande partie C avec un assemblage et des langages de niveau supérieur pour des tâches spécifiques. Nous savons également que les pilotes matériels sous Linux et pilotes matériels sous Windows sont écrits en grande partie en C .

Pour revenir au BIOS, je pense quil est également important de prendre en compte les aspects économiques du langage de programmation choisi. Le BIOS est généralement écrit comme une nécessité pour compléter les ventes de matériel. Les systèmes BIOS modernes sont connus pour être en grande partie écrit en C et / ou en assemblage. Le passage à un autre outil ajouterait des coûts importants à ce qui est généralement considéré comme des produits de base, ce qui pourrait avoir un effet très négatif sur les ventes. Sans entrer dans l’économie 101, je peux vous assurer que ce n’est probablement pas Cela vaut la peine pour un OEM de sécarter des outils éprouvés qui ont fait leurs preuves depuis des décennies.

Bien sûr, il y a et il y aura des projets amateurs pour écrire également le BIOS. Ceux-ci aussi, jusquà présent, semblent choisir C et / ou lassemblage. Peut-être quun jour dautres technologies seront utilisées. Mais aujourdhui, le choix de est bien défini.

Commentaires

  • Cest un peu de pinaillage mais C # et Java ne sont pas interprétés . Ils compilent en byte-code. Cest loctet-code qui est ensuite manipulé par un interpréteur. Ne change pas ‘ la logique du premier paragraphe.
  • @Tonny Que ‘ est correct. Jai ajouté  » interprété directement ou de manière intermédiaire  » pour être un peu plus clair.
  • @Tonny normalement a gigue plutôt quun interpréteur, ce qui est une distinction importante car il ‘ est possible de préjit tout cela en natif tant que certaines techniques dynamiques ne sont pas ‘ t utilisé. En tant que tel, il serait à peu près théoriquement possible décrire un BIOS dans les langages .NET ou Java, si lon faisait les deux et sassurait que tout le support dexécution nécessaire était disponible. Jimagine que les efforts déployés pour faire cela seraient plus que nains toute commodité trouvée.
  • @Tonny En fait C # compile en code natif msdn.microsoft.com/en -us / vstudio / dotnetnative.aspx donc il est ‘ bizarre de le voir dans la liste des langages faibles / dynamiques.
  • @Den C # nest généralement pas compilé en code natif. Ce produit .Net Native auquel vous vous connectez na pas encore été officiellement publié. Daprès ce que jai ‘ lu, il compilera le code de lapplication et le code du framework requis dans un exécutable. Selon la FAQ, cela ciblera initialement les applications du Windows Store, donc cela peut prendre un certain temps pour que cela soit pris en charge plus largement. Cela étant dit, il semble que Microsoft pourrait séloigner du modèle de machine virtuelle dans le futur si tout va bien.

Réponse

Le BIOS réel dun ordinateur serait écrit dans un langage (probablement C ou assembly) qui est compilé en code binaire dépendant de larchitecture; ce code ne peut pas fonctionner sur une autre architecture (et sans doute nen a-t-il pas vraiment besoin, car il est déjà très spécifique à la machine avec laquelle il est livré).

Mais pensez-vous peut-être à ROM optionnelles (qui sont parfois appelées BIOS, comme dans « BIOS vidéo » pour une ROM optionnelle GPU)?

Pour les BIOS actuels et hérités compatibles les ROM optionnelles, il sagirait probablement de code exécutable dépendant dISA (encore une fois généré par nimporte quel langage qui peut être compilé pour cibler larchitecture souhaitée); Le PCI permet également dinclure du code pour plusieurs ISA et permet à lhôte de sélectionner limage binaire appropriée pendant le processus de démarrage.

Pour loption compatible UEFI ROM, il existe également un format de code doctet indépendant de larchitecture qui peut être exécuté sur différentes architectures, mais le code dépendant dISA peut également être utilisé.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *