web-dev-qa-db-fra.com

Écrire mon propre BIOS

Je ne suis pas fou, je réinvente juste la roue: D
J'ai écrit des chargeurs de démarrage, des mini-pilotes de souris et de clavier, des mini-OS, etc.

J'essaie toujours d'éviter les interruptions DOS, en utilisant uniquement celles du BIOS, en essayant de faire avancer un mini OS unitaire, mais soudain, j'ai décidé d'écrire mon propre BIOS :)

La légende raconte:
J'étais programmeur de haut niveau, puis de bas niveau. Un jour, je serai programmeur en langage machine!

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

32
Ahmed Ghoneim

Un BIOS peut être écrit en Assembly mais ne doit pas l'être, certaines parties doivent être pour obtenir les paramètres de l'appel système car ils ne correspondent pas à la convention d'appel des compilateurs.

Comment le flashez-vous? Varie d'une carte mère à l'autre, je commencerais par une machine virtuelle open source et j'écrirais un bios pour ça. Ou créez une machine virtuelle où 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 PC, en particulier le développement de cartes mères et les systèmes embarqués). Je ne déconnerais pas avec une vraie carte mère, si vous ne connaissez pas déjà les réponses à toutes ces questions, vous allez briquer un certain nombre de cartes mères si vous suivez cette voie.

Vous pouvez essayer de prendre une mise à niveau du bios pour votre carte mère et la désosser (bien qu'il y ait probablement un accord de clic indiquant que vous ne le ferez pas). Si vous le comprenez, vous pouvez à la fois le charger et le pirater. Je n'irais pas là-bas, vous briquez votre système avant de le découvrir.

L'écriture d'un bios est-elle vraiment ce que vous recherchez? Assez vieille école, ce serait comme écrire du code 6502 pour le plaisir. Il existe de nombreux problèmes de bas niveau qui sont plus utiles et aussi intéressants.

Si vous pouvez écrire asm, l'écriture du code machine n'est pas si difficile que ça, vous pouvez simplement le faire pour le plaisir. x86 est horrible, vous devriez passer du temps à apprendre d'autres systèmes et leur code asm et machine (et à écrire des systèmes d'exploitation pour eux). ARM domine le monde et ne s'appuie pas sur un bios. On m'a dit que pour obtenir une carte vidéo sur un système non x86, vous devez encore tripoter quelque chose en x86 sur le x86 bios, pourrait comprendre comment faire apparaître une carte vidéo grand public sans avoir besoin d'exécuter le bios x86. regarder un émulateur exécuter le bios et voir ce qu'il fait, comprendre le remplacer cette alimentation sur init sans le bios le faire ... Écrire un simulateur ou un désassembleur d'instructions est la prochaine étape au-delà de l'écriture de code machine, je ne perdrais même pas une seconde de temps sur x86, 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 souhaitez suivre, votre meilleur chemin est d'écrire, de remplacer ou de pirater un bios pour une machine virtuelle en cours de qemu, virtualbox ou autre. Remplacer ce bios par le vôtre reviendrait probablement à remplacer un fichier dans un répertoire ou à utiliser une option de ligne de commande pour spécifier un autre bios. Une fois que vous êtes bien expérimenté dans ce domaine, s'il y a encore des cartes mères avec des bioses héritées, vous pouvez peut-être vous frayer un chemin pour en programmer une (vous devez acheter plusieurs cartes mères de chaque type car vous en briquez). Avec autant de systèmes embarqués disponibles pour 20 à 200 $ avec le même niveau d'expérience acquis, il n'est pas logique de pirater une carte mère de PC sans schémas et documentation décents. Vous pouvez déterrer un PC original avec la liste du schéma et du bios documentée, et le bios étant enchâssé, donc si le vôtre ne démarre pas (et ne détruit pas la carte mère), ce n'est pas une brique que vous pouvez reprogrammer ou remplacer le bios puce. Vous voulez probablement utiliser un microcontrôleur pour vous présenter comme un faux bios, car trouver le bon matériel pour reprogrammer plus de puces de bios est peut-être plus difficile de trouver que les PC originaux fonctionnent ... Il existe une communauté amiga qui est probablement beaucoup plus amusante et soyez heureux de vous voir améliorer/peaufiner leur bios, par exemple en mettant du matériel moderne derrière les appels système hérités.

