GNU/Linux >> Tutoriales Linux >  >> Linux

Construyendo un módulo kernel a partir de varios archivos fuente, uno de los cuales tiene el mismo nombre que el módulo

Encontré una solución, coloqué mi archivo fuente en una subcarpeta:

Makefile
src/mimodulo.c
src/mymodule_func.c

#Makefile
obj-m += mymodule.o
mymodule-objs := ./src/mymodule.o ./src/mymodule_func.o

all:
    make -C $(KERNEL_PATH) M=$(PWD) modules

clean:
    make -C $(KERNEL_PATH) M=$(PWD) clean

La forma correcta de corregir el archivo de creación del núcleo sería como:

# 
obj-m+= my_module.o

#append other source files except my_module.c which would be include by default
my_module-objs+= src1.o src2.o

Según tengo entendido, no es posible que el nombre del módulo y el nombre de la fuente sean iguales. Sería mejor proporcionar el nombre del módulo como module.o y use Makefile para compilar el módulo del kernel cargable como se muestra a continuación,

Archivo Make

# If KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq ($(KERNELRELEASE),)
    **obj-m := module.o
        module-objs := mymodule.o mymodule_func.o**
    # Otherwise we were called directly from the command
    # line; invoke the kernel build system.
    EXTRA_CFLAGS += -DDEBUG
else
    KERNELDIR   := /lib/modules/$(shell uname -r)/build
    PWD         := $(shell pwd)
default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
clean: 
    $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) clean

Linux
  1. ¿Cómo encontrar la versión de un módulo kernel compilado?

  2. Ejecutar una función de espacio de usuario desde el espacio del kernel

  3. ¿Cómo copiar los 10 archivos más recientes de un directorio a otro?

  4. ¿Cuál es la secuencia de carga del módulo del kernel de Linux al inicio? ¿Cómo se les da prioridad?

  5. ¿Cómo hacer el reenvío de puertos de una ip a otra ip en la misma red?

¿Cómo mover archivos de una cuenta de usuario a otra en la misma computadora?

Migración de un servidor Linux desde la línea de comandos

Cómo compilar el kernel de Linux desde el origen para crear un kernel personalizado

¿Por qué las personas obtienen bash_profile de bashrc en lugar de al revés?

¿Por qué es posible voltear la pantalla?

¿Cómo se encuentra qué archivos ocupan el 80% del espacio en un servidor web Linux?