54 votes

Écrire mon propre BIOS

Je ne suis pas fou, je réinvente juste la roue :D
J'ai écrit des boot-loaders, des mini-pilotes pour la souris et le clavier, des mini OS, etc.

J'essaie toujours d'éviter les interruptions DOS, en utilisant uniquement celles du BIOS, en essayant d'aller de l'avant avec un mini OS unifié, mais soudainement j'ai décidé d'écrire mon propre BIOS :)

La légende a dit :
J'ai été programmeur de haut niveau, puis de bas niveau. Un jour, je serai programmeur de langage machine !

Un BIOS est-il écrit en assembleur ? Comment le flasher ? Quel est le mécanisme ? Puis-je commencer à éditer mon BIOS actuel ?

36voto

dwelch Points 27195

Un BIOS peut être écrit en assembleur, mais ce n'est pas obligatoire. Certaines parties doivent l'être pour obtenir les paramètres de l'appel système, car ils ne correspondent pas à la convention d'appel du compilateur.

Comment le flasher ? Cela varie d'une carte mère à l'autre, je commencerais par une machine virtuelle open source et j'écrirais un bios pour cela. Ou créez une machine virtuelle pour laquelle vous avez écrit le bios. Le mécanisme varie d'un fournisseur à l'autre, généralement vous démarrez dos (dos n'est pas mort, il est très vivant dans le monde du PC, en particulier dans le développement de cartes mères et de systèmes embarqués). Je ne m'amuserais pas avec une vraie carte mère, si vous ne connaissez pas déjà les réponses à toutes ces questions, vous allez bousiller un certain nombre de cartes mères si vous suivez cette voie.

Vous pouvez essayer de prendre une mise à jour du bios de votre carte mère et de faire de l'ingénierie inverse (bien qu'il y ait probablement un accord de clic qui stipule que vous ne pouvez pas le faire). Si vous le trouvez, vous pouvez à la fois le charger et le pirater. Je ne m'aventurerais pas sur ce terrain, vous allez bousiller votre système avant même d'avoir compris.

La rédaction d'une biographie est-elle vraiment ce que vous recherchez ? C'est un peu comme écrire du code 6502 pour le plaisir. Il y a beaucoup de problèmes de bas niveau qui sont plus utiles et aussi intéressants.

Si vous savez écrire de l'asm, l'écriture de code machine n'est pas difficile du tout, vous pourriez vous y mettre pour le plaisir. x86 est épouvantable, vous devriez passer du temps à apprendre d'autres systèmes, leur asm et leur code machine (et à écrire des systèmes d'exploitation pour eux). ARM domine le monde et ne dépend pas d'un bios. On m'a dit que pour faire fonctionner une carte vidéo sur un système non-x86, il fallait toujours bricoler quelque chose en x86 sur le bios x86. Je pourrais trouver comment faire fonctionner une carte vidéo grand public sans avoir besoin de faire fonctionner le bios x86. Regardez un émulateur faire fonctionner le bios et voyez ce qu'il fait, trouvez comment remplacer ce power on init sans que le bios ne le fasse. ... Ecrire un simulateur de jeu d'instructions ou un désassembleur est la prochaine étape au-delà de l'écriture du code machine, je ne perdrais même pas une seconde de temps sur x86 cependant, je peux suggérer une liste d'alternatives (ou vous pouvez simplement jouer avec les simulateurs que j'ai écrits ou collectés).

Si un bios x86 est la voie que vous voulez suivre, votre meilleure solution est d'écrire, de remplacer ou de bidouiller un bios pour une machine virtuelle, que ce soit qemu, virtualbox ou autre. Remplacer ce bios par le vôtre consistera probablement à remplacer un fichier dans un répertoire ou à utiliser une option de ligne de commande pour spécifier un bios alternatif. Une fois que vous aurez acquis de l'expérience dans ce domaine, s'il existe encore des cartes mères avec des bios anciens, vous pourrez peut-être en programmer une (vous devrez en acheter plusieurs de chaque type de carte mère, car vous en bousillerez certaines). Avec tous les systèmes embarqués qui existent et que l'on peut se procurer pour 20 à 200 $ avec le même niveau d'expérience, il n'est pas raisonnable de pirater une carte mère de PC sans schémas et documentation décents. Vous pourriez déterrer un PC original dont le schéma et la liste des bios sont documentés, et dont le bios est monté sur socle, de sorte que si le vôtre ne démarre pas (et ne détruit pas la carte mère), ce n'est pas une brique, vous pouvez reprogrammer ou remplacer la puce du bios. Il faudrait probablement utiliser un microcontrôleur pour faire office de faux bios, car il est peut-être plus difficile de trouver le bon matériel pour reprogrammer d'autres puces bios que des PC originaux en état de marche... Il y a une communauté amiga qui est probablement beaucoup plus amusante et qui serait heureuse que vous amélioriez/configuriez leurs bios, en mettant par exemple du matériel moderne derrière les appels système hérités.

