Linux-Kernel-Modul Programmierung: Makefile

8

Beim Lernen von Linux-Kernel-Modulen kann ich (so weit von zwei Quellen entfernt) zwei Möglichkeiten sehen, Makefile zu schreiben. Das erste ist etwas wie:

%Vor%

Letzteres ist weniger komplex:

%Vor%

Jede Makefile-Kompilierung führt zu erfolgreich kompiliertem Modul . Mein Lernen wird begleitet von dem LDD3 Buch und was ich bisher davon gelesen habe ist das nächste:

  

Dieses Makefile wird bei einem typischen Build zweimal gelesen. Wenn das Makefile von der Befehlszeile aus aufgerufen wird, bemerkt es, dass die Variable KERNELRELEASE nicht festgelegt wurde. Es findet das Kernel-Quellverzeichnis, indem es die Tatsache ausnutzt, dass der symbolische Link, der im Verzeichnis der installierten Module erstellt wurde, auf den Kernel-Build-Baum verweist. Wenn Sie den Kernel, für den Sie bauen, nicht ausführen, können Sie eine KERNELDIR = Option auf dem Server angeben   Geben Sie in der Befehlszeile die KERNDIR-Umgebungsvariable ein oder schreiben Sie die einzeilige Zeile neu   KERNELDIR im Makefile. Sobald der Kernel-Quellbaum gefunden wurde, wird das Makefile angezeigt   ruft das default: target auf, das einen zweiten make-Befehl ausführt (parametrisiert in   das Makefile als $ (MAKE)), um das Kernel-Build-System wie zuvor beschrieben aufzurufen.   Beim zweiten Lesen setzt das Makefile obj-m, und die Kernel-Makefiles kümmern sich darum   das Modul tatsächlich aufbauen.

Wenn das Makefile zweimal gelesen wird, sollte der zweite Ansatz zur Rekursion führen, oder?

    
mesmerizingr 12.06.2013, 12:25
quelle

1 Antwort

3

Wenn Sie das Makefile zum ersten Mal aufrufen, indem Sie #make auf der Konsole eingeben, übergeben Sie kein Ziel. Daher wird standardmäßig der Zielname all: im Makefile aufgerufen.

Innerhalb des all: -Ziels übergeben Sie das Ziel als Module. Diesmal baut es die Module auf, anstatt zu all: targets zu gehen.

SO wird es keine unendliche Rekursion sein.

    
androidbuddy 15.06.2013, 12:39
quelle