Die Frage hängt mal wieder mit meinem kernel-Projekt zusammen.
Ich weiß nicht, ob ich mit meiner Vermutung, wie ich an die Größe meines Kernels komme richtig liege.
Aber ich hoffe schon.
Was ich machen will:
Ich möchte das Ende (die letzte Position im Speicher) des Kernels ausfindig machen.
Dazu hab ich mir überlegt: Das weiß doch der Linker.
Ich hab das irgendwo schon mal gesehen, ich finds nur leider nicht mehr (zu dumm, dass das Internet so groß ist...).
Ein Linkerskript sieht ja zum Beispiel so aus:
Code: Alles auswählen
ENTRY(start)
OUTPUT_FORMAT(elf32-i386)
SECTIONS
{
. = 0x100000;
.text :
{
*(.text)
}
.data :
{
*(.data)
*(.rodata)
}
.bss :
{
*(.bss)
}
__kernel_end = .;
end = .;
}
An diesen Wert muss ich rankommen.
So einfach wie
Code: Alles auswählen
unsigned long k_ende = __kernel_end;
Da wird mir gemeldet:
Ich hab auch schon versucht, "__kernel_end" zu deklarieren.Fehler: »__kernel_end« nicht deklariert (erste Benutzung in dieser Funktion)
Zum Beispiel per
Code: Alles auswählen
extern void *__kernel_end;
Funtioniert auch nicht.
Dann mekert der Linker, dass er "__kernel_end" nicht finden kann.
Also: Wie mach ich das?
Wie komm ich an diese Variable/Konstante/was-auch-immer "__kernel_end" ran?
MfG
Daniel