Autor Thema: Bootsektor schreiben auf FAT12 Disk  (Gelesen 7908 mal)

schneida

  • Beiträge: 12
    • Profil anzeigen
Gespeichert
« am: 01. June 2008, 10:39 »
Hallo!

Nachdem ich mit meinem Triplex OS jetzt schon eine konsole habe und es befehle wie dir, type text.txt und ähnliches versteht, möchte ich meine Diskette  auf der sich der Bootloade befindet mit FAT12 formatieren und anschließend meinen eigenen Bootsektor und Kernel speichern, sodass der Bootloader nicht einfach von der Diskette lesen muss sondern anhand des Dateinamens den Kernel laden kann.

Wie mache ich das?

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 am: 01. June 2008, 10:55 »
Indem du die FAT12 Bootsektorstruktur in den Bootsektor einbaust, die kannst du zB der FAT32 Specification entnehmen oder aber haufenweise Tutorials zu diesem Thema. Wenn dein Bootsektor dann FAT12 konform ist, kannst du den einer FAT12 formatierten Diskette durch deinen ersetzten (ohne dass das Dateisystem kaputt geht). Insofern kannst du die Diskette ganz normal unter Windows öffnen und den Kernel draufkopieren.
Im Bootsektor musst du dann natürlich die FAT12 Dateisystemstruktur (auch in obigen Link oder haufenweise Tutorials) lesen und die Kerneldatei suchen, laden und anschließend ausführen.

edit: In Ausgabe 4 des Magazin findest du auch was dazu.
« Letzte Änderung: 01. June 2008, 10:57 von bluecode »
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

schneida

  • Beiträge: 12
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 01. June 2008, 14:01 »
Sprich also ich mach meinen Bootsektor Fat konform (wie muss ich noch nachschauen) und erstell damit eine *.img --> schreib diese mittels rawwrite auf die Disk und kann anschließend den Kernel dazukopieren.

Klingt bis auf den 1. Teil ja nicht so schwierig.

Danke für die rasche Antwort!

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #3 am: 01. June 2008, 15:17 »
Ich würd anstatt dem Image erstellen (das ist d00f wenn du unter Windows bist und nicht unix tools nutzt) einfach ganz normal unter Windows eine Diskette formatieren, dann den Bootsektor mit deinem überschreiben und anschließend ganz normal den Kernel draufkopieren.
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

schneida

  • Beiträge: 12
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 02. June 2008, 10:57 »
Ja aber wie ersetzt ich den Bootsektor? Auf den hab ich ja unter Windows keinen Zugriff.

Ich würde ja gerne Linux verwenden, allerdings kann ich darunter mein System nicht auf die Diskette speichern. Bin zu dumm für dd if=,... of... bs=... count=..

Korona

  • Beiträge: 94
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 02. June 2008, 12:06 »
Wenn du einfach den Bootsektor überschreiben willst unter Linux reicht einfach ein
sudo cat bootsector.bin > /dev/fda"
. Wenn du Dateien schreiben willst ist die Benutzung des Loopback Devices am einfachsten.

FreakyPenguin

  • Administrator
  • Beiträge: 301
    • Profil anzeigen
    • toni.famkaufmann.info
Gespeichert
« Antwort #6 am: 02. June 2008, 12:37 »
Alternativ könntest du auch den Fat-Teil im Bootsektor leben lassen und nur die ersten 3 Bytes mit einem Jump-Befehl ersetzen, der direkt hinter die Fat-Struktur springt. Diese müsste 62 (0x3E) Bytes lang sein, wenn ich richtig gerechnet habe:
org 0x7C00
jmp 0x7C3E
assemblieren mit nasm -f bin -o jmp.bin jmp.asm und auf die schon formatierte Diskette schreiben mit dd if=jmp.bin of=image

Beim eigentlichen Bootloader-Code musst du dann halt berücksichtigen, dass er von 0x7C3E an ausgeführt wird:
org 0x7C3E
; und hier kommt dein Bootloader hin
Assembliert wird das ganze wieder gleich wie vorher mit nasm -f bin -o boot.bin boot.asm und das Schreiben auf die Diskette geht diesmal so: dd if=boot.bin of=image bs=1 seek=62

Ich konnte das ganze jetzt allerdings nicht testen, also ohne Gewähr. ;-)

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #7 am: 02. June 2008, 16:27 »
Ja aber wie ersetzt ich den Bootsektor? Auf den hab ich ja unter Windows keinen Zugriff.
Mit partcopy sollte das gehen.
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

FreakyPenguin

  • Administrator
  • Beiträge: 301
    • Profil anzeigen
    • toni.famkaufmann.info
Gespeichert
« Antwort #8 am: 02. June 2008, 16:33 »
Wenn ich mich nicht irre gibt es auch einen dd-Port für Windows...
Hier: http://www.chrysocome.net/dd
Ob er was taugt weiss ich allerdings nicht.

Dort musst du dann halt of=\\.\a: angeben fürs Diskettenlaufwerk und nicht /dev/fd0.

schneida

  • Beiträge: 12
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 03. June 2008, 20:07 »
Danke für die vielen Antworten!

@FreakyPenguin: Dein Code hat irgendwie nicht funktioniert. Also ich habs mit der dd Variante für Windows ausprobiert und gleich nachdem ich den Jump gespielt eingespielt habe ging es nicht mehr!

Partcopy geht leider auf meiner X64er XP Maschiene nicht (muss mir wohl noch eine Virtuelle 32 bit Varianter erstellen).

Ich glaub aber ich hab jetzt eh schon eine Möglichkeit gefunden. Ich hab mir mit Rawwirte ein Image einer frisch Formatierten Diskette gezogen und mir mit einem HexEditor angesehen. Anschließend den Jump befehl durch meinen eigenen Ersetzt und ab 0x3E gelöscht. Die Diskette lässt sich unter Windows immer noch öffnen, lädt halt jetzt nichts mehr. Wenn ich jetzt noch hinten meinen Bootcode schreibe, dann müsste eigentlich alles gehen!

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 03. June 2008, 22:56 »
assemblieren mit nasm -f bin -o jmp.bin jmp.asm und auf die schon formatierte Diskette schreiben mit dd if=jmp.bin of=image
Das ist irrefuehrend, funktioniert so nur mit einer echten Diskette, nicht mit einem Image. Fuer letzteres braucht es dann noch ein conv=notrunc.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

 

Einloggen