Autor Thema: Irgendwie geht der bootloader nicht...  (Gelesen 9905 mal)

matthieuriolo

  • Beiträge: 226
    • Profil anzeigen
Gespeichert
« am: 10. April 2005, 19:01 »
Hallo zusammen
Der Anfänger sit zurück :D also ich habe mir von http://www.jay-code.de das bootloader tutorial geholt und... geht nicht ;) Wen ich neustarte kommt er zwar zu dem loader aber er wartet ungefähr 2 sekunden und startet neu. Egal ob ich nen kernel mit einpacke oder ohne...

Hier möchte ich auch noch gerade fragen wie und wo ein unterschied ist um einen bootloader auf einem anderen FAt system zu bauen. Und ich habe noch ein bisschen ein problem mit dem "zum kernel hüpfen".

Danke schön

PS: Habe zwar schon ne mail an den erfinder von den loader geschickt (TeeJay) aber das kam glaubs nie an  :roll:

jeb

  • Beiträge: 341
    • Profil anzeigen
    • http://www.jebdev.net
Gespeichert
« Antwort #1 am: 10. April 2005, 20:30 »
1. hast du auf der diskette eine datei kernel.bin im rootdir? wenn er die nicht findet rebootet er sowieso.
2. Hast du den Code abgetippt, kopiert oder einfach den fertigen code von der downloaddatei verwendet? Wenn nicht von der downloaddatei, code posten!!

mfg, jeb

matthieuriolo

  • Beiträge: 226
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 10. April 2005, 20:50 »
ou vielleicht liegt da der fehler... ich binde sie so zusammen: Copy boot.bin+kernel.bin os.img

Aber der coe is 1:1 der gleiche ;) Werde ihn aber wahrscheinlich noch modifizieren... wieso bootet der automatisch neu? is das im Code? Dann hab ich was grausam übersehen  :roll:

Und oft ist die rede von einem HexWorks.. wo finde ich das? Hab nur nen editor gefunden...

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 10. April 2005, 20:57 »
Ich glaub das war ein FAT12 Bootloader. Du musst nur die boot.bin mit Rawwrite oder so auf die Diskette schreiben und danach kernel.bin ganz normal per Explorer kopieren .

jeb

  • Beiträge: 341
    • Profil anzeigen
    • http://www.jebdev.net
Gespeichert
« Antwort #4 am: 10. April 2005, 20:59 »
Zitat
KernelNotFound:
   push   WORD MsgFileNotFound   ;Offset der "File not Found" Meldung auf den Stack pushen
   call   func_PrintString      ;Meldung ausgeben lassen
   add      sp, 2               ;1 Parameter vom Stack löschen


WaitForKeyToReboot:
   mov      ah, 0               ;Auf Tastendruck warten
   int      0x16

Reboot:   
   db      0xEA               ;Reboot
   dw      0x0000
   dw      0xFFFF   


Genau, das ist der FAT12Bootloader. Zur vergewisserung noch den Code zum Rebooten.

mfg, jeb

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #5 am: 11. April 2005, 01:02 »
Jo.
Du musst nur die boot.bin mit RawWrite auf die Diskette schreiben.
Die Kernel.bin wird ganz normal auf die Diskette kopiert.
----------------------
Redakteur bei LowLevel

matthieuriolo

  • Beiträge: 226
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 11. April 2005, 08:12 »
und wie? Also einfach nur boot.bin mit dem copy befehl zu einem img machen? Direkt kann ja rawwrite das ned.... oder?  :roll:

elfish_rider

  • Beiträge: 293
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 11. April 2005, 11:05 »
Zu einem Image machen? Es ist ja schon ein Image. Einfach mit RaWrite schreiben.

matthieuriolo

  • Beiträge: 226
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 11. April 2005, 12:23 »
Da lag der bug! Noch aus einem alten Tutoriall bin ich es mir gewöhnt die beide datei in ein .img zu verwandeln. Jetzt geht es jedenfalls wunderbar! aber paar kleine fragen hab ich immer noch...
1.Wie kann man nun eben nen loader für FAT16 und FAT32 machen?
2.Was für schnick schnack könnte man sonst noch so einbauen?  :twisted:
3.Wie machen die bootloader das man acuh andere systeme laden kann?

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #9 am: 11. April 2005, 12:35 »
1. FAT16 und FAT32 unterscheiden sich in recht wenigen Details. Diese kann man ebenfalls in dem FAT Dokument von Microsoft nachlesen. Man müsste zwar für das auslesen der FAT-Einträge wohl neue Funktionen schreiben, aber einiges bleibt auch gleich. Zum Beispiel die Directory-Einträge. Jedoch kann bei FAT32 das Root-Directory eine variable Größe haben.

