Autor Thema: Multibootstruktur funktioniert nicht  (Gelesen 8067 mal)

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #20 am: 13. December 2008, 11:40 »
Nur um das klarzustellen:
Du machst in deinem Assembler-Teil:
push ebx
push eax
call kernel_entry

Die Funktion kernel_entry hat in C die folgende Deklaration:
void kernel_entry(unsigned int magic, struct multiboot_info* mbi)
Mit argv machst du da eigentlich nichts, ausser du weisst was du tust. ;-)

Genau so sieht es aus.
Leider behebt das immer noch nicht meinen Fehler.
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #21 am: 13. December 2008, 14:24 »
hast du die betreffenden bereiche 1:1 gemapped? sonst musst du die ganzen pointer ja noch anpassen.
Physisch. Da ist noch kein Paging im Spiel.

Wow. Für mich war immer Physisch = Paging :oops:
Dann fällt das als mögliche Ursache wohl weg. Außer die basis des Datensegments != 0.( Eine GDT sollte ja auf jeden Fall schon vorhanden sein )
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #22 am: 13. December 2008, 14:50 »
Ich habe das Problem "gelöst".
Das Problem lag an der Array-Schreibweise.
Weiß nicht wieso. aber wenn ich dann den Pointer immer inkrementiere funktioniert es (glaub ich)
Was sollte rauskommen, wenn ich beim Qemu einen RAM von 128 wähle?.
Meine Debug-Ausgaben liefern folgende Werte:
Größe der Bitmap: 0x00000FFE
Größe des Speichers: 8184
Startstelle der Bitmap: 0x00000000
Die Größe des Rams habe ich wie folgt berechnet:
Größe der Bitmap * Anzahl an Bits pro Block * 8

Kann das sein?
Zumindest werden die Werte immer größer, wenn ich beim Qemu den RAM erweitere.

Wie kann ich am einfachsten testen, ob der Speichermanager jetzt richtig funktioniert?
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

 

Einloggen