2009-02-14 1 views
5

Ich habe kürzlich einige Bootstrap-Code untersucht, der für die Verwendung mit einem Diskettenlaufwerk gedacht war. Mein Ziel ist es, das Programm so zu modifizieren, dass es meinen USB-Stick benutzt. Jetzt sehe ich, wie die INT 13H-Funktion mit dem Diskettenlaufwerk verwendet wurde, aber ich denke, meine Frage ist, wie wird sich die Kommunikation mit dem USB-Laufwerk unterscheiden?Wie führe ich Low-Level-IO mit einem USB-Flash-Laufwerk unter dem BIOS (im Vergleich zu einer Diskette)?

Zum Beispiel, hier ist ein Ausschnitt aus der Floppy-Code (GNU Assembler):

movb $0x00,%dl  /* select 1st floppy */ 

    /* later */ 

    movw sec,%cx  /* get sector number */ 
    movw head,%dx /* get head number */ 

    movw $0x0201,%ax /* read 1 sector */ 
    int $0x13 

Nun habe ich gelesen, dass 0x80 in% dl bewegt, wird die erste Festplatte im BIOS auswählen. In meinem speziellen BIOS kann ich die Laufwerksreihenfolge ändern, die ein USB-Laufwerk enthalten würde. Ich bin mir ziemlich sicher, dass dies BIOS-abhängig wird, aber ich dachte, dass die im BIOS aufgelistete Reihenfolge dem Wert entsprechen könnte, den ich in% dl verschiebe. Ich muss etwas Dokumentation aufspüren ...

Ich bin wirklich nicht vertraut mit der Arbeit mit Block-Geräten, wie es ist, kann mir jemand auf einen guten Ort zeigen, um mehr zu lernen?

Danke!

Antwort

0

Das Flash-Laufwerk ist nur verfügbar, wenn das BIOS dies unterstützt. Und wenn es so wäre, würde es dich wahrscheinlich schon davon booten lassen. Der Großteil davon wird durch Emulation erledigt, daher sind die Aufrufe zum Booten des Flash-Laufwerks wahrscheinlich dieselben.

Ich habe die Boot-Blöcke von meinen USB-Sticks verloren und habe sowohl Disketten- als auch Festplattenformate gefunden.

Vielleicht sollten Sie einfach eine Reihe von Nummern für den Zugriff auf die Laufwerke versuchen und sehen, welche antworten.

Ich denke, Google ist dein Freund hier. Beginnen Sie mit "INT 13H". Und stellen Sie weitere Fragen.

4

Die einfache Antwort ist, dass, wenn das BIOS vom USB-Stick booten kann, die gleichen BIOS-Funktionen für Disketten-/Festplattenzugriffe verwendet werden können.

Die glückliche Antwort ist, dass eine einfache Technik, der gleiche Boot-Sektor-Code ermöglicht ein Floppy-Disk-Image auf einem USB-Flash-Laufwerk zuzugreifen, ob es mit Floppy-Disk-Emulation oder Festplatte Emulation gestartet wurde. Wenn dl = 80h (Festplatte Emulation)

GET Antriebsparameter
int 13h, ah = 8
Return:
ch = maximale Sektornummer (gleiche wie Anzahl der Sektoren pro Spur)
dh = maximale Kopfnummer (nur 1 hinzufügen Anzahl der Köpfe zu bekommen)

Diese zurückgegebenen Informationen beschreiben die Geometrie der emulierten Gerät (wenn dl = 0, dann ist es Standard-Floppy-Disk-Geometrie - 18 Sektoren pro Spur und 2 Köpfe).Dies kann dazu verwendet werden, um die erforderlichen Cylinder Head Sector Informationen für erforderlich zu berechnen:

READ SECTOR (S)
int 13h, ah = 2

und

WRITE SECTOR (S)
int 13h, ah = 3

See Ralf Brown's Interrupt List - int 13h

Siehe meinen Beitrag hier: USB Booting Secrets

+0

OK, mit einer Art von revisited sah ich einen Code (Arbeitscode), der explizit dl = 0x00 lädt, obwohl es einen USB-Stick verwendet. Jetzt denke ich, dass dies BIOS-abhängiges Verhalten ist, vielleicht erlaubt es Ihnen ein anderes BIOS nicht, ein Flash-Laufwerk als eine Diskette zu behandeln. –

+1

Es ist möglich und bequem, ein FAT12-Disketten-Image von einem USB-Flash-Laufwerk auf einem beliebigen BIOS/einer beliebigen Version, die von einem USB-Flash-Laufwerk startet, zu booten und auszuführen. Der dl-Wert muss verwendet werden. Selbst wenn dl = 80h (was bei allen späten Modell-BIOS/Versionen der Fall sein wird), kann die Festplatten-Geometrie, die von Int 13h neu abgestimmt wurde, ah = 8 verwendet werden. Das 1,44-MB-Format, obwohl restriktiv, ist für den Anfang und ist universell. –

3

Wenn das BIOS „sieht“ das USB-Gerät als Festplatte wird es eine Nummer zuweisen. Die zugewiesene Nummer beginnt bei 0x80 für die erste Festplatte, 0x81 für die zweite usw. Je nachdem, wie viele Festplatten installiert sind, ist Ihr USB-Laufwerk bei 0x81 oder höher. Wenn Sie die Reihenfolge im BIOS ändern, ändert sich auch die Nummer des USB-Laufwerks.

+0

Wirklich geholfen. Auch nicht, dass einige BIOS das Flash-Laufwerk 0x80 direkt beschriften, laut [meine Frage] (http://stackoverflow.com/questions/4703595/nasm-load-code-from-usb-drive). – new123456

+0

Eher, ** Hinweis ** (der Bearbeitungsschaltfläche ist auffällig abwesend). – new123456

Verwandte Themen