2011-01-10 8 views

Antwort

8

Der Kernel beginnt an einem festen Ort im virtuellen Adressraum eines Prozesses. Der Linux-Kernel befindet sich normalerweise [abhängig von Ihrer Systemarchitektur] in den oberen 1 GB des virtuellen 4-GB-Adressraums. Der Kernel für eine Systemarchitektur mit 3G/1G-Split beginnt also bei der Adresse 0xC0000000. Je nach Speicherabbild der Plattform wird dies einer physikalischen Adresse im physischen Speicher zugeordnet.

Die Datei system.map ist die Kernel-Symboltabelle. Es hat die Symbole zusammen mit ihren virtuellen Adressen aufgelistet. Um herauszufinden, wo diese Symbole in den Hauptspeicher geladen werden, subtrahiere PAGE_OFFSET [für 3G/1G-Systeme ist dies 0xC00000000] von der Symboladresse, um den Offset zu erhalten und diesen Offset zur physikalischen Startadresse des Kerns im physikalischen Speicher hinzuzufügen aus der Systemspeicherkarte ermittelt.

4

Es ist die virtuelle Kernel-Adresse. Das ist die Adresse des Symbols im Speicher, wenn man es aus der Sicht des Kernels betrachtet, der mit aktivierter Adressumsetzung läuft, d. nicht im Real-Modus.

Auf den meisten (?) Plattformen gibt es eine einfache Formel zum Umwandeln dieser Adressen in reale Adressen, dh. die tatsächliche Adresse im RAM, aber das muss nicht unbedingt der Fall sein.