Ich habe einen Treiber für ein Gerät unter Linux geschrieben. Wie kann ich gcc
eine .ko
Datei erstellen (verwenden ) , um sie in den Kernel einzufügen?
Ich habe einen Treiber für ein Gerät unter Linux geschrieben. Wie kann ich gcc
eine .ko
Datei erstellen (verwenden ) , um sie in den Kernel einzufügen?
Antworten:
Erstellen Sie eine Makefile
solche.
ifneq ($(KERNELRELEASE),)
obj-m := mymodule.o
else
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
all:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
install:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules_install
%:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) $@
endif
Angenommen, die Quelle Ihres Moduls befindet sich in mymodule.c
, wird durch Ausführen make
erstellt mymodule.ko
.
.ko
wird, kann sich von Kernel-Release zu Kernel-Release ändern. Die einzige Möglichkeit, um sicherzustellen, dass Sie mit dem Kernel arbeiten, besteht darin, die Makefiles des Kernels zu verwenden.
Kurze Antwort: Sie können nicht. Eine .ko-Datei ist mehr als nur eine kompilierte Version Ihrer Treiberquelle. Das Kernel-Build-System enthält beispielsweise einige zusätzliche Informationen (Compiler-Version, Modulabhängigkeiten, ...).
Sie können wahrscheinlich das Kernel-Build-System durchsuchen, um alle erforderlichen Vorgänge zu finden, sollten dies jedoch nicht. Es wird mit ziemlicher Sicherheit mit der nächsten Kernel-Version oder der darauf folgenden brechen. Sie sollten den mitgelieferten Makefile-Ephemient verwenden.