Почему мой системный вызов Linux возвращает -1 в пользовательском пространстве? - PullRequest
2 голосов
/ 03 апреля 2019

Я перепробовал много руководств, и по какой-то причине мой системный вызов даже не возвращает 0, как должно. Куда я иду не так? Вот мои шаги для его создания:

внутри папки "/ linux /": Я создал папку под названием «mycall» с файлами mycall.c, mycall.h и & Makefile

mycall.c:

#include <linux/kernel.h>
#include <linux/init.h>
#include <sched.h>
#include <syscalls.h>
#include <linux/unistd.h>
#include "mycall.h"

asmlinkage long sys_mysyscall(int *id, int username, int *size)
{
 printk("hello");
 return 0;
}

mycall.h:

asmlinkage long sys_mysyscall(int *id, int username, int *size);

Makefile:

obj-y := mycall.o

Затем я пошел во все места, где я ДУМАЛ, что должен объявить системный вызов.

// inside of /linux/include/linux/syscalls.h
asmlinkage long sys_mysyscall(int __user *myid, int username, int __user *size);

затем

// inside of /linux/arch/arm/tools/syscall.tbl
398    common  mysyscall      sys_mysyscall

наконец-то я добавил

// inside of /linux/Makefile
core-y    += kernel/ certs/ mm/ fs/ ipc/ security/ crypt/ block/ mycall/

вот мои настройки. тогда последнее, что я делаю, это создаю пользовательское пространство в каталоге / linux userspace.c:

#include <linux/kernel.h>
#include <sys/syscall.h>
#include <unistd.h>
#include <pwd.h>

int main () 
{
int id = 0;
int username = 7;
int size = 2;
int ret_val = syscall(398, &id, username, &size);
printf("%d\n", ret_val);
return 0;
}

возвращаемое значение -1, так что это не работает. пожалуйста, дайте мне знать, что я делаю неправильно. Я прочитал несколько руководств по реализации.

ERRNO 38. Функция не реализована.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...