vvar.h
我正在尝试在新的 VDSO 函数附近声明并定义它。这样我就可以在我的 vdso 函数中使用这个变量。
我对 VVar 有疑问。根据 中的描述arch/x86/include/asm/vvar.h
,当我在这里声明一个新变量为 时DECLARE_VVAR(0, int, count)
,我应该DEFINE_VVAR(type, name)
在其他地方定义这个变量。
问题是在我在其他地方定义了这个变量之后,比如DEFINE_VVAR(int, count)
,当我尝试为这个变量分配一个整数值时count
,它失败了。这是因为内核版本 5.2 后#define DEFINE_VVAR(type, name)
已从 更改#define DEFINE_VVAR(type, name) type name
为#define DEFINE_VVAR(type, name) type name[CS_BASES]
.现在这个变量count
是一个整数数组而不是整数类型。因此我无法为其分配整数值。你知道如何修复它吗?
VVAR.h:https://elixir.bootlin.com/linux/v5.12/source/arch/x86/include/asm/vvar.h#L43
答案1
DECLARE_VVAR
和DEFINE_VVAR
是特定于架构的 vDSO 实现细节,您不应使用它们来添加新的 vDSO 数据。
要添加 vDSO 变量,您应该修改struct vdso_data
include/vdso/datapage.h
(您将在那里看到数组构造的相关性;它与时钟源相关,因此引用CS_BASES
),或者如果它是特定于架构的,则相关include/asm/vdso/data.h
文件(当前,s390 是唯一在此类文件中包含架构特定 vDSO 数据的架构;其他架构有不同的方法,请参阅PowerPC 一台)。