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);
}
Я нашел полезным помещать вызовы этих динамических системных вызовов в отдельную библиотеку и заключать в них полезные имена функций.