Написание системных вызовов для Linux
-
19-09-2019 - |
Вопрос
я пытаюсь написать системный вызов.Я выполнил следующие шаги:
linux/arch/x86/kernel/syscall_table_32.S ----> .длинный системный вызов 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.Эти строки — мой тестовый код на рабочем столе.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 секунд.Думаю здесь могут быть проблемы)
Решение
Перекомпилируйте ядро и перезагрузитесь.Или это модуль ядра?