x86-64 SMP üzerinde çalışan 2.6.32 sürümü için küçük bir linux yüklenebilir çekirdek modülü yazıyorum.Her bir cpu değişkenin adresi
Sorum şu: çekirdekte bildirilen bir cpu değişkeninin adresinin ofsetini elde etmenin bir yolu var mı. Ofset ile gs kaydında bulunan percpu tabanından adresin ofsetini kastediyorum. Özellikle, inanıyorum geçerli görev görev-struct için bir işaretçi olan current_task değişkeninin ofset bulmaya çalışıyorum.
get_current() işlevine sahip olan arch/x86/include/asm/current.h dosyasına bakıyorum. Bu işlev, percpu_read_stable makroyu kullanarak current_task per-cpu değişkenini okur. Bildiğim kadarıyla percpu_read_stable anlayabileceği şekilde temelde böyle bir asm rutinine genişler:
asm("movq %%gs:%P1, %0"
: "=r" (ret__)
: "m" (per_cpu__current_task))
Bu kemer/x86/include/asm/percpu.h içindedir. Gs modülden sonra ofseti okumak istiyorum. Eğer per_cpu_current_task değişkeniyle bir printk yapmayı basitleştirirseniz, modül öldürülür.
İlginiz için teşekkür ederiz!