So, jetzt mal was ganz anderes. Auch wenn es nichts mit C zu tun hat, so habe ich keine Lust ein neues Thema auf zumachen. Also folgendes: Ich bin gerade dabei die physikalische Speicherverwaltung fertig zu machen. Ich habe eine memory bitmap, in der jedes Bit für eine 4 KByte Page steht. Ist das Bit gesetzt, so ist die Page belegt, ansonsten ist sie frei. Alles wunderbar, funktioniert auch soweit. Ich gehe so vor: Erstmal setze ich alle Bits, dann werden die gelöscht, die nach der mmap gelöscht sein sollten. Dann werden die gesetzt, die die Pages der Module wiederspiegeln, dann werden die gesetzt, die den Ort der memory bitmap wiederspiegeln (wenn ich das jetzt mal so ausdrücken darf). Tja und zuletzt würde ich gern die Bits setzten, die den Kernel betreffen. Der fängt ja bei 1 MByte an. Nur dazu müsste ich die genaue Größe des Kernels wissen. Und da ist schon das Problem. Wenn ich in meiner kernel.asm folgendes schreiben würde
...
section '.bss'
rb 0x10000
kstack: ;Stack wächst nach unten
kernel_end ;Ende des Kernels
und dann einfach kernel_end minus 1 MByte, dann hätte ich ja "eigentlich" die Größe des Kernels. Nur halt, C speichert lokale Variablen doch in der Section bss ab, oder? Also zumindest weiß ich, dass mein Kernel bei kernel_end nicht zu ende ist. Tjo, also wie bekomme ich jetzt die tatsächliche Größe meines Kernels raus? Eine Möglichkeit wäre ja sich den ersten Eintrag des Moduls vorzunehmen und sich dort multiboot_module->start
anzuschauen. Dort beginnt ja das erste Modul. Nur kann man darauf vertrauen, dass es wirklich direkt hinter dem Kernel ist (also bei mir jetzt ja, aber ist es auch IMMER so?). Also ich wäre euch sehr dankbar wenn ihr mir da helfen könntet.
Ach ja, aber dass die Startadressen der Module ein Vielfaches von 4 KByte sind, darauf kann man doch vertrauen, oder (auch) nicht?
thx
bitmaster