Esto fue probado en FC6 con fuentes del kernel linux: 2.6.18.2:
La implementación de un sistema de llamada en Linux 2.6 para i386 por: Raju
Algunas modificaciones se hicieron a partir de la fuente original para satisfacer mis necesidades .
Paso 1:.
ruta completa del archivo de $ / usr/src/linux/arch/i386/kernel/syscall_table.S
Este archivo contiene los nombres de las llamadas al sistema
1. Añade una línea al final de este archivo (Vamos a suponer que el nombre de nuestra llamada al sistema es mycall).
2. Añadir «sys_mycall largo.» Al final de la lista
Paso 2:.
Ruta completa del archivo de $ / usr/src/linux/include/asm-i386/unistd.h
Este archivo contiene el número de llamadas al sistema que se pasa al kernel mediante el registro (EAX) cuando se invoca una llamada al sistema />
Si la última llamada al sistema definido aquí es:. «# Define __ NR_vmsplice316», entonces
agregar: «# define __ NR_mycall317» en Al final de la lista.
2. Incrementar los «NR_syscalls» en 1. Así que, si NR_syscalls se define como:
«# define NR_syscalls 317», luego cambiarlo a:
«# define NR_syscalls 318»
Paso 3:
Ruta completa del archivo de $ / usr / src / linux / include / linux / syscalls.h
Este archivo contiene las declaraciones de las llamadas al sistema.
1. Agregue la siguiente línea al final del archivo:
«sys_mycall largo asmlinkage (int i);» />
Escriba el código fuente en una de las carpetas conocidas, elegí ipc /
ruta completa: / usr / src / linux / ipc /
1. Cree un archivo de origen denominado mycall.c «mycall.c» tendrá el código de nuestra llamada al sistema.
La definición de la llamada al sistema en el archivo de origen sería sys_mycall asmlinkage largo (…) {… }. Debe incluir el archivo linux / linkage.h Así, el «mycall.c» archivo se verá así:
/ ************* Inicio de mycall.c **** ************** /
# include
retorno i 50;
}
/ **************** Fin de mycall.c **************** * /
¿Cuál es asmlinkage
asmlinkage se utiliza para buscar los argumentos en la pila del núcleo />
Agregue el siguiente línea al Makefile ubicado en la carpeta de su código fuente
[esto es necesario porque cuando hubo el directorio separado mycall / en / usr / src / linux / mycall había problemas con el sistema en busca de un built-in . archivo o después de compilar, debido a la falta de conocimientos sobre la manera de arreglarlo, haciendo que el origen de la carpeta ipc por ejemplo, y la adición de la nueva. archivo o al makefile exisiting, el archivo make para hacer que el kernel no necesita ser modificado, y todo es copastetic [verificación ortográfica] />
Compile / install kernel [cheque esto: http://www.howtoforge.com/kernel_compilation_fedora_p2]
hacer toda make modules_install
make install
Paso 7:
llamada al sistema de prueba obras, escribió un progama de espacio de usuario
NOTA:. macros syscallX estaban «bajo amenaza» y ya no funcionan, evitar el uso de ellos,
y no utilizan la syscall () lib función
syscall (syscallnumber , los argumentos para la llamada sys ….) devuelve />
testmycall.c: compilar: cc-g-o testmycall testmycall.c
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
# include
# include
# include
# include
int main ()
{/>
rc = syscall (318,15) ;/ * número de llamadas al sistema, los argumentos … * /
printf («RC =% d n», rc);
if (rc == -1) />
return 0;}
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
resultados de salida:
[@ Raju ] #. / testmycall
RC = 25