Kernel

如何在 vvar.h 中聲明一個新變數 |在 linux 中創建一個 vdso

  • May 19, 2021

我正在嘗試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

DECLARE_VVAR並且DEFINE_VVAR是特定於架構的 vDSO 實施細節,您不應該使用它們來添加新的 vDSO 數據。

要添加 vDSO 變數,您應該修改(您將在那裡看到數組構造struct vdso_data include/vdso/datapage.h相關性;它與時鐘源相關聯,因此引用僅在此類文件中具有特定於架構的 vDSO 數據的體系結構;其他體系結構具有不同的方法,請參見PowerPC 之一)。CS_BASES``include/asm/vdso/data.h

引用自:https://unix.stackexchange.com/questions/650350