2012-10-23 88 views
5

我正在爲在x86-64 SMP上運行的版本2.6.32編寫一個小型Linux可加載內核模塊。per-cpu變量的地址

我的問題是:有沒有辦法獲得內核中聲明的per-cpu變量的地址偏移量。偏移量指的是從gs寄存器中找到的percpu基地址的偏移量。具體來說,我試圖找到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/86 /包括/ ASM/percpu.h。 我想從我的模塊讀取gs後的偏移量。如果我嘗試使用per_cpu_current_task變量來簡單地執行printk,則該模塊將被終止。

感謝您的關注!

回答

2

好吧,我想出了這個特殊符號的偏移量。這個是由內核導出的。因此,存在在/ proc/kallsyms

000000000000cbc0 D per_cpu__current_task 

所以偏移的條目0xcbc0對於該特定變量。當然,其他版本的偏移量也會有所不同。