24
old_timer

Si vous voulez écrire un BIOS pour un ordinateur compatible IBM PC (ce que sont la majorité des PC de bureau aujourd'hui, mais avec plus d'extensions au jeu d'instructions CPU et quelques interfaces BUS différentes), je vous suggère de parcourir le IBM PC, IBM PC XT, et IBM PC AT Manuels de référence technique. En particulier le manuel IBM PC AT, car c'est ce que la norme de facto est.

Ces manuels contiennent une liste de programmes du BIOS complet qu'IBM a utilisé sur leurs ordinateurs et ils sont en langage assembleur. Vous devrez peut-être parcourir ces manuels un peu (en particulier le PC IBM AT one) 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 peuvent vous aider à démarrer.

1
SeanRamey

Le BIOS peut être écrit dans n'importe laquelle de vos langues préférées, bien que les langues de niveau inférieur vous donnent plus de contrôle. L'assemblage et le code machine sont presque les mêmes, la différence étant l'interface de microcode et ce que vous tapez, par exemple. pour le code machine, vous ne taperiez que 2 caractères et l'assemblage vous donnera des caractères alphanumériques. Ma chasse au BIOS personnalisé a commencé lorsque j'avais besoin d'un ordinateur pour démarrer toutes les quelques heures et que je n'ai trouvé aucun BIOS capable de le faire.

Pour flasher le BIOS, suivez les instructions du fabricant. Le BIOS a maintenant été remplacé par UEFI (pour plus de sécurité). Paiement: 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
Réf. instruction i386: 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
Réf. Jeu d'instructions Intel: https://software.intel.com/sites/default/files/managed/a4/60/325383-sdm-vol-2abcd.pdf

1
Zimba

FWIW Modbin est un programme DOS qui, comme son nom l'indique, modifie les images BIN spécialement pour les deux changements simples et assez extrêmes du code BIOS existant.

Si vous pouvez obtenir un vieux mobo (beaucoup sont jetés encore en fonctionnement), je vous encourage à jouer avec le BIOS. C'est instructif et amusant, si l'on est si enclin et si vous semblez l'être :) Il fut un temps où je téléchargeais des images du BIOS à partir de mobos qui avaient le même ou assez de chipsets similaires mais fabriqués par un autre fabricant ... parfois à un avantage considérable, y compris aussi simples que de continuer à obtenir des mises à jour du BIOS après que le fabricant d'origine de mobo a laissé tomber la balle ou est allé de haut en bas, mais aussi des fonctionnalités et des options et des modifications axées sur les performances.

Cela a conduit à "HOT Flashing" qui tire une puce de BIOS enchâssée de sorte que les broches viennent à peine d'entrer en contact et une fois démarrées, tirant celle-ci et remplaçant une mauvaise (souvent celle que j'avais soutenue) tout en continuant à exécuter et à la faire clignoter en utilisant la fonction BIOS mise en cache qui a maintenu le système actif. Des trucs amusants pour ceux d'entre nous de la persuasion geek et m'ont donné la confiance d'écrire des pilotes de périphériques pour OS/2

1
Jmes Hanley

Il existe des moyens de flasher le bios autrement que d'avoir le PC en marche peut-être. Mais cela nécessite du matériel. Cela ne devrait pas être très cher.

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

Cette conférence que j'ai vue aujourd'hui: https://conference.hitb.org/hitbsecconf2015ams/sessions/how-many-million-bioses-would-you-like-to-infect/

Il l'a expliqué plus en détail, bien que vous ne recherchiez peut-être pas une infection, certaines techniques pour accéder au bios sont couvertes, où le clip de programmation en fait partie.

0
hallo