我目前正在尝试实现自己的VDSO。我已经使用this tutorial来说明如何针对2.6内核执行此操作。
我对其进行了测试,并使其正常运行。 (我成功创建了一个内核变量,并从用户区访问了它。)
调用vdso时是否有一种在内核中知道的方法?我认为这不能同步完成(因为vdso是在userland中处理的)。但是内核是否有可能(甚至是肮脏的)知道该函数是否已被调用(可能是带有硬件断点之类的东西)?
我想做的事情类似于这段代码中的函数my_vdso_has_been_called()
):
void update_vsyscall(/* […] */) {
// […]
if(my_vdso_has_been_called())
do_something();
}
注意:函数update_vsyscall
可以在arch/x86/kernel/vsyscall_64.c
答案 0 :(得分:1)
由于您知道如何声明共享变量并可以从内核和vDSO中访问它,因此可以使用:声明一个新变量,并在调用它时从vDSO对其进行递增。