Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: yoda am 10. April 2012, 12:18
-
Hallo,
ich habe jetzt eine weile im Real Mode herumexperimentiert und habe jetzt angefangen einen Multiboot Kernel zu bauen. Dieser wird auch von Grub2 erkannt, aber ich scheitere einfach an der Textausgabe. Wenn ich von dem Assemblerteil in den C-Teil springe, dann müsste ich doch mit folgendem Code ein hellblaues A auf den Bildschirm schreiben können:
unsigned short* video = (unsigned short* )0xa8000;
*video = (((unsigned short )3) << 8) | (unsigned short )'a';
Ich schreibe übrigens an die Adresse 0xa8000, weil der Kernel nach dem Laden ja bei 0x10000 liegt. Wenn ich das dann aber in Virtualbox ausprobiere, dann startet Grub das System, und nichts passiert. Hat jemand eine Idee?
-
Ich schreibe übrigens an die Adresse 0xa8000, weil der Kernel nach dem Laden ja bei 0x10000 liegt. Wenn ich das dann aber in Virtualbox ausprobiere, dann startet Grub das System, und nichts passiert. Hat jemand eine Idee?
Wo dein Kernel liegt ist irrelevant. Wenn ich das richtig verstanden habe, hast du die GDT noch nicht angepasst und Paging auch noch nicht eingeschaltet. Damit ist die Basis der Segmente bei 0 und alle Adressen werden 1:1 als physische Adressen übernommen. Du landest also mit 0xa8000 nicht bei 0xb8000 wo du hin willst sondern bei 0xa8000.
-
Danke, erstmal. Aber ich hab's auch schon mit 0xb8000 ausprobiert und ich dachte, dass grub die GDT so initialisiert, dass man mit der Adresse 0 bei 0x10000 landet. Andere Ideen? :?
-
0xb8000 ist aber richtig. Multiboot garantiert dir Basis 0 und Limit 4 GB für alle Segmente (oder jedenfalls für alle Segmente, für die es was garantiert - bei fs und gs bin ich mir unsicher).
Dein Kernel landet übrigens ziemlich sicher nicht bei 0x10000 (64k), da würde GRUB nämlich nicht mitmachen. Wahrscheinlicher ist 0x100000 (1 MB).
-
Wenn du das
[…]ich dachte, dass grub die GDT so initialisiert, dass man mit der Adresse 0 bei 0x10000 landet.
Dann linkst du das vermutlich auch falsch. Hast du das Tutorial schon gelesen?