4voto

Zimba Points 156

Le BIOS peut être écrit dans votre langue préférée, bien que les langues de bas niveau vous donnent plus de contrôle. L'assemblage et le code machine sont presque identiques, la différence étant l'interface du microcode et ce que vous tapez, par exemple, pour le code machine, vous ne tapez que 2 caractères, alors que l'assemblage vous donne des caractères alphanumériques. Ma recherche d'un BIOS personnalisé a commencé lorsque j'ai eu besoin que l'ordinateur démarre toutes les quelques heures et je n'ai trouvé aucun BIOS qui le fasse.

Pour flasher le BIOS, suivez les instructions du fabricant. Le BIOS a été remplacé par l'UEFI (pour plus de sécurité). A vérifier : https://www.pcworld.com/article/187437/how-to-update-your-bios.html

Référence des instructions x86 et amd64 : https://www.felixcloutier.com/x86/
Instructions x86 avec extensions : https://en.wikipedia.org/wiki/X86_instruction_listings
i386 instruction ref : https://css.csail.mit.edu/6.858/2014/readings/i386.pdf
Guide d'assemblage x86 : https://www.cs.virginia.edu/~evans/cs216/guides/x86.html
Intel Instruction Set Ref : https://software.intel.com/sites/default/files/managed/a4/60/325383-sdm-vol-2abcd.pdf

3voto

SeanRamey Points 302

Si vous souhaitez écrire un BIOS pour un ordinateur compatible IBM PC (ce qui est le cas de la majorité des PC de bureau aujourd'hui, bien qu'avec davantage d'extensions du jeu d'instructions du CPU, et quelques interfaces BUS différentes), je vous suggère de consulter le document _PC IBM_ , _IBM PC XT_ y _Manuels de référence technique IBM PC AT_ . En particulier le manuel AT de l'IBM PC, car c'est la norme de facto.

Ces manuels contiennent une liste de programmes du BIOS complet qu'IBM utilisait sur ses ordinateurs, et ils sont en langage d'assemblage. Il vous faudra peut-être fouiller un peu dans ces manuels (en particulier celui de l'IBM PC AT) pour les trouver, car certains ne sont pas directement répertoriés dans la table des matières, mais ils sont là. J'espère que ces BIOS vous aideront à démarrer.

1voto

hallo Points 1

Il y a des moyens de flasher le bios autrement qu'en faisant tourner l'ordinateur. Mais cela nécessite du matériel. Cela ne devrait pas coûter très cher.

Vous pouvez essayer ce genre de technique : http://hackaday.com/2010/11/18/build-your-own-soic-progamming-clip/

J'ai vu ce discours aujourd'hui : https://conference.hitb.org/hitbsecconf2015ams/sessions/how-many-million-bioses-would-you-like-to-infect/

Il l'explique plus en détail, bien que vous ne cherchiez peut-être pas l'infection, certaines techniques pour accéder aux bios sont couvertes, dont le clip de programmation.

1voto

Jmes Hanley Points 11

FWIW Modbin est un programme DOS qui, comme son nom l'indique, modifie les images BIN spécialement dans le but d'apporter des changements simples et assez extrêmes au code BIOS existant.

Si vous pouvez obtenir un vieux mobo (beaucoup sont jetés et fonctionnent encore), je vous encourage à jouer avec le BIOS. C'est instructif et amusant, si l'on est enclin à le faire et vous semblez l'être :) Il fut un temps où je téléchargeais des images de BIOS de mobos qui avaient le même chipset ou un chipset assez similaire bien que fabriqué par un autre fabricant... parfois avec des avantages considérables, y compris des choses aussi simples que de continuer à recevoir des mises à jour du BIOS après que le fabricant du mobo d'origine ait laissé tomber ou ait fait faillite, mais aussi des options et des modifications orientées vers les caractéristiques et les performances.

Cela m'a conduit au "HOT Flashing" qui consiste à retirer une puce BIOS enfichée de manière à ce que les broches entrent à peine en contact et, une fois le système démarré, à retirer cette puce et à la remplacer par une mauvaise (souvent celle que j'avais endommagée) tout en continuant à fonctionner et à la flasher en utilisant la fonction de BIOS en mémoire cache qui permet de garder le système actif. C'était amusant pour ceux d'entre nous qui sont des geeks et cela m'a donné la confiance nécessaire pour écrire des pilotes de périphériques pour OS/2.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X