2017-07-20 3 views
0

Ich schreibe Kernel-Module, um Einheitentest für ein Projekt zu tun. Da ich Quelldateien in das Projekt einbeziehen muss, erwarte ich, absoluten Pfad zu diesen Dateien zu verwenden. Welche würde meine Makefile wie dieseMake Kernel-Modul Makefile erkennen absoluten Pfad für die Quelle?

foo-objs := dir1/src1.o dir1/src2.o 
foo-objs += dir2/src3.o src4.o 
foo-objs := $(addprefix $(PROJECT_ROOT),$(foo-objs)) 
... 
all: 
$(MAKE) -C /lib/modules/"$(shell uname -r)"/build M=$(PWD) 

$ (PROJECT_ROOT) machen Variable eine Zustandsaufzeichnung absoluten Pfad des Projekts Wurzel wäre.

Auf diese Weise, glaube ich, ist viel klarer und einfacher, viele Unit-Tests zu warten.

Aber wenn ich make mache, Kernel-Makefile versuchen, $ (PWD)/$ (PROJECT_ROOT)/src1.o zu kompilieren, die natürlich nicht existiert. Es scheint behandeln alle Objektdatei als relativen Pfad.

Als ein Ergebnis, ich frage mich, ob es eine Möglichkeit gibt, Kernelmakefile für Module absoluten Pfad zu erkennen, vielen Dank.

+0

Vertraut sein mit 'readlink',' realpath' und vordefinierten Kernelvariablen zur Verwendung in * Makefile * s, d. H. '$ (Srctree)'. – 0andriy

Antwort

0

Ich kenne keine Möglichkeit, Kernel-Makefiles absolute Pfade zu erkennen.

In meinen Projekten habe ich absolute Pfade in relative umgewandelt. Diese Konvertierung ist einfach mit CMake, aber ich bin mir nicht sicher, wie man das im einfachen Make erledigt. Sie können versuchen, Shell für diesen Zweck zu verwenden, siehe this question.

+0

https://0xax.gitbooks.io/linux-insides/content/Misc/how_kernel_compiled.html Lesen Sie einen Absatz, wie '$ (srctree)' gesetzt ist. – 0andriy

+0

Wenn ich richtig verstehe, bezieht sich "srctree" auf ** Kernel Source Tree **. Wie verhält es sich mit Pfaden zu ** Modul ** Quellen? – Tsyvarev

+1

Ich denke 'realpath --relative-to = dir1 dir2' ist was ich will. Danke ~. –

Verwandte Themen