Speicherverwaltung

Algorithmen, Sprachunabhängige Diskussionen zu Konzepten, Programmiersprachen-Design
Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Speicherverwaltung

Beitrag von cloidnerux » Mo Dez 22, 2008 11:40 am

ähm, wieder ich.
Habe jezt soweit alles fertig,
nur mit dem zusammenspiel von linkerscript und C-kernel hapert es.
Ich muss im linkerscript also am ende irgendein Bezeichner eintragen ungefär so:

Code: Alles auswählen

...
kernel_end = .;
...
und im Kernel nurnoch irgendwo

Code: Alles auswählen

unsigned int __kernel_end;
oder so.
Richtig?
oder muss ich die variable als extern deklarieren?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Speicherverwaltung

Beitrag von Dirty Oerti » Di Dez 23, 2008 4:57 pm

Die Variable auf jedenfall als extern deklarieren.
Die Variable auf keinen Fall benutzen.

Die Adresse die du brauchst ist die Adresse der Variablen!

Code: Alles auswählen

kernel_end = .

Code: Alles auswählen

extern unsigned int kernel_end;
unsigned int address = (unsigned int)&kernel_end;
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Speicherverwaltung

Beitrag von cloidnerux » Di Dez 23, 2008 8:32 pm

danke thx.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Speicherverwaltung

Beitrag von cloidnerux » Di Dez 23, 2008 8:58 pm

So habs compiliert und wils starten über qemu -fda aeris.img
sehe das grubfenster, starte mein os, und sehe dann folgendes:

Code: Alles auswählen

Booting 'aeris'
kernel /kernel.bin
[Multiboot-elf <irgendwelchezahlen]
Und sonst nichts
Was ist da los?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Speicherverwaltung

Beitrag von Dirty Oerti » Di Dez 23, 2008 10:59 pm

Genau das, was da steht.
Das sind Ausgaben von GRUB, wo da steht "Starte Eintrag 'aeris' ".
Dann sagt dir GRUB noch, wo der Kernel, der zu dem Eintrag gehört liegt und gibt dir noch die Multibootinfos auf den Bildschirm aus.

Dann übergibt GRUB an deinen Kernel und der tut wohl nichts...
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Speicherverwaltung

Beitrag von cloidnerux » Mi Dez 24, 2008 1:57 pm

Dann übergibt GRUB an deinen Kernel und der tut wohl nichts...
Was heißt das?
Landet der kernel in einer Endlosschleife oder was?
oder kann es ein, das der Assemblerteil garnicht erst den C-Code aufruft??
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Jside
Beiträge: 377
Registriert: Di Nov 11, 2008 12:56 am

Re: Speicherverwaltung

Beitrag von Jside » Mi Dez 24, 2008 2:30 pm

Sieht für mich so aus, alsob etwas beim linken schiefgegangen ist, und GRUB den Entrypoint nicht erkennt/findet....

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Speicherverwaltung

Beitrag von cloidnerux » Mi Dez 24, 2008 4:33 pm

uand was kann schief gegeangen sein?

Code: Alles auswählen

ENTRY (loader)

SECTIONS{
    . = 0x00100000;

    .text :{
        *(.text)
    }

    .rodata ALIGN (0x1000) : {
        *(.rodata)
    }

    .data ALIGN (0x1000) : {
        *(.data)
    }

    .bss : {
        _sbss = .;
        *(COMMON)
        *(.bss)
        _ebss = .;
    }
	kernel_end = .;
	end = .;
}

Das ist das linkerfile.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Speicherverwaltung

Beitrag von Dirty Oerti » Mi Dez 24, 2008 5:41 pm

Nein, beim Linken ist nichts schief gegangen.
Wenn GRUB ein Problem hätte, dann würde es sich schon beschweren und eine Meldung geben.

Am besten fügst du in deinem Code einfach an vielen Stellen kleine Ausgaben ein und schaust, wie weit der Kernel kommt.

Wo der Fehler liegt kann dir nämlich so einfach mal eben keiner sagen :)
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Speicherverwaltung

Beitrag von cloidnerux » Sa Dez 27, 2008 5:43 pm

Hab jezt alles fertig, starte, bekomme meinen Bildschirm, es geht alle sgut, bis zur stelle wo ich meine Pagetable initialisieren möchte

die pagetable sieht so aus:

Code: Alles auswählen

unsigned long page_table[1024[1024];
und ihc versuche sie so auf 0 zu Initialisieren:

Code: Alles auswählen

memset(&page_table, 0, 1024*1024*sizeof(unsigned long));
Ab da spuckt mein System Doublefault aus => es ist irgendwas schiefgegeangen
und wir eingefrohren (das ist normal).
Gibts dafür einen grund?
Kann es sein, das es bei zu wenig Speicher probleme gibt?
ich starte das Image ja mit Qemu, und er weißt Aeris ja einen bestimt großen Speicher zu.
Kann es sein, das Qemu nur ca. 1 MB oder so bereithält?
Wenn ja, wie kann man das ändern?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Antworten