У меня есть несколько функций в моем проекте DKM (пространство ядра), которые необходимо вызывать из RTP (пространство пользователя). Как я могу это сделать?
Я реализовал пользовательские системные вызовы для вызова API ядра только из RTP, но здесь я не могу реализовать пользовательские системные вызовы для этих функций в DKM, потому что он не является частью Project build Project.
Как мне решить эту проблему? Любая помощь высоко ценится. Спасибо!!
Пользовательские системные вызовы является ответ. Я знаю, ты сказал, что не можешь использовать это, но просто держись.
Существует два метода добавления системных вызовов. Первое, что, как кажется, вы уже использовали ранее, — это их статическое добавление в составе 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);
}
Я нашел полезным помещать вызовы этих динамических системных вызовов в отдельную библиотеку и заключать в них полезные имена функций.
Других решений пока нет …