x86-64 SMP에서 실행중인 2.6.32 버전의 작은 Linux로드 가능한 커널 모듈을 작성 중입니다.cpu 당 변수의 주소
내 질문은 : 커널에 선언 된 CPU 당 변수의 주소 오프셋을 얻는 방법이 있습니까? 오프셋이란 gcp 레지스터에있는 percpu베이스 주소의 오프셋을 의미합니다. 특히 내가 믿는 현재 작업의 task-struct에 대한 포인터 인 current_task 변수의 오프셋을 찾으려고합니다.
나는 get_current() 함수가있는 arch/x86/include/asm/current.h를보고있다. 이 함수는 percpu_read_stable 매크로를 사용하여 cpu 당 current_task 변수를 읽습니다. 지금까지 내가 percpu_read_stable 이해할 수 기본적으로이 같은 ASM 루틴으로 확장
asm("movq %%gs:%P1, %0"
: "=r" (ret__)
: "m" (per_cpu__current_task))
이 아치/86/포함/ASM/percpu.h입니다. 내 모듈에서 gs 뒤에 오프셋을 읽고 싶습니다. per_cpu_current_task 변수로 printk를 간단하게 처리하려고하면 모듈이 강제 종료됩니다.
감사합니다.