Tenho um módulo de kernel externo e um Makefile. Eu estava usando o Kbuild, mas decidi usar um Makefile e make direto. Tenho meus headers instalados, build-essential e kmod instalados, e estou me deparando com um problema com um arquivo .h até agora.
Tenho meu arquivo .c para .o para o módulo de kernel externo. Os problemas dizem respeito ao arquivo .h até agora. Não consigo compilá-lo.
Então, aqui está meu Makefile simples:
# Some random Kernel Module Course Online
# KDIR += /lib/modules/$(shell uname -r)/build
obj-m += kernel_char.o kernel_char_one.o
all:
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD)
clean:
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Este kernel_char.o
é meu arquivo .c. kernel_char_one.o
é o arquivo .h. Ele diz que estou usando o arquivo .h para compilação incorretamente na saída:
make -C /lib/modules/4.19.94-ti-r74/build M=/home/debian/Kernel_Modules modules
make[1]: Entering directory '/usr/src/linux-headers-4.19.94-ti-r74'
make[2]: *** No rule to make target '/home/debian/Kernel_Modules/kernel_char_one.c', needed by '/home/debian/Kernel_Modules/kernel_char_one.o'. Stop.
make[1]: *** [Makefile:1522: _module_/home/debian/Kernel_Modules] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-4.19.94-ti-r74'
make: *** [Makefile:9: all] Error 2
A saída acima é depois que eu uso make
para meu Makefile
. Eu estava pensando que havia alguma maneira específica de compilar um arquivo .h para módulos de kernel externos.
1. The reason for having a .h file:
a. I need my userspace program and the kernel module to know about it.