Autor Thema: BootProg auf FAT-iso?  (Gelesen 2082 mal)

Al3x

  • Beiträge: 9
    • Profil anzeigen
Gespeichert
« am: 07. April 2010, 20:48 »
Hallo,

weil in meinen Kernel Bilder integriert sind, passt er nicht mehr auf eine Diskette. Also hab ich mir BootProg für FAT16 geholt und kompiliert, aber
nun möchte ich das nicht auf eine echte Festplatte kopieren, sondern auf ein Image (iso ist da doch richtig, oder?), weil ich das OS per VirtualBox emulieren möchte.

Doch wie erstelle ich ein FAT-Festplattenimage, auf dessen ersten Sektor der Bootloader sitzt?  :?

Wisst ihr dazu Rat?
Vielen Dank für evt. Hilfe!!

Svenska

  • Beiträge: 1 778
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 08. April 2010, 01:46 »
Hallo,

was du schriebst, klingt konfus.

Ein CD-Image ist eine ISO-Datei. Als Dateisystem wird dort iso9660 verwendet, kein FAT. Als Bootloader für CDs kannst du z.B. ISOLINUX (Teil des Syslinux-Projektes) benutzen oder andere. BootProg kenne ich nicht.

Ein Festplattenimage besteht aus MBR, Partitionstabelle und Partitionen mit Daten dahinter (Dateisystem z.B. FAT16). Erzeugen kannst du es beispielsweise mit ner DOS-Bootdiskette (FDISK und FORMAT) und Qemu (vllt auch VirtualBox, nutze ich nicht). Es gibt Unmengen an Bootloadern dafür, z.B. auch SYSLINUX (FAT16/32) oder EXTLINUX (ext2/ext3), beide aus dem gleichen Projekt.

Ein Diskettenimage besteht direkt aus dem FAT12-Dateisystem.

Ich glaube, ein einfacher Weg ist es, im VirtualBox einfach ein Linux (mit GRUB oder so) zu installieren und dann den Kernel in eine eigene Partition einbinden und - sofern du einen eigenen Bootloader nutzt - mit chainload zu laden. Falls dein Kernel multibootkompatibel ist, kann Grub den auch selbst laden.

Wenn ich am Thema vorbeigeschrieben habe, dann frag mal konkret nach, was du wünschst.

Hoffe, geholfen zu haben und Gruß,
Svenska

Al3x

  • Beiträge: 9
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 08. April 2010, 11:03 »
Aha, ich habe gar nicht daran gedacht eine Bootdiskette zu benutzen  :roll:
Nun hab ich irgendein (vhd, vdi, raw, vm2) Festplattenimage erstellt und per Bootdiskette formatiert. Danke, Svenska!

Doch wie bringe ich nun Dateien in das Image? Und wie schreibe ich den Bootloader (der als .bin vorliegt) auf die Platte.

Mein Ansatz wäre per Windows-Live-System zu booten und die Daten rüberzuschieben. Doch das ist ziemlich umständlich. Gibt es denn nicht ein Programm, das direkt aus dem Host-Betriebssystem auf das Image zugreifen kann? Ich habe nur Disk2VHD gefunden, das die gesamte Partition in vhd umwandelt. Und wie schreibe ich den Bootsektor?

Svenska

  • Beiträge: 1 778
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 08. April 2010, 12:42 »
Hallo,

Gegenfrage: Wie möchtest du deinen Kernel denn booten? Wie hast du es bisher gemacht? Skizzier mal deine Vorgehensweise.

Zumindest ich werd aus deiner Beschreibung nicht so wirklich schlau...

Unter Linux kannst du Dateisysteme loop-mounten, also in das Dateisystem einbinden. Für Festplattenimages musst du aber ausrechnen, wo das Dateisystem relativ zum Imagebeginn anfängt (da liegen ja noch Partitionstabelle etc. davor). Der Bootloader gehört nicht zum Dateisystem, bzw. wird nicht als Datei eingebunden. Du kannst ihn z.B. mittels Hexeditor reinkopieren.

Oder du erzeugst in deinem Assemblerfile, wo du den Bootsektor programmiert hast, gleich die Struktur des Dateisystems mit; dein Assembler spuckt dann keinen Bootloader mehr aus, sondern gleich ein Image...

Gruß,
Svenska

Al3x

  • Beiträge: 9
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 08. April 2010, 13:16 »
Bisher hab ich BootProg für Floppies genommen und in den ersten Sektor eines Floppy-Images kopiert. BootProg sucht dann nach dem Kernel, bestimmt seine Position und lädt ihn.

Der Kernel initialisiert Vesa 640*480*8 und beinhaltet ein Bitmap (300KB), das er dann lädt. Wenn ich aber 1024*768*32 habe, ist das Bitmap dann 2,25MB groß, weshalb es nicht auf die Diskette passt und auch nicht vom Bootloader mit dem Kernel geladen werden kann, weil der RealMode ja nur 1MB Speicher hat.  :cry:

Nun gibt es Bootprog auch für FAT16 und da dachte ich mir, dass ich dann Bootloader, Kernel und Bild auf eine FAT-Platte packe, der Bootloader den Kernel lädt und der wiederum von der Festplatte das Bild lädt und ausgibt.

