Вопрос

я пытаюсь написать системный вызов.Я выполнил следующие шаги:

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 секунд.Думаю здесь могут быть проблемы)

Это было полезно?

Решение

Перекомпилируйте ядро ​​и перезагрузитесь.Или это модуль ядра?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top