Чего не хватает в моей реализации системного вызова? - PullRequest
0 голосов
/ 03 апреля 2019

Я перепробовал много руководств, и по какой-то причине мой системный вызов не реализован правильно.ERRNO 38 (функция не реализована).Вот мои шаги по созданию базового для меня, как для начинающего:

Я делаю это на 64-битном Raspberry Pi.с linux 4.14.93

внутри папки "/ 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;
}
// recompiling & copying . then I run the userspace again
cd ~/linux
KERNEL=kernel7
make bcm2709_defconfig
make -j4 zImage modules dtbs
sudo make INSTALL_MOD_PATH=/root modules_install

sudo cp arch/arm/boot/dts/*.dtb /boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/
sudo cp arch/arm/boot/zImage /boot/$KERNEL.img

, возвращаемое значение -1, так что это не работает.

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

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