Wenn ich nun das FAT-formatierte leere raw-Image öffne, erhalte ich für den MBR folgendes. Aber ich kann das doch nicht mit dem Bootloader ersetzen, da dann der Table weg ist.

Danke, dass du mir hilfst!

FA 33 C0 8E D0 BC 00 7C 8B F4 50 07 50 1F FB FC BF 00 06 B9 00 01 F2 A5 EA 1D 06 00 00 BE BE 07 B3 04 80 3C 80 74 0E 80 3C 00 75 1C 83 C6 10 FE CB 75 EF CD 18 8B 14 8B 4C 02 8B EE 83 C6 10 FE CB 74 1A 80 3C 00 74 F4 BE 8B 06 AC 3C 00 74 0B 56 BB 07 00 B4 0E CD 10 5E EB F0 EB FE BF 05 00 BB 00 7C B8 01 02 57 CD 13 5F 73 0C 33 C0 CD 13 4F 75 ED BE A3 06 EB D3 BE C2 06 BF FE 7D 81 3D 55 AA 75 C7 8B F5 EA 00 7C 00 00 49 6E 76 61 6C 69 64 20 70 61 72 74 69 74 69 6F 6E 20 74 61 62 6C 65 00 45 72 72 6F 72 20 6C 6F 61 64 69 6E 67 20 6F 70 65 72 61 74 69 6E 67 20 73 79 73 74 65 6D 00 4D 69 73 73 69 6E 67 20 6F 70 65 72 61 74 69 6E 67 20 73 79 73 74 65 6D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 01 01 00 06 0F 3F C9 3F 00 00 00 21 1B 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA

Svenska

  • Beiträge: 1 778
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 08. April 2010, 16:02 »
Hallo,

ich hab mal kurz BootProg angeschaut und soweit ich das jetzt einschätzen kann, lädt das Teil keinen Kernel, sondern ein DOS-Programm (COM oder EXE). Und zwar ohne das DOS drumherum.

Das heißt, dass du dich nach wie vor im Real Mode befindest. Da passt deine Bitmap nicht in den Arbeitsspeicher (du hast zwar 1MB Adressraum, aber nur knapp 640 KB RAM). Für den Zweck kannst du BootProg nicht einsetzen, soweit ich das einschätzen kann.

Es sei denn, du komprimierst die Bitmap und dekomprimierst sie direkt blockweise in den Grafikspeicher (für lineare Grafikmodi dürfte der Adressraum nicht ausreichen)...

Auf einem Festplattenimage hast du den MBR (448 Byte), gefolgt von der Partitionstabelle (64 Byte), gefolgt von meist unbenutzten Sektoren, gefolgt von der Partition.

Du kannst / solltest übrigens mehrere Bootsektoren unterscheiden: Der MBR sitzt in den ersten 512 Bytes der Festplatte und selektiert nur die aktive Partition heraus und startet diese; jede Partition kann dann selbst ihren eigenen Bootcode haben (muss dann nicht auf 512 Bytes begrenzt sein). Wenn BootProg auf einer Diskette sitzt, sitzt es also im Dateisystem - nicht im MBR!

Wobei ich nicht weiß, wie sich die FAT16-Variante von der FAT12-Variante dahingehend unterscheidet.

So, wie du es beschreibst, funktioniert es jedenfalls nicht.

Nutzt dein Kernel den Protected Mode oder bleibst du im Real Mode?

Gruß,
Svenska

Al3x

  • Beiträge: 9
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 08. April 2010, 16:09 »
Der Kernel lädt zuerst Vesa, A20, springt dann in den Protected Mode und lädt die Bitmap, die am Ende des Kernels integriert ist.
« Letzte Änderung: 08. April 2010, 16:12 von Al3x »

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #7 am: 08. April 2010, 18:02 »
Ich würde ja GRUB vorschlagen, das kann sogar gzipen, so dass dein Kernel eventuell doch auf eine Floppy passt. Ansonsten ist es wirklich einfach mit GRUB eine bootbare CD-ROM zu machen. Außerdem macht GRUB von Haus aus das mit dem Protected-Mode automagisch. Zu alle dem findest du haufenweise Informationen im Lowlevel-Wiki. :wink:

Aber ich schätze mal, man redet wieder gegen Wände. :|
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Svenska

  • Beiträge: 1 778
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 08. April 2010, 20:12 »
Dann wirst du dem Kernel wohl einen Dekompressor beilegen müssen.

Möglicherweise ist dein Kernel, der ja von BootProg als DOS-Programm geladen wird, schon quasi-kompatibel zu Syslinux. Dieses beherrscht nämlich COMBOOT und COMBOOT32 als ladbare Struktur...

Eine Kernelgröße (wie auf der Platte gespeichert) jenseits von ~600 KB ist nur mit genügend Aufwand machbar, im Zweifelsfall einem zwei- oder dreistufigen Bootprozess.

Ich würde ohnehin empfehlen, für den Bootprozess (also bis das System läuft) mich auf die unterste Stufe zu beschränken, also VGA16 oder Textmodus statt VESA. Zumindest für ein Allzweck-System.

Gruß,
Svenska

 

Einloggen