【问题标题】:Address of per-cpu variableper-cpu 变量的地址
【发布时间】: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


    【解决方案1】:

    好的,我算出了这个特定符号的偏移量。这个是内核导出的。因此在 /proc/kallsyms 中有一个条目

    000000000000cbc0 D per_cpu__current_task
    

    所以这个特定变量的偏移量是 0xcbc0。当然,其他版本的偏移量会有所不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      相关资源
      最近更新 更多