Autor Thema: 64kB-Problem [gelöst]  (Gelesen 2547 mal)

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« am: 20. April 2009, 20:35 »
Hallo,

Tja, mein Kernel nähert sich so langsam der 64kB-Marke (ist eben ein Monolith) und da tauchen die Probleme auf. Ich habe keine Ahnung, woran es liegen kann, mein Bootloader kann zweifellos über RealMode-Segmentgrenzen hinaus laden und das Restsystem läuft im ProtectedMode mit Paging, sollte also keine Probleme mehr mit diesen 64kB haben.

Also, die Probleme sind:
- Globale Variablen, die initialisiert werden (z. B.: "char *ConsoleBase = (char *)0x800B8000)") sind im Programm uninitialisiert.
- Unter QEMU gibt es einen TripleFault, wenn ich eine Zeile Code zusätzlich schreibe oder eine zusätzliche Variable einfüge (wo auch immer), entferne ich diese wieder, ist alles in Ordnung. Übrigens geht dem TripleFault ein Pagefault voraus, laut dem der Stack nicht gemappt sei.
- Gestartete Programme beenden sich zuerst mit einem Pagefault, starte ich sie später mit den gleichen Parametern noch einmal, ist alles in Ordnung.

Aber das wohl merkwürdigste ist, dass der Kernel noch gar nicht 64kB groß ist. Er hat bloß eine Größe von jetzt genau 62700 Bytes...
Bis jetzt habe ich ihn einfach dadurch klein gehalten, dass ich die Alignflags im Linkerscript entfernt (bzw. auf 1 gesetzt) habe, doch jetzt ist das alles ausgereizt.

Ich dachte, dass es an einem RealMode-Stack liegen könnte, der in den Kernel hineinwächst (der Kernel wird nach 0x10000 geladen, es hätte ja einen Stack bei 0x1000:0xFFFF geben können), doch dem ist nicht so (mein ProtectedMode-Stack liegt übrigens bei 0x4FFFFF). Der Bootloader überschreibt auch keine Daten des Kernels oder so.

Bis jetzt habe ich versucht, dieses Problem einfach - so gut es ging - zu ignorieren, doch das wird nun immer schwerer (neue Treiber sind unmöglich geworden). Ich hoffe, jemand von euch hat eine Ahnung, woran das ganze liegen könnte. :-P



P. S.: Bitte sagt mir jetzt nicht, dass das ein guter Zeitpunkt zum Umsteigen auf einen Microkernel wäre... :-D
« Letzte Änderung: 25. April 2009, 20:44 von XanClic »

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 20. April 2009, 23:39 »
Keine Sorge:  Mit Mikrokerneln hat das nichts zu tun.

Es ist allerdings Zeit auf einen ELF-Kernel mit GRUB als Bootloader umzusteigen.

Ansonsten solltest du sämtliche Annahmen überprüfen. Inklusive Bootloader. Wenn du außerdem so Symptome wie ungesetzte globale Variablen erkennst, dann kannst du ja evtl. mal nach Zusammenhängen suchen.
« Letzte Änderung: 20. April 2009, 23:49 von PorkChicken »
Dieser Text wird unter jedem Beitrag angezeigt.

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #2 am: 25. April 2009, 20:32 »
Guuut... Ersten Punkt ausgewählt (auf GRUB umsteigen) - und alles funktioniert. :wink:

Bisher hatte ich mich immer gegen GRUB gesträubt, weil es mein FS nicht unterstützt... Aber das ehemalige Image kann man ja gepackt als Modul laden lassen... :-D

Vielen Dank also!

P. S.: Unterschwelliger Tipp eventuell an matheguru: Das Umschreiben des Kernels für GRUB hatte ich in zwei Tagen fertig, und ich bin nicht der beste Programmierer... :-)
« Letzte Änderung: 25. April 2009, 20:36 von XanClic »

matheguru

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 26. April 2009, 10:04 »
Ja ich habe aber meine eig. Gründe GRUB nicht zu benutzen, daran liegt es nicht das es evtl. vieleicht etwas arbeit ist.
Hacker zu sein bedeutet mehr, als sich nur damit auseinander zu setzen, es ist eine Lebenseinstellung

 

Einloggen