我试图研究“arch/arm64/kernel/asm offsets.c”中定义的内容。
但不明白这个文件的目的,它到底包含了什么?
例如:

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

上面的定义是什么意思,arch.timer.cntvoff是否映射到实际映射的actuall cntvoff\u 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

关于c - “arm64/kernel/asm-offsets.c”的目的是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32777462/

10-10 18:27