我的DKM项目(内核空间)中有几个函数需要从RTP(用户空间)调用。我该怎么做?
我已经实现了自定义系统调用,只从RTP调用内核API,但是在这里我无法为DKM中的那些函数实现自定义系统调用,因为它不是Source build Project的一部分。
我该如何解决这个问题?任何帮助都非常感谢。谢谢!
答案 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);
}
我发现在单独的库中调用这些动态系统调用很有用,并使用有用的函数名称进行包装。