【发布时间】:2012-10-23 15:11:47
【问题描述】:
我正在为在 x86-64 SMP 上运行的 2.6.32 版编写一个小型 linux 可加载内核模块。
我的问题是:有没有办法获得内核中声明的 per-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,模块就会被杀死。
感谢您的关注!
【问题讨论】:
标签: linux kernel thread-local-storage