Autor Thema: Higher Half  (Gelesen 6317 mal)

Sannaj

  • Beiträge: 103
    • Profil anzeigen
Gespeichert
« am: 30. October 2013, 22:34 »
Ich würde gerne einen High Half Kernel schreiben. Wie krieg ich dann hin, dass die Addressen dann entsprechend Angepasst werden? Ich meine jetzt nicht, wie setzte ich das Paging auf, sonderen allgemein. Weil wenn ich im Link file andere Angeben mache denkt der Bootloader er müsste den Code wirklich an die hohen Addressen laden.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 31. October 2013, 00:15 »
Du kannst dem Linker mit dem AT-Befehl sagen an welche physische Adresse die ELF-Sektionen geladen werden sollen. Du kannst also den Kernel an die virtuelle Adresse 0xc0000000 linken, aber weiterhin nach 0x100000 laden lassen. Ein Beispiel dazu gibt es hier: http://wiki.osdev.org/Higher_Half_bare_bones. Allerdings unterstützt das nicht jeder Bootloader. Ich glaube der Multiboot-Loader von QEMU macht das nicht mit. Aber GRUB sollte so eine Datei wie gewünscht laden.

Alternative ist, dass du ein kleinen Bootstrapper schreibst, der vom Multiboot-Bootloader wie sonst auch nach 0x100000 oder so geladen wird. Der Bootstrapper macht dann nichts anderes als Paging aktivieren, und die Kernel-Binary, die als Modul übergeben wird, mit Hilfe eines einfachen ELF-Loaders an die gewünschte virtuelle Adresse zu laden.
Dieser Text wird unter jedem Beitrag angezeigt.

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 31. October 2013, 00:54 »
Sowohl der Multibootloader von QEMU als auch GRUB können das. MBLOAD.COM (für DOS) kann es nicht.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 31. October 2013, 01:00 »
Ah, dass wusste ich nicht. Das letzte Mal, dass ich das mit QEMU versucht habe, ist schon ein wenig her.
Dieser Text wird unter jedem Beitrag angezeigt.

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 31. October 2013, 01:02 »
Mein Kernel zeigt zwar nur die Memory-Map an, ist aber Higher-Half. :-D
Getestet mit: "Qemu emulator version 1.1.2 (Debian 1.1.2+dfsg-6a)"

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 31. October 2013, 01:10 »
Ich wollte gerade sagen, dass es wohl schon ziemlich lange her ist, dass ich das das letzte Mal ausprobiert habe. Aber anscheinend ist 1.1 nicht mal anderthalb Jahre alt. Also noch alles im grünen Bereich ;)
Dieser Text wird unter jedem Beitrag angezeigt.

 

Einloggen