2. Man sollte sich gut überlegen ob der Bootloader auch andere Systeme laden können soll, oder speziell nur das eigene OS. Wenn der Loader auch noch andere Systeme laden soll, dann sollte der Loader eigentlich wirklich nichts anderes machen als den Kernel in den Speicher laden und diesen starten. Alles weitere (PM Jump, GDT usw sollte der Kernel machen).

3. Es kommt ganz auf das System an. Siehe Punkt 2. Wenn ein System wenigstens halbwegs durchdacht ist, macht es so dinge wie PM-Jump usw erst im Kernel. Damit behält man sich dann auch vor das OS mit anderen Loadern laden zu können.
----------------------
Redakteur bei LowLevel

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 11. April 2005, 13:17 »
Ich lade in meinem Bootsector 2 Dateien: loader.sys & kernel32.sys. Danach springe ich zur loader.sys in der PMode, A20, Systemcheck usw. gemacht werden. Danah wird von dort kernel32.sys aufgerufen und die loader.sys wird nicht mehr benötigt.

matthieuriolo

  • Beiträge: 226
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 11. April 2005, 13:25 »
hm ok ... ich seh es schon ... langsam angehen :D noch etwas. Der bootloader is ja auch ein "programm" dieser sollte ja nachdem er den kernel geladen hat auch beendet werden. Tut er das oder hab ich da was in assembler nicht gesehen?

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 11. April 2005, 13:32 »
Wenn alles fertig geladen usw. ist springst du z.B. mit dem jmp-Befehl zum Kernel. Der Bootloader ist damit praktisch beendet weil der Kernel eingeltich nicht dorthin zurückspringt. Wenn man will kann man eine Endlosschleife hinter den Sprungbefehl stellen.
Beispiel aus TeeJays Bootloader:

ExecuteKernel:
 mov ax, 0x1000  
 push ax ;Segmentadresse an welcher der Kernel ist auf den Stack pushen
 mov ax, 0  
 push ax ;Offsetadresse des Kernels (0) auf den Stack pushen
 retf  ;Einen FAR-Rücksprung zum Kernel machen

Danch kannst du ein jmp $ schreiben.

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #13 am: 11. April 2005, 14:33 »
Der Bootloader wird ja nur anfangs benötigt um den Kernel zu laden. Danach kann der im Speicher einfach überschrieben werden.
Ein Programm beenden bedeutet eigentlich nur, das seine Daten aus dem Speicher "gelöscht" werden.
----------------------
Redakteur bei LowLevel

matthieuriolo

  • Beiträge: 226
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 11. April 2005, 14:49 »
hm ihr merkt sicher das ich noch ziemlich grün hinter den ohren bin  :P Was passiert wenn ein assembler code durchgelaufen wird, sprich keine schlaufen drin. Dann führt der prozi den "speicher" aus und damit hat es sich?!?


@darkthing: Huch du machst mir angst... wird der bootloader von TeeJay nicht beendet? Weil das is doch schon ein geschwindigkeits steigerung  :twisted:

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #15 am: 11. April 2005, 15:48 »
der prozi für immer den speicher aus. und wenn in dem speicher halt 0 ist, dann führt er das aus, bis er abkackt ;)
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

matthieuriolo

  • Beiträge: 226
    • Profil anzeigen
Gespeichert
« Antwort #16 am: 11. April 2005, 15:50 »
<nörgeln>assembler gehört verboten... </nörgeln>

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #17 am: 11. April 2005, 16:41 »
<widersprechen> assembler rult alles an die wand</widersprechen>
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #18 am: 11. April 2005, 17:12 »
Du solltest bedenken das ist Leute gibt die ihr OS zu 100% in Assembler schreiben! Aber du musst ja net so der Asm-Freak werden. Im Prinzip reicht es wenn du den Bootsector in Asm schreibst und auch verstehst (das wird oft unterschätzt). Den Rest machst du dann in C oder C++.

matthieuriolo

  • Beiträge: 226
    • Profil anzeigen
Gespeichert
« Antwort #19 am: 11. April 2005, 18:32 »
Genau das hab ich auch vor  :P wegen dem verstehen... *husthust* langsam langsam geht es  :roll: ich ackere im moment den loader durch um genau zu wissen was der macht...

 

Einloggen