VxWorks 7 Wind River Workbench4: Как вызвать функцию в DKM из RTP?

У меня есть несколько функций в моем проекте DKM (пространство ядра), которые необходимо вызывать из RTP (пространство пользователя). Как я могу это сделать?

Я реализовал пользовательские системные вызовы для вызова API ядра только из RTP, но здесь я не могу реализовать пользовательские системные вызовы для этих функций в DKM, потому что он не является частью Project build Project.

Как мне решить эту проблему? Любая помощь высоко ценится. Спасибо!!

1 ответ

Решение

Пользовательские системные вызовы - это ответ. Я знаю, ты сказал, что не можешь использовать это, но просто держись.

Существует два метода добавления системных вызовов. Первое, что, как кажется, вы уже использовали ранее, - это их статическое добавление в составе 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);
}

Я нашел полезным помещать вызовы этих динамических системных вызовов в отдельную библиотеку и заключать в них полезные имена функций.

Другие вопросы по тегам