2011-05-14 14 views
14

He descargado kernel 2.6.38-5 y deseo agregar una llamada al sistema. hice lo siguiente:Dirección incorrecta al agregar una llamada al sistema

  1. he añadido a mi llamada al sistema de tabla de llamadas al sistema;

    <src folder>/arc/x86/kernel/syscall_table_32.S 
    
    .long sys_mycall 
    
  2. he añadido el número de llamadas al sistema;

    <src folder>/include/asm-generic/unistd.h 
    
    #define __NR_mycall 244 
    __SYSCALL(__NR_mycall, sys_mycall) 
    
  3. he añadido el prototipo de syscalls.h;

    <src follder>/include/linux/syscalls.h 
    
    asmlinkage long sys_mycall(long input); 
    
  4. Y esta es mi llamada al sistema;

    asmlinkage long sys_mycall(long input) { 
        return (input * 2); 
    } 
    
  5. He editado los Makefiles también.

Ahora después de la compilación, cuando lo uso a través de syscall() me da BAD ADDRESS con errno fijado a 14.

¿Qué debo hacer?

+4

+1, felicidades por tener una descripción satisfactoriamente completa y un conocimiento mínimo de su problema. No imaginarías a la gente nueva que viene aquí haciendo preguntas muy amplias sobre cosas de muy bajo nivel. – zneak

Respuesta

5

en x86, el número de llamadas al sistema 244 esta siendo utilizado por get_thread_area(), que toma como primer argumento un puntero a una struct user_desc:

int get_thread_area(struct user_desc *u_info); 

Usted está de paso un número en lugar de un puntero, el núcleo está tratando de lo interpreta como un puntero, determina que apunta fuera de su proceso y devuelve -EFAULT.

+0

Tienes razón. Según este archivo '/ usr/include/asm/unistd_32.h', el único número de llamada del sistema disponible en el rango 244 - 259 es 251. así que cambié el número de mi sistema a 251. Pero esta vez dice:' Función no implementada 'con' errno = 38' –

0

Syscalls consulta que ejecuta kernel. La función está asignada a un espacio de direcciones en el kernel. Si no instala este kernel y reinicia el equipo, la dirección no será válida.

+1

No me parece una respuesta – Dani

+0

Ok, elaborando. – Mel

+0

Sí, he instalado la nueva imagen del kernel y los encabezados del kernel. ¡Pero no funciona! –

Cuestiones relacionadas