我正在为在 x86-64 SMP 上运行的 2.6.32 版编写一个小型 linux 可加载内核模块。
我的问题是:有没有办法获得内核中声明的每个 CPU 变量的地址偏移量。偏移量是指地址与 percpu 基址的偏移量,它位于 gs 寄存器中。具体来说,我试图找到 current_task 变量的偏移量,它是指向我相信的当前任务的任务结构的指针。
我正在查看具有 get_current() 函数的 arch/x86/include/asm/current.h。此函数使用宏 percpu_read_stable 读取 current_task per-cpu 变量。据我所知 percpu_read_stable 基本上扩展为这样的 asm 例程:
asm("movq %%gs:%P1, %0"
: "=r" (ret__)
: "m" (per_cpu__current_task))
这是在 arch/x86/include/asm/percpu.h 中。我想从我的模块中读取 gs 之后的偏移量。如果我尝试使用 per_cpu_current_task 变量简单地执行 printk,则该模块将被杀死。
感谢您的关注!