Autor Thema: Bootsector Diskettte Formatieren?  (Gelesen 8678 mal)

najjannaj

  • Beiträge: 75
    • Profil anzeigen
Gespeichert
« am: 14. April 2004, 10:09 »
Hi,
Erstmal Super Magazin! Echt spitze! Für die Zukunft würd ich mir noch mehr Beispiele wie eine Konsole (Weiß das es das schon im ResourceCenter gibt aber wie binde ich das ganze ein??)!!
Jetzt zur Eigentlichen Frage! Hab den Bootloader geschrieben und er funktioniert eigentlich soweit das er sagt "File not Found." Weil auf der Diskette keine Kernel.bin vorhanden ist! Wenn ich aber jetzt eine auf die Diskette kopieren will, kommt immer "Diskette Foramtieren!" Hab den Bootloader mit rawrite auf die Diskette geschrieben und wie kann ich nun die Diskette so machen das ich da auch noch Daten draufbekomm, troz Bootlaoders????
Vielen Dank im Vorraus!
Mfg
najjannaj

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #1 am: 14. April 2004, 11:30 »
Du must das FAT Dateisystem auf der Disk beibehalten, wie soll ein OS sonst wissen, wo die FATs und anderen Tabellen sind und was für ein fs das ist. Am einfachsten ist, du die ersten bytes von einer neu FAT12-formatierten Disk übernimmst und die z.B. mit "db 0x34,0x56,...." in das Programm übernimmst. nur die ersten 3 Bytes musst du weglassen und "jmp start" dahinschreiben. start muss du durch den Bezeichner deiner Startroutine ersetzen. Wie viele Bytes das sind, die du Kopieren musst, steht in der Lowlevel Ausgabe über FAT12

najjannaj

  • Beiträge: 75
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 14. April 2004, 12:45 »
Das versteh ich nicht ganz! Kannst du mir erklären wie ich das zu schreiben hab! Ein Beispiel wär nicht schlecht! Kenn mich mit Assambler nicht so gut aus deshalb wäre ja der Bootloader das richtige! Ich versteh nicht wo und wie ich die Bytes auslesen soll! Und wo ich die dannach in meine *.asm einsetzen soll!
Danke trozdem!

Lizer

  • Beiträge: 28
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 14. April 2004, 12:47 »
Noch ein Tipp: Mir hat es früher, als ich noch mit FAT12-Disketten gearbeitet habe, geholfen, zuerst den Kernel auf die Diskette zu kopieren und _danach_ den Bootsektor draufzuschreiben.

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #4 am: 14. April 2004, 13:16 »
Lest ihr eigentlich die Tutorials? Vielleicht hab ich ja geschlampt, aber ich meine mich gut daran erinnernzu können das ich doch recht ausführlich beschrieben habe wie das FAT12 Dateisystem aufgebaut ist :|
----------------------
Redakteur bei LowLevel

najjannaj

  • Beiträge: 75
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 14. April 2004, 13:34 »
Ja, wie es aufgebaut ist schon! Aber nicht wie ich meinen Bootloader reinbekomm und das Dateisystem erhalten kann! Davon standt da nichts!

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #6 am: 14. April 2004, 13:38 »
TeeJay hat recht, aber nochmal:
Wenn du es dir einfach machen willst und das Dateisystem 1:1 wie format es macht haben möchtest kannst du das so machen:
Also du öffnest den Bootsektor der Disk mit einem Hex-Editor.
Bsp. unter Lin:
dd count=1 if=/dev/fd0 of=der_boot_sector
khexedit der_boot_sector

Die ersten Bytes 3 bis 61 (bei Null anfanden zu zählen; nach TeeJays Tabelle) kopierst du dann am besten im Hex-Format, also 0x23,0x46,...

Dann beginnst du mit dem Assembler programmieren:

jmp start
db ; Hier jetzt die Hex-Werte einfügen
start:
  ; der Code
  ; und dann noch der Schluss mit dem Magic-Key

