web-dev-qa-db-fra.com

Est-il possible de définir CFLAGS sur un module de noyau Linux Makefile?

Par exemple: Makefile d'un module d'appareil commun

obj-m:=jc.o

default:
    $(MAKE) -C /lib/modules/$(Shell uname -r)/build M=$(Shell pwd) modules
clean:
    $(MAKE) -C /lib/modules/$(Shell uname -r)/build M=$(Shell pwd) modules clean

Je considère si je peux définir CFLAGS dans le fichier. Lorsque je change la section par défaut en

$(MAKE) -O2 -C /lib/modules/$(Shell uname -r)/build M=$(Shell pwd) modules

Mais ça n'a pas marché.

De l'aide? Merci beaucoup.

22
大宝剑

-O2 Serait une option pour make (ou $(MAKE), comme vous l'utilisez) dans ce que vous avez essayé. De toute évidence, le compilateur (probablement gcc) a besoin de cet indicateur, pas make.

Kbuild comprend une variable make nommée CFLAGS_modulename.o Pour ajouter des drapeaux C spécifiques lors de la compilation de cette unité. Dans votre cas, votre objet module sera jc.o, Vous pouvez donc spécifier:

CFLAGS_jc.o := -O2

et ça devrait marcher. Ajoutez V=1 À vos lignes $(MAKE) pour obtenir une sortie détaillée et vous devriez voir -O2 Lorsque jc.c Est en cours de compilation.

Vous pouvez trouver plus d'informations sur la compilation des modules dans la documentation officielle .

27
eepp

Vous pouvez aussi utiliser

ccflags-y := -O2

Ceci sera appliqué à tous les fichiers source compilés pour votre module avec le Makefile. Ceci est indirectement documenté dans le lien fourni par eepp dans Section 4.2

16
Benjamin Leinweber