2016-12-20 9 views
0

Ich studiere Betriebssystementwicklung. Ich habe kürzlich gelesen, dass die Festplatte mit 80h und so weiter bezeichnet wird. In einem MBR muss der MBR jedoch mehrere Festplatten erkennen, von denen er startet.Wie erkennt man die Verfügbarkeit mehrerer Festplatten?

Wie wird das gemacht? Wie kann man die Verfügbarkeit von mehreren Festplatten erkennen und zu und von ihr wechseln?

Ich verwende:

Ubuntu

Gas Assembler

Hinweis: Ich möchte die Antwort in Assemblersprache während Realmodus eines Systems.

Danke.

+2

Der MBR erkennt die Erkennung nicht ... Das BIOS erkennt das erste Gerät in der Startreihenfolge mit einem gültigen MBR. –

Antwort

3

Der Titel und der Körper Ihrer Frage fragen zwei verschiedene Dinge.

In Bezug auf, wie ein Bootloader-Programm oder ein IPL (Initial Program Loader) in besseren Bedingungen erkennt, welches Gerät zu booten Sie können check this specification zu sehen, dass in Abschnitt 6.5.1 heißt es

Dies ist so dass, sobald der Boot-Handler hat erfolgreich das Gerät Boot-Sektor in dem Speicher an der Adresse 0000 geladen: 7C00h, Ausführungssteuerung kann mit den folgenden Registerinhalten übertragen werden:

  • ES: DI = Zeiger auf PnP Installation überprüfen Struktur
  • DL = Laufwerksnummer für den INT-13h verwendet (00h, 80h, usw.)

So wird die IPL der Treiber-Nummer des Gerätes gegeben wurde geladen aus.
Das IPL kann es dann mit INT13h verwenden, um einen Bootloader der zweiten Stufe zu laden.

Einfach gesagt, wenn Sie einen MBR Bootloader schreiben, können Sie die Treibernummer in dl finden, überschreiben Sie es nicht, bevor Sie es speichern.

;Simple snippet that load one sector from the booting device 

mov ax, LOAD_SEG 
mov es, ax 
mov bx, LOAD_OFF   ;ES:BX = Where to load the data 
mov ax, 0201h    ;AL = How many sectors 
mov cx, 0001h    ;CX = Cylinder and sector 
xor dh, dh     ;DH = Head, DL = Driver number (As given by the BIOS) 
int 13h 
jc _handle_err 

Sie sind besser dran, die INT13h extensions anstatt die INT13h mit sich selbst, wenn auch für pädagogische Zwecke dieser einfacher ist.


Wenn Sie einen VBR Bootloader schreiben dann technisch Sie selbst sind, gibt es keine Standardschnittstelle zwischen dem VBR und dem Code MBR.
Allerdings gibt jeder MBR-Bootloader dem VBR-Bootloader mindestens die Treibernummer (immer noch dl) Weitere Metadaten werden normalerweise übergeben, aber solche Daten sind proprietär.


Was tun, wenn der MBR/VBR-Code wird GRUB bis zum Programmierer, beispielsweise geladen ist, hat eine hartcodierte LBA (während der Installation geschrieben).
Diese LBA wird verwendet, um die zweite Stufe unter Verwendung der Treibernummer aus dem BIOS zu laden. Die zweite Stufe hat einen kleinen Dateisystemtreiber, der verwendet wird, um anhand ihrer Pfade die Konfigurationsdatei des Kernels zu lesen.

Das Ende der Zeile ist, dass der Bootloader irgendwie wissen muss, wo der Rest des Codes zu laden ist.

Dies wird normalerweise erreicht, indem einige Metadaten in das Binärbild des Bootloaders geschrieben werden, bevor sie auf die Festplatte geschrieben werden. Eine andere Strategie basiert auf dem MBR-Code, um die Partitionsnummer/Start zu übergeben, so dass, wenn die zweite Stufe eine feste Anzahl von Sektoren vor der ersten Stufe gesetzt wird, der Bootloader weiß, wo er sich auf der Platte befindet und daher wo der zweite Bühne ist.

Apropos Metadaten führen uns zum BIOS Parameter Block.
Trotz des Namens wird es nicht vom BIOS erstellt, sondern ist das Ergebnis des Installations-/Formatprozesses eines Betriebssystems.

Es ist für benutzerdefinierte Lader nicht unbedingt notwendig ist, wurde aus zwei Gründen verwendet:

  1. Es enthält die Geometrie des Fahrers.
    Für Disketten war dies wichtig, da die Software dem FDC die zu verwendende Geometrie mitteilen musste (d. H. Wie groß ein Sektor war).
    Nun wird dies aufgrund der 4KiB Sektor-HDDs wieder relevant.
  2. Es enthält die Informationen, um das Dateisystem zu finden.

Einige BIOS übernehmen das Vorhandensein eines BPB und möglicherweise versuchen, dieselben Werte flicken, vor allem, wenn das Booten von USB, so dass es eine gute Idee ist, tun, um zumindest einen DOS 3.31 BPB wie NT Bootloader.


Im Allgemeinen ist das erste, was ist das Layout einer Partition zu tun entscheiden, schließt dies den FS-Typen und das VBR-Format.
Das allgemeine Format ist

+------------+------------------------------------+ 
| boot block |    FS block    | 
+------------+------------------------------------+ 

einige Leerzeichen am Anfang der Partition für den Bootloader-Code vorbehalten ist, der VBR einen Zeiger auf den FS-Block enthält.
Der Bootloader kann den Kernel direkt laden, wenn der FS einfach genug ist (dies kann bei Spielzeug-Betriebssystemen der Fall sein) oder er hat spezielle Unterstützung, wodurch der Bootblock nur auf den ersten Sektor verkleinert wird.

Alternativ lädt der Bootloader eine zweite Stufe, die einen minimalen, aber allgemeinen FS-Treiber hat, um den Kernel nach dem Namen zu lokalisieren.

Noch allgemein gesprochen ist der VBR-Code nicht völlig unabhängig vom FS-Typ des Volumens.
Um beispielsweise GRUB auf einer NTFS-Partition zu installieren, müssen Sie eine spezielle Version davon verwenden, GRUB4DOS, die nicht die klassische zweite Stufe verwendet.

+0

Danke. Was ist mit den Werten von BPB? Sie unterscheiden sich von Gerät zu Gerät ri8? –

+0

Die Frage gehört meinem Freund hier http://superuser.com/questions/1158589/how-to-get-values-for-bios-parameter-block-in-a-vbr. Bitte hilf ihm, wenn du kannst. Vielen Dank für Ihre Antwort –

+0

@BijuRakhul Wikipedia macht bereits einen guten Job bei der Erklärung der Felder der BPB. Wie gesagt, BPB wird verwendet, um den FS zu finden und die Geometrie des Geräts zu definieren.Der Geometrieteil ist nur für Disketten relevant (Festplatten haben eine feste Geometrie, die Sie bei der Überprüfung der BPB auf Ihrer Festplatte finden können) und der FS-Teil nur für NTFS und FAT. Die meisten BPB sind behoben, wieder nur zwei USB-Sticks formatieren zum Beispiel, um zu sehen, was los ist :) –

Verwandte Themen