Ich versuche, ein Linux-Kernel-Modul mit dem Standard-Beispiel-Makefile zu kompilieren, das in Linux Kernel Module Programming Guide angegeben ist. Wenn das Makefile Makefile
heißt, dann funktioniert alles. Wenn ich das Makefile zu Makefile.hello
oder etwas anderem umbenenne, schlägt es fehl, da es den Pfad Makefile
nicht finden kann. Ich habe mich gefragt, ob es einen Befehl oder eine Gruppe von Flags gibt, die ich zu meinem Makefile hinzufügen kann, um diese Funktion richtig zu machen. Ich muss das Makefile umbenennen, wie ich es von CMake anrufe. Cmake erstellt seine eigenen Makefiles und überschreibt häufig, was ich bereits habe.Linux-Kernelmodul mit Makefile mit anderem Pfadnamen erstellen
Ich ersetzte meinen Kernel-Modul-Code durch das Hallo Welt-Beispiel und replizierte das Problem. Ich kenne das Makefile.
Hallo Welt Beispiel hello.c
/*
* hello−1.c − The simplest kernel module.
*/
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
int init_module(void)
{
printk(KERN_INFO "Hello world 1.\n");
/*
* A non 0 return means init_module failed; module can't be loaded.
*/
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.\n");
}
Makefile
obj-m += hello.o
ifeq (,$(KDIR))
KDIR := /lib/modules/$(shell uname -r)/build
endif
PWD := $(shell pwd)
all:
$(MAKE) -C $(KDIR) M=$(PWD) $(KCONFIG) modules
clean:
$(MAKE) -C $(KDIR) M=$(PWD) clean
Wenn Make-Datei Makefile
genannt wird. (Baut erfolgreich)
$> make -f Makefile
make -C /lib/modules/4.4.0-21-generic/build M=/home/msmith/Desktop/kernel-test modules
make[1]: Entering directory '/usr/src/linux-headers-4.4.0-21-generic'
CC [M] /home/msmith/Desktop/kernel-test/hello.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/msmith/Desktop/kernel-test/hello.mod.o
LD [M] /home/msmith/Desktop/kernel-test/hello.ko
make[1]: Leaving directory '/usr/src/linux-headers-4.4.0-21-generic'
Make ausgegeben, wenn Make-Datei aufgerufen wird Makefile.hello
(bauen ausfällt)
$> make -f Makefile.hello
make -C /lib/modules/4.4.0-21-generic/build M=/home/msmith/Desktop/kernel-test modules
make[1]: Entering directory '/usr/src/linux-headers-4.4.0-21-generic'
scripts/Makefile.build:44: /home/msmith/Desktop/kernel-test/Makefile: No such file or directory
make[2]: *** No rule to make target '/home/msmith/Desktop/kernel-test/Makefile'. Stop.
Makefile:1396: recipe for target '_module_/home/msmith/Desktop/kernel-test' failed
make[1]: *** [_module_/home/msmith/Desktop/kernel-test] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-4.4.0-21-generic'
Makefile.hello:10: recipe for target 'all' failed
make: *** [all] Error 2
Ich habe versucht, die -f auf die internen MAKE Parameter angeben, aber die nur mehr Probleme verursacht.
Ich bezweifle, dass Sie einfach ein Modul mit CMake erstellen können. Kernel verwendet sein eigenes Build-System namens KBuild. https://cmake.org/pipermail/cmake/2007-November/017320.html – 0andriy