Lowlevel
Lowlevel => OS-Design => Thema gestartet von: Sannaj 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.
-
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.
-
Sowohl der Multibootloader von QEMU als auch GRUB können das. MBLOAD.COM (für DOS) kann es nicht.
-
Ah, dass wusste ich nicht. Das letzte Mal, dass ich das mit QEMU versucht habe, ist schon ein wenig her.
-
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)"
-
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 ;)