Autor Thema: Booten ohne Multiboot-header  (Gelesen 6519 mal)

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« am: 29. September 2009, 20:11 »
Nabend zusammen,

ich habe mir überlegt, dass ich den Kernel nicht nur auf Multiboot-Bootloader optimieren möchte.
Habe mir dafür mal überlegt, was ich da alles beachten muss.
1. Speicher für die Hardware beachten
2. Speicher durch geladenen Kernel beachten
3. Wichtige Module mit in den Kernel linken. z.B. FS-Treiber

Auf was muss ich sonst noch so achten?
Gibt es eine Liste, die angibt welche Speicherbereiche reserviert werden müssen?

Danke.

Gruß
rizor
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 29. September 2009, 20:23 »
Die Speicherbereiche (also das, was dir GRUB als Memory Map übergibt) bekommst du vom BIOS, int 15h, ax=e820h. Wie groß der Kernel ist, kriegst du wie gehabt durch Symbole am Anfang und am Ende des Kernels hin, die durch ein Linkerskript eingefügt werden.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 29. September 2009, 20:33 »
Was genau steht denn in eax, wenn ich int 15h aufrufe?
Das geht aber nur, wenn ich im realmode bin, oder?
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 29. September 2009, 20:51 »
Das BIOS stellt Real-Mode-Funktionen bereit, ja. Deswegen hat man ja normal Bootloader, die das Zeug für einen machen. Wenn du es von Hand machen willst, such halt mal im Netz nach e820, da sollte das Vorgehen beschrieben sein.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

SHyx0rmZ

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 30. September 2009, 19:54 »
Siehe auch: http://wiki.osdev.org/Detecting_Memory_%28x86%29#Getting_an_E820_Memory_Map

Der Code hat mir bei Nuke sehr gut weitergeholfen (zumindest, bevor ich GRUB benutzt habe ^^).
@X="krJhbuaesrytre c a cnR.ohut";while@X[/(..)(.)/];@X=@X[3..-1]+$1;print$2;end
"Scheiß auf Perl, wir haben Kekse" - Emperor Ruby

DerHartmut

  • Beiträge: 236
    • Profil anzeigen
    • Mein Blog
Gespeichert
« Antwort #5 am: 30. September 2009, 20:42 »
Zitat
Der Code hat mir bei Nuke sehr gut weitergeholfen (zumindest, bevor ich GRUB benutzt habe ^^).

Und damit auf die gute Seite der Macht gewechselt bist ;)
$_="krJhruaesrltre c a cnp,ohet";$_.=$1,print$2while s/(..)(.)//;
Nutze die Macht, nutze Perl ;-)

 

Einloggen