【问题标题】:VxWorks 7 Wind River Workbench4: How do I call a function in DKM from RTP?VxWorks 7 Wind River Workbench4:如何从 RTP 调用 DKM 中的函数?
【发布时间】:2018-02-02 04:34:28
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    自定义系统调用答案。我知道你说过你不能使用它,但请坚持住。

    添加系统调用有两种方法。第一个,听起来您以前已经使用过,是静态添加它们,作为 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);
    }
    

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

    【讨论】:

    • 谢谢!我使用动态自定义系统调用实现了它,现在一切正常:)
    • @Sukum 太好了。如果您发现此答案有用,请考虑投票和/或接受答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 2018-01-09
    • 2017-02-16
    相关资源
    最近更新 更多