Можно ли установить CFLAGS в модуль Makefile ядра Linux?

Например: общий модуль устройства Makefile

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

Я рассматриваю, могу ли я установить CFLAGS в файл. Когда я меняю раздел по умолчанию на

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

Но это не сработало.

Любая помощь? Большое спасибо.

Ответы

Ответ 1

-O2 будет вариантом make (или $(MAKE), как вы его используете) в том, что вы пробовали. Очевидно, что компилятору (возможно, gcc) нужен этот флаг, а не make.

Kbuild понимает переменную make с именем CFLAGS_modulename.o для добавления определенных флагов C при компиляции этого устройства. В вашем случае ваш объект модуля будет jc.o, поэтому вы можете указать:

CFLAGS_jc.o := -O2

и он должен работать. Добавьте V=1 в свои строки $(MAKE), чтобы получить подробный вывод, и вы должны увидеть -O2, когда компилируется jc.c.

Подробнее о компиляции модулей в официальной документации.

Ответ 2

Вы также можете использовать

ccflags-y := -O2

Это будет применяться ко всем исходным файлам, скомпилированным для вашего модуля с помощью Makefile. Это косвенно документировано в ссылке, предоставленной eepp в Раздел 4.2