"arm64/kernel/asm-offsets.c" 的目的是什么?

What's purpose of "arm64/kernel/asm-offsets.c"?

我正在尝试查看 "arch/arm64/kernel/asm-offsets.c" 中定义的内容。

但是不明白这个文件的用途,它到底包含什么?

例如:

DEFINE(KVM_TIMER_CNTVOFF,     offsetof(struct kvm, arch.timer.cntvoff));

上面的定义是什么意思,是arch.timer.cntvoff映射到实际映射的实际CNTVOFF_EL2寄存器吗?

此文件包含用汇编程序编写的模块所需的定义,例如在 KVM_TIMER_CNTVOFF 的情况下,它生成一个具有相同名称的符号,其中包含 arch.timer.cntvoff 字段从kvm 结构的开头(使用 offsetof 宏:http://lxr.free-electrons.com/source/tools/include/linux/kernel.h#L15)。

所以,如果你有这个,你可以使用这些符号来访问 asm 中的结构字段,如下所示:http://tomoyo.osdn.jp/cgi-bin/lxr/source/arch/arm/kvm/interrupts_head.S#L555

555         ldr     r4, [vcpu, #VCPU_KVM]
556         ldr     r2, [r4, #KVM_TIMER_ENABLED]
557         cmp     r2, #0
558         beq     1f
559 
560         ldr     r2, [r4, #KVM_TIMER_CNTVOFF]
561         ldr     r3, [r4, #(KVM_TIMER_CNTVOFF + 4)]
562         mcrr    p15, 4, rr_lo_hi(r2, r3), c14   @ CNTVOFF
563 

因此,在 r4 中,您有 struct kvm 个实例的地址,并且

ldr     r2, [r4, #KVM_TIMER_CNTVOFF]

您正在访问字段 KVM_TIMER_CNTVOFF