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)

È stato utile?

Soluzione

ricompilare il kernel e riavviare. O è un modulo del kernel?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top