Ich schreibe ein kleines Linux ladbares Kernel-Modul für die Version 2.6.32 läuft auf x86-64 SMP.Adresse der Per-CPU Variable
Meine Frage ist: gibt es eine Möglichkeit, den Offset der Adresse einer pro-CPU-Variable zu erhalten, die im Kernel deklariert wird. Mit Offset meine ich den Offset der Adresse von der Percpubase, die im gs-Register gefunden wird. Ich versuche speziell, den Offset der Variable current_task zu finden, die ein Zeiger auf die Task-Struktur der aktuellen Aufgabe ist, glaube ich.
Ich schaue auf arch/x86/include/asm/current.h, die die Funktion get_current() hat. Diese Funktion liest die Variable current_task per-cpu mit dem Makro percpu_read_stable. Soweit ich im Grunde erweitert in eine asm-Routine wie diese percpu_read_stable verstehen kann:
asm("movq %%gs:%P1, %0"
: "=r" (ret__)
: "m" (per_cpu__current_task))
Dies ist in arch/x86/include/asm/percpu.h. Ich möchte den Offset nach gs von meinem Modul lesen. Wenn ich versuche, einfach ein printk mit der Variablen per_cpu_current_task auszuführen, wird das Modul gelöscht.
Vielen Dank für Ihre Aufmerksamkeit!