2009-05-13 13 views
4

Ich schreibe einen Bootstrap und Kernel für mich und beide Bootstrap und Kernel wird auf einer CD-R brennen und wird als CD-Live funktionieren. Es ist kein Linux-CD-Live oder etwas anderes, ist mein eigener Bootloader und Kernel. Ich möchte keine anderen Booloader (d. H. GRUB) verwenden, also bitte schlage mir nicht vor, sie zu benutzen.So laden Sie Kernel von CD-ROM mit Assembly (NASM)

Hier ist meine Frage: In meinem Bootloader ASM-Code, ich möchte meinen Kernel und den Eintritt in den RAM von CD-ROM (nicht von der Festplatte oder Diskette) laden, und vermuten lässt, dass wir wissen, wo sich der Kernel genau auf der CD-ROM (Sektornummer) befindet. Soweit ich weiß, muss ich int 0x13, AH = 02h verwenden, die Sektoren von Drive in den RAM lesen wird. Um diesen Interrupt-Service zu nutzen, ich habe einige Register ziehen zu können, dass ich mich die Liste werden: Parameter: AL Branchen AH 02h CX Track + Sector Count To Read/Siehe Bemerkung DH Kopf DL Laufwerk ES: BX Buffer Address Pointer

Mein Problem ist über DL und DH.Um auf die 1. Festplatte zu zeigen, können wir es auf 80h setzen, oder für eine Diskette können wir es auf 00h setzen. Aber ich möchte von CD-ROM lesen und ich weiß nicht, welche Werte ich für DH und DL verwenden muss.

Um von CD-ROM paar Sektoren in in den RAM gelesen ist es eine richtige Interrupt (int 0x13)? Wenn ja, welchen Wert sollte ich für DH und DL angeben?

Grüße, Pooria.

Antwort

9

Damit das BIOS Ihren Bootsektor von CD lädt, müssen Sie die CD mit dem Standard "El Torito" bootfähig machen.

Sobald Sie das verwenden, haben Sie zwei Optionen
a. Emulation - das BIOS emuliert entweder eine Diskette oder eine Festplatte, und Sie können Ihren Kernel über die INT13-Aufrufe entweder mit dem Gerät 00 oder dem Gerät 80 lesen.
b. Das Gerät emuliert nicht, und Sie können direkt von der CD mit der INT13 ExtendedRead-Funktion lesen.

zu sehen, wie dies geschehen ist, an dem Lader "ISOLINUX" Linux finden - ISOLINUX.ASM

einen spezifischere Ausgangspunkt, um Ihre Frage zu liefern, spez El Torito, Abschnitt 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.