es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error al implementar la llamada al sistema “Hello World” en Lunix.

Estoy compilando mi kernel para mi llamada al sistema “hello world” pero estoy obteniendo el siguiente error:

ld: arch/x86/entry/syscall_64.o:(.rodata+0xdc0): referencia sin definir a __x64_sys_hello' ld: arch/x86/entry/syscall_x32.o:(.rodata+0xdc0): referencia sin definir a__x64_sys_hello’ make: [Makefile:1139: vmlinux] Error 1 sitio:stackoverflow.com*

A continuación se presentan los cambios que hice para agregar mi llamada al sistema “hello world”:

Versión actual del kernel=5.11.0.40

linux-5.8.1/hello/hello.c:

#include <linux/kernel.h>
#include <linux/syscalls.h>

asmlinkage long sys_hello(void)
{
        printk("Hola mundo\n");
        return 0;
}

linux-5.8.1/Makefile:

ifeq ($(KBUILD_EXTMOD),)
core-y        += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/ hello/

linux-5.8.1/include/linux$ gedit syscalls.h

asmlinkage long sys_hello(void);

linux-5.8.1/arch/x86/entry/syscalls$ gedit syscall_64.tbl

440    common    hello            sys_hello

Espero sus respuestas. Gracias de antemano.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Según el mensaje de error que recibiste, parece que el proceso de compilación del kernel está buscando un símbolo llamado __x64_sys_hello pero no lo encuentra. Esto sugiere que hay una discrepancia entre el nombre de la función de la llamada al sistema en tu código fuente (sys_hello) y el nombre que el kernel espera (__x64_sys_hello).

    Deberías intentar actualizar el archivo syscall_64.tbl en el directorio arch/x86/entry/syscalls para usar el nombre correcto para tu función de llamada al sistema. En este caso, deberías cambiar la línea:

    440 common hello sys_hello

    por

    440 common hello __x64_sys_hello

    Esto asegurará que el símbolo correcto esté definido y referenciado durante el proceso de compilación.

    Además, asegúrate de haber guardado todos tus cambios y de haber ejecutado nuevamente el comando de compilación para reconstruir el kernel con los cambios nuevos.

Comments are closed.