Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: matthieuriolo am 10. April 2005, 19:01

Titel: Irgendwie geht der bootloader nicht...
Beitrag von: matthieuriolo 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:
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: jeb 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
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: matthieuriolo 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...
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: DarkThing 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 .
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: jeb 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
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: TeeJay 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.
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: matthieuriolo 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:
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: elfish_rider am 11. April 2005, 11:05
Zu einem Image machen? Es ist ja schon ein Image. Einfach mit RaWrite schreiben.
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: matthieuriolo 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?
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: TeeJay 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.
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: DarkThing 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.
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: matthieuriolo 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?
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: DarkThing 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.
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: TeeJay 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.
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: matthieuriolo 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:
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: joachim_neu 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 ;)
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: matthieuriolo am 11. April 2005, 15:50
<nörgeln>assembler gehört verboten... </nörgeln>
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: Roshl am 11. April 2005, 16:41
<widersprechen> assembler rult alles an die wand</widersprechen>
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: DarkThing 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++.
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: matthieuriolo 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...
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: joachim_neu am 11. April 2005, 19:37
Zitat von: DarkThing
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++.


ja, ich zum beispiel gehöre zur manschaft der deppen, die es sich besonderst schwer machen, weil sie eigendlich masuchisten sind :D:D:D
(achtung, ironie!)
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: DarkThing am 11. April 2005, 19:43
Ist zwar stellenweise wirklich masochistisch (Filesystem & alles was Verwaltung braucht also Fenster bei GUI usw. stell ich mir schrecklich vor) aber der Kernel belegt viel weniger Speicher, ist schneller und wenn man mal was mit den Binärfiles zu tun hat findet man sich in denen stellenweise sogar zurecht.
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: matthieuriolo am 11. April 2005, 19:55
ich kanns mir ned wirklich vorstellen das C/C++ kernel grösser und langsamer sind... gibs da irgend eine erklärugn wieso? Sonst muss ich doch auch so nen machosischt werden  :lol:
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: DarkThing am 11. April 2005, 20:02
ASM ist fast genauso aufgebaut wie reine Maschinensprache (nur aufgebaut!), ein C Programm/Kernel hat praktisch keine Ähnlichkeit mit Maschinensprache (deshlab nenne man Sprachen wie C Hochsprachen). Der Compiler hat natürlich keine Vorstellung was der Code später tun soll, er übersetzt den Code einfach nur Zeile für Zeile. Es ist logisch das das nur sehr begrenzt gut geht, weshalb der Code langsamer und größer wird.
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: matthieuriolo am 11. April 2005, 21:08
Mir sind gerade ein (2) paar sachen aufgefallen... Ich wollte die nachricht ändern wo sagt das es fehlgeschlagen is... error. Weiss zwar wieso aber hilft ja nicht viel ;) nun hab ich am schluss staht times 512-blabla einfach mal times 1024-bla geschrieben ... haut super nicht hin :P und ich glaube das es daran liegt das er beim kernel laden irgendwie sich selber auflistet oder so was... aber sicher bin ich mir ned...   ?

Und noch was. Er sucht ja nach dem kernel ABER wieso "KERNEL BIN"? wieso nicht klein geschrieben und ein punkt dazwischen?
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: jeb am 11. April 2005, 21:13
schau dir mal das FAT12 tut von TeeJay an. Dort steht folgendes: Der name wird nach der altbekannten 8+3 konvention angegeben wobei der punkt nicht mitkommt. das FAT12 Dateisystem unterscheidet nicht zwischen Gross- und Kleinschreibung.

mfg, jeb
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: TeeJay am 11. April 2005, 21:36
Unterscheiden tut es in gewisser weiße schon. Die Dateinamen werden GROß in das Verzeichnis eingetragen. Der Treiber muss halt dafür sorgen das intern nur mit Großbuchstaben gearbeitet wird.
Titel: fat12
Beitrag von: linu(x)bie am 18. May 2005, 02:23
tach Leute

also ich hab mir mal die tuts von Teejay über das fat12 Dateisystem,
sowie über bootloader und kernel (lowlevel1) durchgelesen.

Und da brennen mir paar Fragen richtig krass auf der Seele:
1.)Wenn ich diesen (aus lowlevel1)bootloader und kernel auf die Diskette
mit rawrite (oder sonst was) schreibe, wird doch das Dateisystem (fat12) zerstört/überschrieben, oder?
2.)ich muss also einen Bootloader schreiben, welcher im Bootsector hinter den informationen des dateisystems [sector usw tabelle] steht, auf welchen dann der jmp befehl verweist?
3.)Bei den tut: "FAT12 Dateizugriff" ist doch solch ein bootloader (siehe 2.)
notwendig, oder? Schliesslich würde der 512byte grosse bootloder
(aus LowLevel1) den ganzen ersten (fat12-)bootsector überschreiben.

Falls die oberen Fragen/Behaubtungen stimmen gibts hier irgendwo bspcode solch eines bootloaders?
(wenn nicht, auch gut)

Für Eure Antwort wäre ich sehr dankbar

gruss :)
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: Another Stupid Coder am 18. May 2005, 18:07
Nein, der Bootsector wird vom Dateisystem nicht gebraucht, das wäre doch viel zu umständlich...
Titel: Irgendwie geht der bootloader nicht...
Beitrag von: __OS_coder am 19. May 2005, 15:21
Hi,

1st
Die Größe des Bootloaders wird mit der Zeile
Zitat
times 512-($-$$)-2 db 0

auf 512 Bytes gepaddet. -2 deshalb, weil die Bootsignatur 0xAA55 ja noch ans offset 510 muss. Du kannst den Wert net einfach auf 1024 abändern, da der Bootloader von Teejay so ausgelegt ist, dass er in einen sector, nämlich den ersten der diskette passt.

2nd
Der Filename lautet "KERNEL  BIN" und nicht "kernel.bin", weil die FAT-Namenskonvention es so vorgibT!!