я пытаюсь написать системный вызов. Я следовал за этими шагами:
linux / arch / x86 / kernel / syscall_table_32.S ---->. long sys mycall
linux / include / linux / syscalls.h --------> asmlinkage int sys mycall (int i, int j);
linux / arch / x86 / include / asm / unistd_32.h ----> #define NR mycall 333
Я изменил linux / Makefile на core-y + = kernel / mm / fs / ipc / security / crypto / block / mycall /
Я создал каталог под названием mycall. ----> Linux / MYCALL
Внутри этого файла я поместил mycall.c:
#include <linux/kernel.h>
asmlinkageintsysmcall(int i,int j )
{
return i + j ;
}
6) Я создаю Makefile. ---> linux / mycall / Makefile.
obj−y := mycall.o
Затем, когда я пытаюсь выполнить этот системный вызов, он всегда возвращает -1. Эти строки - мой тестовый код в Desktop.
testmycall.c
#include <stdio.h>
#include <sys/syscall.h>
#define __NR_mycall 333
int main(void)
{
int x1=10, x2=20, y ;
y = syscall (__NR_mycall, x1, x2 );
printf (”%d\n”,y );
return 0 ;
}
Тогда я перекомпилирую ядро. Если я скомпилирую код, нет ничего плохого. Когда я запускаю эту программу, она не суммирует два значения. Просто возвращает всегда -1. Что не так с моим системным вызовом? (когда я перекомпилировал ядро, система не тратила впустую больше 3 секунд. Думаю, здесь может быть проблема)