Ales klar?

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 14. April 2004, 13:39 »
Du musst in mit Hexworks oder dd (linux) raufschreiben (den Bootloader) und dann den Kernel. Steht im "ein paar vorschläge" thread.

BigOlly

  • Beiträge: 88
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 14. April 2004, 21:47 »
Also eigentlich ist es doch ganz einfach:

1. Du formatierst Deine Diskette ganz normal unter DOS oder Windows.
   (Achte darauf das Du eine Fehlerfreie Diskette hast, also ohne defekte Sectoren)
2. Nun hast Du eine Diskette mit intakter FAT und Rootdir. usw.
3. Du spielst Deinen Kernel mit RawWrite auf die Diskette.
ABER :
- nur den 512 Byte großen Bootsector und
- der Bootsector (den Du geproggt hast und gerade drauf spielst) MUSS einen korrekten FAT12 BiosParameterBlock enthalten. Wenn du nach dem Tutorial verfahren bist dann ist der BPB korrekt.

DAS WARS...!
:)

Nun hast Du nämlich 2 Sachen:
1. ein korrektes FAT12 Dateisystem ab Sector 2
2. einen korekten BPB auf Sector 1.

Das ist zwar nicht 100%tig sauber, da die Diskette ja sozusagen von zwei verschiedenen Programmen formatiert wurde, aber funzen tut das trotzdem! Ich habs so gemacht.
Zumindest ist das der einfachste Weg. Du kannst natürlich auch einen kompletten FAT12 Treiber schreiben und die Diskette in einem rutsch inclusive Bootsector formatieren... :) aber das denke ich ist eine Aufgabe für "später" ;)
====================================================
Zitat: "Es ist schwierig zu antworten, wenn man die Frage nicht versteht."
(würde mich ja mal interessieren ob jemand weiß woher dieser Satz stammt...)

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #9 am: 14. April 2004, 22:05 »
Da das mit den Bootsectoren doch wohl immer wieder ein Problem ist, werde ich demnächst mal ein kleines Tool schrieben mit dem man bequem seinen Bootloader in den Sector 1 schreiben kann und dabei das FAT System erhalten bleibt.

PS: Mein Floppyemulator verschiebt sich auf Grund des Studiums leider etwas.
----------------------
Redakteur bei LowLevel

Limbo

  • Beiträge: 16
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 04. July 2004, 00:39 »
Moin !

Ich denke das Problem war (zumindest war es meins) einfach, daß TeeJays Bootloader-Code 515 Byte, und damit um 3 Byte für einen "normalen" Bootloader zu  
groß ist. Lässt sich auch gar nicht kompilieren, wegen Code in letzter Zeile bekommt man den Fehler : Times .... -3 is negative.

Wenn man nun, so wie ich (=Newbie=),  probiert diese 512 vor dem Times-Befehl
auf 512 in der letzten Zeile zu ändern, oder im Bios-Parameter-Block bei den Strings ein paar Leerzeichen zu löschen (im Bootloader-PDF-Dokument sind es nämlich auch ein paar weniger !!), dann lässt sich bootsec.asm zwar kompileren, aber wenn man dann den Bootloader auf die Disk schreibt ist die FAT halt hin, und man bekommt diese Formatierungsaufforderung.

Also, meine Lösung (wahrscheinlich gibts 'ne bessere, hab' hier nur noch keine gefunden ...) :

Einfach den String "File not Found" um 3 Zeichen kürzen.
Bootsec hat dann nach dem kompilieren die richtige Größe von 512 Bytes, dann mit Rawrite oder Hexworks auf die Disk schreiben, dann den Kernel draufkopieren,  
 und feddig.

Limbo

  • Beiträge: 16
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 04. July 2004, 00:50 »
Sorry,

6. Zeile 2. Wort sollte 515 sein (nicht 512) !

(Nachricht editieren geht leider nicht bei mir !?)

 

Einloggen