我的 DKM 项目(内核空间)中有几个函数需要从 RTP(用户空间)调用。我怎么做?
我已经实现了自定义系统调用以从 RTP 调用仅内核 API,但在这里我无法在 DKM 中为这些函数实现自定义系统调用,因为它不是 Source build Project 的一部分。
我该如何解决这个问题?非常感谢任何帮助。谢谢!!
我的 DKM 项目(内核空间)中有几个函数需要从 RTP(用户空间)调用。我怎么做?
我已经实现了自定义系统调用以从 RTP 调用仅内核 API,但在这里我无法在 DKM 中为这些函数实现自定义系统调用,因为它不是 Source build Project 的一部分。
我该如何解决这个问题?非常感谢任何帮助。谢谢!!
自定义系统调用就是答案。我知道你说过你不能使用它,但请坚持住。
添加系统调用有两种方法。第一个,听起来您以前已经使用过,是静态添加它们,作为 VxWorks 源代码构建的一部分。这些允许您以与用户库的任何其他部分完全相同的方式访问功能,例如,在您的 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);
}
我发现将这些动态系统调用的调用放在一个单独的库中并用有用的函数名包装起来很有用。