
Ich versuche, einen Linux-Gerätetreiber für ein Devkit 8000 zu erstellen. Ich erhalte die folgende Fehlermeldung:
Wenn ich versuche, den Anweisungen zu folgen, werde ich mit einer Reihe von Ja/Nein-Fragen konfrontiert, die ich nicht wirklich verstehe. Am Ende kann ich zwischen 25 verschiedenen Prozessoren wählen(?):
Hier ist mein Makefile:
ifeq ($(KERNELRELEASE),)
KERNELDIR = ~/sources/linux-3.2.6
PWD := $(shell pwd)
modules:
$(MAKE) ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- -C $(KERNELDIR) M=$(PWD) modules
.PHONY: modules clean
else
# called from kernel build system: just declare what our modules are
obj-m := LED_timer.o
endif
Ich glaube nicht, dass mein Code selbst schon relevant ist, außerdemwissendass mein Quellcode voller Fehler ist, das willst du nicht sehen, haha.
Antwort1
Sie haben nicht gesagt, woher Sie die Quelle haben, die Sie verwenden, aber offensichtlich ist .config
darin ein ungültiger Wert enthalten. Dies wird verwendet, um verschiedene Optionen festzulegen, beispielsweise den Prozessortyp. Es gibt buchstäblich Hunderte dieser Optionen mit komplexen Abhängigkeiten voneinander (z. B. wirkt sich der von Ihnen gewählte Prozessor auf Ihre anderen Auswahlmöglichkeiten aus).
Die Vanilla-Quelle enthält kein .config
; Sie müssen entweder eins bereitstellen oder erstellen. make oldconfig
wird verwendet, wenn .config
aus einer früheren Version stammt und aktualisiert werden muss. Manchmal kann dieser Prozess nicht vollständig automatisiert werden und Sie führen am Ende im Grunde aus make config
, das eine CLI-Schnittstelle verwendet; das kann auch passieren, wenn Sie es make oldconfig
ohne Konfiguration versuchen.
Sie sollten sich die Grafik genauer ansehen, make menuconfig
um einen besseren Überblick darüber zu bekommen, worum es geht.
Es ist jedoch unmöglich, bei Null anzufangen und zu versuchen, eine für Sie funktionierende Konfiguration zu erhalten, wenn Sie nicht wissen, was Sie tun. Idealerweise beginnen Sie mit der Konfiguration, die zum Erstellen Ihres laufenden Kernels verwendet wurde. Dies gilt insbesondere, wenn Sie nur ein Modul erstellen. Sie müssen zwar nicht den eigentlichen Kernel erstellen, aber um das Modul zu kompilieren, müssen Sie wissen, wie der Kernel kompiliert wurde, für den es verwendet werden soll.
Hoffentlich finden Sie das auf /proc/config.gz
dem Zielsystem. Dies ist keine Datei auf der Festplatte, das System muss laufen, um sie abzurufen. Es ist gzippt, also
gunzip config.gz
mv config .config
Sollte funktionieren. Kopieren Sie das in Ihren Quellbaum und führen Sie es aus, make menuconfig
um Anweisungen für das Modul hinzuzufügen, das Sie erstellen möchten.
Wenn es das nicht gibt, müssen Sie die verwendete Konfiguration ermitteln. Beachten Sie auch, dass Sie beim Erstellen eines Moduls genau dieselbe Kernelversion verwenden müssen.
Hier istein allgemeiner Überblickdes Kompilierungsprozesses, der ebenfalls hilfreich sein könnte, lesen Sie zuerst Nr. 2 und 3.
Antwort2
Zuerst müssen wir die alte Konfiguration löschen, etwa make mrproper
.
Führen Sie danach erneut aus make menuconfig
. Wenn Sie unerwünschte Elemente definitiv ausgewählt haben, .config
werden diese nicht erstellt.