2009-05-13 5 views
4

Je suis en train d'écrire un bootstrap et un noyau pour moi-même et bootstrap et kernel seront gravés sur CD-R et fonctionneront comme CD-live. Ce n'est pas un CD-Live Linux ou quelque chose d'autre, c'est totalement mon propre bootloader et mon propre noyau. Je ne veux pas utiliser d'autres booloaders (c'est-à-dire GRUB), alors ne me suggérez pas de les utiliser.Comment charger le noyau en mémoire à partir du CD-ROM en utilisant Assembly (NASM)

Voici ma question: Dans mon bootloader code ASM, je veux charger mon noyau et l'entrée du noyau dans la RAM à partir du CD-ROM (pas de disque dur ou une disquette), et laisse supposer que nous savons où le noyau se trouve exactement sur le CD-ROM (numéro de secteur). Autant que je sache, je dois utiliser int 0x13, AH = 02h qui va lire les secteurs de Drive in à la RAM. Pour utiliser ce service d'interruption, je dois mettre deux registres que je vais énumérer ci-dessous: Paramètres: AH 02h Secteurs AL Pour lire Count CX Piste + Secteur/Voir la remarque DH Head DL lecteur ES: BX Adresse tampon Pointeur

Mon problème concerne DL et DH.Pour pointer vers le premier disque dur à lire, nous pouvons le régler sur 80h ou, pour une disquette, sur 00h. Mais je veux lire sur CD-ROM et je ne sais pas quelles valeurs je dois utiliser pour DH et DL.

Pour lu à partir du CD-ROM deux secteurs dans la RAM est une interruption droite (int 0x13)? Si oui, quelle valeur dois-je mettre pour DH et DL?

Cordialement, Pooria.

Répondre

9

Pour que le BIOS puisse charger votre secteur d'amorçage à partir d'un CD, vous devez le rendre amorçable à l'aide de la norme "El Torito". Une fois que vous l'utilisez, vous avez deux options
a. Émulation - le BIOS émule une disquette ou un disque dur, et vous pouvez lire votre noyau via les appels INT13 avec le périphérique 00 ou le périphérique 80.
b. L'appareil n'émule pas et vous pouvez lire directement à partir du CD à l'aide de la fonction INT13 ExtendedRead.

Pour voir comment cela se fait, regardez le Linux "ISOLINUX" chargeur - ISOLINUX.ASM

pour fournir un point de départ plus spécifique à votre question, spécifications El Torito, section 5.3:

Once the system jumps to segment:0, the program can retrieve its boot 
information by issuing INT 13, Function 4B, AL=01. After the boot process 
has been initiated the INT 13 Extensions (functions 41-48) will access the 
CD using 800 byte sectors and the LBA address provided to INT 13 is an 
absolute sector number. This gives any program running in no emulation mode 
the ability to locate the boot catalog, and any other information on the 
CD, without providing a device driver. 
Questions connexes