VxWorks 7 Wind River Workbench4:如何从 RTP 调用 DKM 中的函数?
VxWorks 7 Wind River Workbench4: How do I call a function in DKM from RTP?
我的 DKM 项目(内核 Space)中有几个函数需要从 RTP(用户 Space)调用。我该怎么做?
我已经实现了自定义系统调用以从 RTP 调用仅内核 API,但在这里我无法为 DKM 中的那些函数实现自定义系统调用,因为它不是源构建项目的一部分。
我该如何解决这个问题?非常感谢任何帮助。谢谢!!
自定义系统调用是答案。我知道你说你不能用那个,但坚持一下。
添加系统调用有两种方法。第一种,听起来您以前已经使用过,是静态添加它们,作为 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);
}
我发现将对这些动态系统调用的调用放在一个单独的库中并用有用的函数名包装起来很有用。
我的 DKM 项目(内核 Space)中有几个函数需要从 RTP(用户 Space)调用。我该怎么做?
我已经实现了自定义系统调用以从 RTP 调用仅内核 API,但在这里我无法为 DKM 中的那些函数实现自定义系统调用,因为它不是源构建项目的一部分。
我该如何解决这个问题?非常感谢任何帮助。谢谢!!
自定义系统调用是答案。我知道你说你不能用那个,但坚持一下。
添加系统调用有两种方法。第一种,听起来您以前已经使用过,是静态添加它们,作为 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);
}
我发现将对这些动态系统调用的调用放在一个单独的库中并用有用的函数名包装起来很有用。