Scrivi chiamate di sistema per Linux
-
19-09-2019 - |
Domanda
provo a scrivere una chiamata di sistema. Ho seguito questi passi:
linux / arch / x86 / kernel / syscall_table_32.S ---->. lungo 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
Ho cambiato linux / Makefile al core-y + = kernel / mm / fs / IPC / sicurezza / crypto / blocco / mycall /
ho creato una cartella, denominata MYCALL. ----> linux / mycall
All'interno di tale file, ho messo mycall.c:
#include <linux/kernel.h>
asmlinkageintsysmcall(int i,int j )
{
return i + j ;
}
6) creo Makefile. ---> linux / mycall / Makefile.
obj−y := mycall.o
Poi whrn provo questa chiamata di sistema, restituisce sempre -1. Queste linee sono il mio codice di prova in 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 ;
}
Poi ho ricompilare il kernel. Se compilo il codice, non c'è nulla di male. quando ho eseguito questo programma, quindi non somma di due valori. E 'appena restituisce sempre -1. Cosa c'è di sbagliato con la mia chiamata di sistema? (Quando ho ricompilare il kernel, il sistema non ha perso tempo più di 3 secondi. Credo che qui, ci potrebbe essere un problema)
Soluzione
ricompilare il kernel e riavviare. O è un modulo del kernel?