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

Suk*_*kum 2 c++ vxworks workbench wind-river-workbench

我在DKM项目(内核空间)中有几个功能,需要从RTP(用户空间)中调用。我怎么做?

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

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

mjs*_*mjs 5

定制系统调用就是答案。我知道您说过您不能使用它,但请稍等。

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

#include <customSysCallHeader.h>

void foo()
{
    customSysCall();
}
Run Code Online (Sandbox Code Playgroud)

正如您所说,这确实需要修改源代码版本。话虽如此,与以前相比,在VxWorks 7中这不是一个大问题。

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

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

void foo()
{
    syscall(CUSTOM_SYSCALL_NUM,1,2,3,4,5,6);
}
Run Code Online (Sandbox Code Playgroud)

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