VxWorks 7 Wind River Workbench4:如何从RTP调用DKM中的函数?

时间:2017-08-24 10:26:01

标签: c++ vxworks workbench wind-river-workbench

我的DKM项目(内核空间)中有几个函数需要从RTP(用户空间)调用。我该怎么做?

我已经实现了自定义系统调用,只从RTP调用内核API,但是在这里我无法为DKM中的那些函数实现自定义系统调用,因为它不是Source build Project的一部分。

我该如何解决这个问题?任何帮助都非常感谢。谢谢!

1 个答案:

答案 0 :(得分:4)

自定义系统调用的答案。我知道你说你不能使用它,但坚持下去。

添加系统调用有两种方法。第一个,它听起来像你之前已经使用过的,是静态添加它们,作为VxWorks Source Build的一部分。这些允许您以与用户库的任何其他部分完全相同的方式访问函数,例如,在RTP中:

#include <customSysCallHeader.h>

void foo()
{
    customSysCall();
}

然而,正如您所说,这确实需要修改源代码构建。话虽如此,这在VxWorks 7中不是以前的问题。

第二个选项,如果您不想添加到源构建,则更有用的是使用动态系统调用。这些是在运行时通过某些内核代码动态注册的。但是,它们并不像应用程序那样容易使用,因为必须通过syscall()调用所有动态系统调用:

#include <syscall.h> //This may not be correct

void foo()
{
    syscall(CUSTOM_SYSCALL_NUM,1,2,3,4,5,6);
}

我发现在单独的库中调用这些动态系统调用很有用,并使用有用的函数名称进行包装。